1745 wystapien w 291 plikach (backend, scripts, mobile). Dominowal jeden ksztalt, ' — ' laczace zdania, wiec poszedl przecinek; myslnik otwierajacy mysl zdjety; zakresy 0–5 i A–Z na dywiz. Podzial komentarz/kod robil skaner stanow, nie regex, zeby nie ruszyc myslnika stojacego w stringu albo w wyrazeniu regularnym. Potwierdzone maszynowo: po wycieciu komentarzy z wersji HEAD i z dysku obie sa identyczne we wszystkich 291 plikach, czyli poza komentarzami nie zmienilo sie nic. 233 pliki .py parsuja sie bez bledu, tsc ma te same 11 bledow w tych samych 3 plikach co przed zmiana. Dwie rzeczy wymagaly poprawki po automacie: wyrownane listy definicji, gdzie myslnik byl separatorem kolumny (37 miejsc, kolumna przywrocona), i trzy przeniesienia mysli do nowej linii, gdzie zostawal wiszacy przecinek na poczatku (poprawione recznie). Bundla nie republikuje: Hermes i tak nie niesie komentarzy, wiec dla uzytkownika to zero zmiany. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
"""Test /resolve endpoint for sample playback URLs across multiple tubes, sprawdza
|
|
czy stream_url jest niepuste (= direct video, nie embed)."""
|
|
from __future__ import annotations
|
|
import sys
|
|
|
|
import httpx
|
|
|
|
from app.db import session_scope
|
|
from app.models.playback_source import PlaybackSource
|
|
from sqlalchemy import select
|
|
|
|
|
|
def main() -> None:
|
|
base = "http://localhost:8000"
|
|
api_key = sys.argv[1] if len(sys.argv) > 1 else None
|
|
if not api_key:
|
|
print("usage: test_resolve_endpoint.py <api_key>")
|
|
sys.exit(1)
|
|
|
|
targets = [
|
|
("pornapp:porntrexcom", "porntrex"),
|
|
("pornapp:porn4dayspw", "porn4days"),
|
|
("pornapp:hqpornercom", "hqporner"),
|
|
]
|
|
|
|
with session_scope() as s:
|
|
for origin, label in targets:
|
|
row = s.execute(
|
|
select(PlaybackSource.id, PlaybackSource.scene_id, PlaybackSource.page_url)
|
|
.where(PlaybackSource.origin == origin)
|
|
.where(PlaybackSource.dead_at.is_(None))
|
|
.limit(1)
|
|
).first()
|
|
if row is None:
|
|
print(f"[{label}] NO PLAYBACK SOURCE")
|
|
continue
|
|
pb_id, scene_id, page_url = row
|
|
url = f"{base}/scenes/{scene_id}/playback/{pb_id}/resolve"
|
|
try:
|
|
r = httpx.post(url, headers={"X-API-Key": api_key}, timeout=60.0)
|
|
except Exception as e:
|
|
print(f"[{label}] ERROR: {e}")
|
|
continue
|
|
print(f"[{label}] status={r.status_code} page={page_url[:60]}")
|
|
if r.status_code == 200:
|
|
data = r.json()
|
|
best = data.get("best") or {}
|
|
print(f" best.stream_url: {(best.get('stream_url') or '')[:90]}")
|
|
print(f" best.embed_url: {(best.get('embed_url') or '')[:90]}")
|
|
print(f" best.type: {best.get('type')}")
|
|
print(f" best.quality: {best.get('quality')}")
|
|
links = data.get("links", [])
|
|
print(f" total links: {len(links)} ({sum(1 for l in links if l.get('stream_url'))} direct)")
|
|
else:
|
|
print(f" body: {r.text[:200]}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|