fix(movies): okladki pandanetwork z Adult Empire zamiast wygasajacego wp.com

Zgloszenie 6799253d: filmy Tushy Raw bez okladek, linki dzialaja. Okladki
sieci pandanetwork (i*.wp.com/pandanetwork.club/.../<numer>h.jpg) to kopie
okladek Adult Empire pod tym samym numerem produktu; zrodlo oddaje 404,
a pamiec wp.com wygasa (40 z 40 losowych martwych). Normalizacja nowych
filmow podmienia adres na imgs1cdn.adultempire.com/products/<NN>/<numer>h.jpg.

Jednorazowo na produkcji przepisane 51 900 okladek (kopia starych adresow
w movies_poster_backup_20261012), probka 80 z 80 zywych z VPS. Zgodnosc
numeru z filmem sprawdzona po tytulach i wzrokowo na okladkach.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
goon-foss 2026-10-12 10:02:39 +02:00
parent cd34b296e2
commit f6081669a0

View file

@ -1,6 +1,7 @@
"""RawMovie → NormalizedMovie. Reuse normalize_studio/performer/tag z scenes.py."""
from __future__ import annotations
import re
from dataclasses import dataclass, field
from datetime import date
@ -16,6 +17,24 @@ from app.normalize.scenes import (
from app.normalize.text import clean_description, normalize, slugify, unescape_html
# Okladki z sieci pandanetwork (i*.wp.com/pandanetwork.club/.../<numer>h.jpg) to kopie okladek
# Adult Empire pod tym samym numerem produktu. Zrodlo oddaje juz 404, a pamiec podreczna wp.com
# wygasa: 2026-10-12 40 z 40 losowych okladek martwych, zgloszenie 6799253d (Tushy Raw bez
# okladek). Oryginal z Adult Empire jest pod numerem z nazwy pliku (sprawdzone wzrokowo i po
# tytulach na probce).
_PANDA_POSTER_RE = re.compile(r"pandanetwork\.club/.*/(\d{6,8})h(?:-\d)?\.jpe?g", re.IGNORECASE)
def stable_poster_url(url: str | None) -> str | None:
if not url:
return url
m = _PANDA_POSTER_RE.search(url)
if not m:
return url
pid = m.group(1)
return f"https://imgs1cdn.adultempire.com/products/{pid[-2:]}/{pid}h.jpg"
@dataclass
class NormalizedMovie:
external_id: str
@ -55,7 +74,7 @@ def normalize_movie(raw: RawMovie) -> NormalizedMovie:
director=raw.director,
country=raw.country,
rating=raw.rating,
poster_url=raw.poster_url,
poster_url=stable_poster_url(raw.poster_url),
backdrop_url=raw.backdrop_url,
url=raw.url,
studio=normalize_studio(raw.studio) if raw.studio else None,