diff --git a/app/assets/api/routes.py b/app/assets/api/routes.py index 1ec511021..c1c319893 100644 --- a/app/assets/api/routes.py +++ b/app/assets/api/routes.py @@ -349,6 +349,7 @@ async def create_asset_from_hash_route(request: web.Request) -> web.Response: user_metadata=body.user_metadata, owner_id=USER_MANAGER.get_request_user_id(request), mime_type=body.mime_type, + preview_id=body.preview_id, ) if result is None: return _build_error_response( @@ -436,6 +437,7 @@ async def upload_asset(request: web.Request) -> web.Response: user_metadata=spec.user_metadata or {}, owner_id=owner_id, mime_type=spec.mime_type, + preview_id=spec.preview_id, ) if result is None: delete_temp_file_if_exists(parsed.tmp_path) diff --git a/app/assets/api/schemas_in.py b/app/assets/api/schemas_in.py index 9ef406756..a4ca72a37 100644 --- a/app/assets/api/schemas_in.py +++ b/app/assets/api/schemas_in.py @@ -124,6 +124,7 @@ class CreateFromHashBody(BaseModel): tags: list[str] = Field(default_factory=list) user_metadata: dict[str, Any] = Field(default_factory=dict) mime_type: str | None = None + preview_id: str | None = None @field_validator("hash") @classmethod diff --git a/app/assets/services/ingest.py b/app/assets/services/ingest.py index 5be09f8e3..3edb97470 100644 --- a/app/assets/services/ingest.py +++ b/app/assets/services/ingest.py @@ -137,6 +137,7 @@ def _register_existing_asset( tag_origin: str = "manual", owner_id: str = "", mime_type: str | None = None, + preview_id: str | None = None, ) -> RegisterAssetResult: user_metadata = user_metadata or {} @@ -148,14 +149,22 @@ def _register_existing_asset( if mime_type and asset.mime_type != mime_type: update_asset_hash_and_mime(session, asset_id=asset.id, mime_type=mime_type) + if preview_id: + if not reference_exists(session, preview_id): + preview_id = None + ref, ref_created = get_or_create_reference( session, asset_id=asset.id, owner_id=owner_id, name=name, + preview_id=preview_id, ) if not ref_created: + if preview_id and ref.preview_id != preview_id: + ref.preview_id = preview_id + tag_names = get_reference_tags(session, reference_id=ref.id) result = RegisterAssetResult( ref=extract_reference_data(ref), @@ -278,6 +287,8 @@ def upload_from_temp_path( tags=tags or [], tag_origin="manual", owner_id=owner_id, + mime_type=mime_type, + preview_id=preview_id, ) return UploadResult( ref=result.ref, @@ -412,6 +423,7 @@ def create_from_hash( user_metadata: dict | None = None, owner_id: str = "", mime_type: str | None = None, + preview_id: str | None = None, ) -> UploadResult | None: canonical = hash_str.strip().lower() @@ -426,6 +438,7 @@ def create_from_hash( tag_origin="manual", owner_id=owner_id, mime_type=mime_type, + preview_id=preview_id, ) except ValueError: logging.warning("create_from_hash: no asset found for hash %s", canonical)