Use ExtractedMetadata in ingest_existing_file instead of passing raw dict

Have ingest_existing_file call extract_file_metadata() to build a proper
ExtractedMetadata object, matching what the scanner does. This tightens
SeedAssetSpec.metadata to ExtractedMetadata | None and removes dict-handling
branches in bulk_ingest.py that would have raised AttributeError on
to_meta_rows()/to_user_metadata().

Amp-Thread-ID: https://ampcode.com/threads/T-019cfdf9-2379-723a-82cf-306755e54396
Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
Luke Mino-Altherr 2026-03-17 15:54:47 -07:00
parent 05f0052c73
commit b9286572d3
2 changed files with 7 additions and 7 deletions

View File

@ -34,7 +34,7 @@ class SeedAssetSpec(TypedDict):
info_name: str info_name: str
tags: list[str] tags: list[str]
fname: str fname: str
metadata: ExtractedMetadata | dict[str, Any] | None metadata: ExtractedMetadata | None
hash: str | None hash: str | None
mime_type: str | None mime_type: str | None
job_id: str | None job_id: str | None
@ -152,10 +152,8 @@ def batch_insert_seed_assets(
# Build user_metadata from extracted metadata or fallback to filename # Build user_metadata from extracted metadata or fallback to filename
extracted_metadata = spec.get("metadata") extracted_metadata = spec.get("metadata")
if isinstance(extracted_metadata, dict): if extracted_metadata:
user_metadata: dict[str, Any] | None = extracted_metadata user_metadata: dict[str, Any] | None = extracted_metadata.to_user_metadata()
elif extracted_metadata:
user_metadata = extracted_metadata.to_user_metadata()
elif spec["fname"]: elif spec["fname"]:
user_metadata = {"filename": spec["fname"]} user_metadata = {"filename": spec["fname"]}
else: else:

View File

@ -26,6 +26,7 @@ from app.assets.database.queries import (
from app.assets.helpers import get_utc_now, normalize_tags from app.assets.helpers import get_utc_now, normalize_tags
from app.assets.services.bulk_ingest import batch_insert_seed_assets from app.assets.services.bulk_ingest import batch_insert_seed_assets
from app.assets.services.file_utils import get_size_and_mtime_ns from app.assets.services.file_utils import get_size_and_mtime_ns
from app.assets.services.metadata_extract import extract_file_metadata
from app.assets.services.path_utils import ( from app.assets.services.path_utils import (
compute_relative_filename, compute_relative_filename,
get_name_and_tags_from_asset_path, get_name_and_tags_from_asset_path,
@ -196,6 +197,7 @@ def ingest_existing_file(
session.commit() session.commit()
return True return True
metadata = extract_file_metadata(locator)
spec = { spec = {
"abs_path": abs_path, "abs_path": abs_path,
"size_bytes": size_bytes, "size_bytes": size_bytes,
@ -203,9 +205,9 @@ def ingest_existing_file(
"info_name": name, "info_name": name,
"tags": tags, "tags": tags,
"fname": os.path.basename(abs_path), "fname": os.path.basename(abs_path),
"metadata": user_metadata, "metadata": metadata,
"hash": None, "hash": None,
"mime_type": mime_type, "mime_type": mime_type or metadata.content_type,
"job_id": job_id, "job_id": job_id,
} }
result = batch_insert_seed_assets(session, [spec], owner_id=owner_id) result = batch_insert_seed_assets(session, [spec], owner_id=owner_id)