Files
FabledCurator/backend/app/models/import_settings.py
T
bvandeusen 23d2fb24ac fix(fc2a): three unit-test failures — async fixture decorator, name convention, lazy celery includes
test_health.py:
  @pytest.fixture on an `async def` function is rejected by pytest-asyncio
  1.x strict mode. Switched to @pytest_asyncio.fixture.

backend/app/models/import_settings.py:
  My constraint name was 'ck_import_settings_singleton' and Base.metadata's
  naming convention applies 'ck_<table>_<name>' on top, so the final ORM
  name was 'ck_import_settings_ck_import_settings_singleton' (double prefix).
  The migration creates the DB constraint as 'ck_import_settings_singleton'
  via raw alembic, so they didn't match. Fix: bare name 'singleton' in the
  model → convention produces 'ck_import_settings_singleton', matching the
  migration's literal name.

tests/test_tasks_register.py:
  Celery's include=[...] parameter on the constructor is lazy — task
  modules aren't imported until a worker boots. The test only imported
  the Celery instance, so the @celery.task decorators in scan.py /
  import_file.py / thumbnail.py never ran. Fix: explicit `import` of
  those modules for side-effect at the top of the test file.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 15:40:47 -04:00

31 lines
1.4 KiB
Python

"""ImportSettings — single-row table holding the importer's tunable knobs.
Enforced as a single row via a CHECK (id = 1) constraint. The application
always SELECTs id=1 and never inserts/deletes after the initial migration.
"""
from sqlalchemy import Boolean, CheckConstraint, Float, Integer, Text
from sqlalchemy.orm import Mapped, mapped_column
from .base import Base
class ImportSettings(Base):
__tablename__ = "import_settings"
# Bare constraint name — Base.metadata's naming convention applies the
# ck_<table>_<name> prefix, producing the final ck_import_settings_singleton.
__table_args__ = (CheckConstraint("id = 1", name="singleton"),)
id: Mapped[int] = mapped_column(Integer, primary_key=True)
import_scan_path: Mapped[str] = mapped_column(Text, nullable=False, default="/import")
min_width: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
min_height: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
skip_transparent: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
transparency_threshold: Mapped[float] = mapped_column(Float, nullable=False, default=0.9)
skip_single_color: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
single_color_threshold: Mapped[float] = mapped_column(Float, nullable=False, default=0.95)
single_color_tolerance: Mapped[int] = mapped_column(Integer, nullable=False, default=30)