From 3ac3ca1d703bd1c350ffef5f76228822e1ec9cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hartmut=20N=C3=B6renberg?= Date: Fri, 6 Mar 2026 21:02:41 +0100 Subject: [PATCH] fix(K): correct CATALOG_SCRIPT path + register AssetLibrary in models/__init__ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fix(tasks): use RENDER_SCRIPTS_DIR env var for catalog_assets.py path (was computing wrong path via __file__ parents → /render-worker/scripts/ which doesn't exist in container) - fix(models): add AssetLibrary to app/models/__init__.py so alembic autogenerate discovers it - fix(api): remove unused FileResponse import from asset_libraries.py Co-Authored-By: Claude Sonnet 4.6 --- backend/app/api/routers/asset_libraries.py | 1 - backend/app/domains/materials/tasks.py | 5 +++-- backend/app/models/__init__.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/app/api/routers/asset_libraries.py b/backend/app/api/routers/asset_libraries.py index 09f1db9..4777dfc 100644 --- a/backend/app/api/routers/asset_libraries.py +++ b/backend/app/api/routers/asset_libraries.py @@ -4,7 +4,6 @@ import shutil from pathlib import Path from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Form, status -from fastapi.responses import FileResponse from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from pydantic import BaseModel diff --git a/backend/app/domains/materials/tasks.py b/backend/app/domains/materials/tasks.py index d2865dc..d3df5b1 100644 --- a/backend/app/domains/materials/tasks.py +++ b/backend/app/domains/materials/tasks.py @@ -3,6 +3,7 @@ from __future__ import annotations import json import logging +import os import subprocess import uuid from pathlib import Path @@ -11,7 +12,8 @@ from celery import shared_task logger = logging.getLogger(__name__) -CATALOG_SCRIPT = Path(__file__).parent.parent.parent.parent.parent / "render-worker" / "scripts" / "catalog_assets.py" +# Scripts are copied to /render-scripts/ in the render-worker container (RENDER_SCRIPTS_DIR env var) +CATALOG_SCRIPT = Path(os.environ.get("RENDER_SCRIPTS_DIR", "/render-scripts")) / "catalog_assets.py" @shared_task( @@ -48,7 +50,6 @@ def refresh_asset_library_catalog(self, asset_library_id: str) -> None: return # Determine Blender binary - import os blender_bin = os.environ.get("BLENDER_BIN", "blender") result = subprocess.run( diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py index c88e2f4..396dc3f 100644 --- a/backend/app/models/__init__.py +++ b/backend/app/models/__init__.py @@ -11,7 +11,7 @@ from app.domains.orders.models import Order, OrderItem, OrderLine from app.domains.notifications.models import AuditLog from app.domains.billing.models import PricingTier from app.domains.rendering.models import OutputType, RenderTemplate, ProductRenderPosition, WorkflowDefinition, WorkflowRun, WorkflowNodeResult -from app.domains.materials.models import Material, MaterialAlias +from app.domains.materials.models import Material, MaterialAlias, AssetLibrary from app.domains.media.models import MediaAsset, MediaAssetType # Also re-export SystemSetting (no domain assigned — stays as-is) @@ -21,5 +21,5 @@ __all__ = [ "Tenant", "User", "Template", "CadFile", "Product", "Order", "OrderItem", "OrderLine", "AuditLog", "PricingTier", "OutputType", "RenderTemplate", "ProductRenderPosition", "WorkflowDefinition", "WorkflowRun", "WorkflowNodeResult", - "Material", "MaterialAlias", "MediaAsset", "MediaAssetType", "SystemSetting", + "Material", "MaterialAlias", "AssetLibrary", "MediaAsset", "MediaAssetType", "SystemSetting", ]