kink-discovery / scripts /regression_checks.py
Perplexed7675's picture
Sync from kink_cli (Docker Space)
6ff91d6 verified
Raw
History Blame Contribute Delete
5.14 kB
from __future__ import annotations
import os
import tempfile
import sys
from pathlib import Path
from sqlmodel import Session
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from backend import Backend
from models import Asset, FetlifeKinkMeta, FetlifePictureRef, Kink, Source
def assert_true(condition: bool, message: str) -> None:
if not condition:
raise AssertionError(message)
def check_fetlife_popularity_uses_kinksters() -> None:
with tempfile.TemporaryDirectory() as tmp_dir:
backend = Backend(Path(tmp_dir) / "store.db")
with Session(backend.engine) as session:
session.add(
Kink(
id="fixture_popularity",
name="Fixture Play",
cluster="fetlife_fetish",
short_definition="Fixture",
notes="",
risk_level="low",
is_extreme=False,
)
)
session.commit()
backend.upsert_fetlife_kink_meta(
"fixture_popularity",
"999",
"https://example.test/fetishes/999",
{
"Kinksters": "271K",
"Pictures": "1M",
"Statuses": "1M",
"Videos": "193K",
},
has_real_images=True,
similar_count=3,
)
with Session(backend.engine) as session:
meta = session.get(FetlifeKinkMeta, "fixture_popularity")
assert_true(meta is not None, "fixture meta was not written")
assert_true(meta.popularity == 271000.0, f"popularity should use Kinksters only, got {meta.popularity}")
def check_image_relevance_filters_spammy_reuse() -> None:
with tempfile.TemporaryDirectory() as tmp_dir:
backend = Backend(Path(tmp_dir) / "store.db")
with Session(backend.engine) as session:
session.add(Source(id="fetlife_fetish_pages", name="Fixture", source_type="test", base_url="", license_model="test"))
session.add(Kink(id="fixture_bondage", name="Bondage", cluster="fetlife_fetish", short_definition="", notes=""))
for index in range(14):
kink_id = f"fixture_other_{index}"
session.add(Kink(id=kink_id, name=f"Other {index}", cluster="fetlife_fetish", short_definition="", notes=""))
session.commit()
with Session(backend.engine) as session:
for index in range(14):
kink_id = f"fixture_other_{index}"
session.add(
Asset(
id=f"asset_other_{index}",
kink_id=kink_id,
source_id="fetlife_fetish_pages",
asset_url=f"/media/fetlife_fetishes/{index}/999.jpg",
)
)
session.add(
FetlifePictureRef(
id=f"ref_other_{index}",
kink_id=kink_id,
fetish_id=str(index),
attachment_id="999",
picture_title="Picture by spam - unrelated tag cloud",
)
)
session.add(
Asset(
id="asset_good",
kink_id="fixture_bondage",
source_id="fetlife_fetish_pages",
asset_url="/media/fetlife_fetishes/10/100.jpg",
)
)
session.add(
FetlifePictureRef(
id="ref_good",
kink_id="fixture_bondage",
fetish_id="10",
attachment_id="100",
picture_title="Picture by creator - bondage rope",
caption_text="bondage rope",
)
)
session.add(
Asset(
id="asset_spam",
kink_id="fixture_bondage",
source_id="fetlife_fetish_pages",
asset_url="/media/fetlife_fetishes/10/999.jpg",
)
)
session.add(
FetlifePictureRef(
id="ref_spam",
kink_id="fixture_bondage",
fetish_id="10",
attachment_id="999",
picture_title="Picture by spam - unrelated tag cloud",
)
)
session.commit()
detail = backend.get_kink("fixture_bondage")
assert_true(detail is not None, "fixture detail missing")
assert_true(detail["representative_image_count"] == 1, f"expected one representative image, got {detail['representative_image_count']}")
assert_true(detail["assets"][0]["image_relevance_score"] > 0.7, "good image relevance score too low")
def main() -> int:
check_fetlife_popularity_uses_kinksters()
check_image_relevance_filters_spammy_reuse()
print("REGRESSION CHECKS OK")
return 0
if __name__ == "__main__":
raise SystemExit(main())