fix the car image gen color update

This commit is contained in:
ismail 2025-08-27 14:10:22 +03:00
parent 2bbcae2e7a
commit 4b6de7794b
19 changed files with 46 additions and 29 deletions

View File

@ -815,8 +815,8 @@ class Car(Base):
color = ""
try:
color = self.colors.exterior.name if self.colors else ""
except Exception:
pass
except Exception as e:
logger.error(f"Error getting color for car {self.vin} error: {e}")
make = self.id_car_make.name if self.id_car_make else ""
model = self.id_car_model.name if self.id_car_model else ""
year = self.year if self.year else 0

View File

@ -1,3 +1,4 @@
import os
from datetime import datetime, timedelta
from decimal import Decimal
from django.urls import reverse
@ -1291,30 +1292,39 @@ def handle_car_image(sender, instance, created, **kwargs):
try:
# Create or get car image record
car = instance.car
car_image, created = models.CarImage.objects.get_or_create(
car=car, defaults={"image_hash": car.get_hash}
)
car.hash = car.get_hash
car.save()
# car_image, created = models.CarImage.objects.get_or_create(
# car=car, defaults={"image_hash": car.get_hash}
# )
# Check for existing image with same hash
existing = (
models.CarImage.objects.filter(
image_hash=car_image.image_hash, image__isnull=False
)
.exclude(car=car)
.first()
)
existing = os.path.exists(os.path.join(settings.MEDIA_ROOT, "car_images",car.get_hash + ".png"))
# existing = (
# models.CarImage.objects.filter(
# image_hash=car.get_hash, image__isnull=False
# )
# .first()
# )
if existing:
logger.info(f"Found existing image for car {car.vin}")
# Copy existing image
car_image.image.save(existing.image.name, existing.image.file, save=True)
# car_image.image.save(existing.image.name, existing.image.file, save=True)
logger.info(f"Reused image for car {car.vin}")
else:
logger.info(f"Generating image for car {car.vin}")
# Schedule async generation
async_task(
"inventory.tasks.generate_car_image_task",
car_image.id,
car.pk,
task_name=f"generate_car_image_{car.vin}",
)
# async_task(
# "inventory.tasks.generate_car_image_task",
# car_image.id,
# task_name=f"generate_car_image_{car.vin}",
# )
logger.info(f"Scheduled image generation for car {car.vin}")
except Exception as e:

View File

@ -29,6 +29,7 @@ from inventory.models import (
CarReservation,
CarStatusChoices,
CarImage,
Car
)
logger = logging.getLogger(__name__)
@ -981,8 +982,9 @@ def generate_car_image_task(car_image_id):
from inventory.utils import generate_car_image_simple
try:
car_image = CarImage.objects.get(id=car_image_id)
result = generate_car_image_simple(car_image)
# car_image = CarImage.objects.get(id=car_image_id)
car = Car.objects.get(pk=car_image_id)
result = generate_car_image_simple(car)
return {
"success": result.get("success", False),
@ -992,11 +994,6 @@ def generate_car_image_task(car_image_id):
if result.get("success")
else "Generation failed",
}
except CarImage.DoesNotExist:
error_msg = f"CarImage with id {car_image_id} not found"
logger.error(error_msg)
return {"success": False, "error": error_msg}
except Exception as e:
error_msg = f"Unexpected error: {e}"
logger.error(error_msg)

View File

@ -1,3 +1,4 @@
import os
import json
import secrets
import logging
@ -2519,7 +2520,7 @@ class CarImageAPIClient:
"X-CSRFToken": self.csrf_token,
"Referer": self.BASE_URL,
}
print(payload)
logger.info(f"Generating image with payload: {payload}")
generate_data = {
"year": payload["year"],
"make": payload["make"],
@ -2541,6 +2542,7 @@ class CarImageAPIClient:
# Parse response
result = response.json()
image_url = result.get("url")
logger.info(f"Generated image URL: {image_url}")
if not image_url:
raise Exception("No image URL in response")
@ -2617,11 +2619,10 @@ def resize_image(image_data, max_size=(800, 600)):
return None, error_msg
def generate_car_image_simple(car_image):
def generate_car_image_simple(car):
"""
Simple function to generate car image with authentication and resizing
"""
car = car_image.car
# Prepare payload
payload = {
@ -2659,12 +2660,15 @@ def generate_car_image_simple(car_image):
file_extension = "jpg"
# Save the resized image
car_image.image.save(
f"{car_image.image_hash}.{file_extension}",
ContentFile(resized_data),
save=False,
)
logger.info(f" {car.vin}")
with open(
os.path.join(settings.MEDIA_ROOT, f"car_images/{car.get_hash}.{file_extension}"),
"wb",
) as f:
f.write(resized_data)
logger.info(f"Saved image for car {car.vin}")
# Update CarImage record
logger.info(f"Successfully generated and resized image for car {car.vin}")
return {"success": True}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 432 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 KiB

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 KiB

View File

@ -17,6 +17,12 @@
{% if form.name.help_text %}<small class="form-text text-muted">{{ form.name.help_text }}</small>{% endif %}
{% for error in form.name.errors %}<div class="invalid-feedback d-block">{{ error }}</div>{% endfor %}
</div>
<div class="mb-3">
{{ form.active.label_tag }}
{{ form.active }}
{% if form.active.help_text %}<small class="form-text text-muted">{{ form.active.help_text }}</small>{% endif %}
{% for error in form.active.errors %}<div class="invalid-feedback d-block">{{ error }}</div>{% endfor %}
</div>
<div class="mb-3">
{{ form.description.label_tag }}
{{ form.description|add_class:"form-control" }}