Files
imagefind/backend/imagefind/metadata.py
T

34 lines
978 B
Python

from __future__ import annotations
import re
from pathlib import Path
from .database import utcnow
_CATALOG_PATTERNS = (
re.compile(r"(?i)\b(FC2[-_ ]?PPV[-_ ]?\d{5,9})\b"),
re.compile(r"(?i)\b([A-Z]{2,10}[-_ ]?\d{2,7})\b"),
)
def infer_catalog_code(filename: str) -> str | None:
stem = Path(filename).stem
for pattern in _CATALOG_PATTERNS:
match = pattern.search(stem)
if match:
value = re.sub(r"[-_ ]+", "-", match.group(1).upper())
if not value.isdigit():
return value
return None
def ensure_inferred_metadata(conn, video_id: str, filename: str) -> None:
code = infer_catalog_code(filename)
if not code:
return
conn.execute(
"INSERT INTO video_metadata(video_id,catalog_code,updated_at) VALUES(?,?,?) "
"ON CONFLICT(video_id) DO UPDATE SET catalog_code=coalesce(video_metadata.catalog_code,excluded.catalog_code)",
(video_id, code, utcnow()),
)