R12 S1 step B. The 2011-line routes/plex.py becomes an app/routes/plex/
package:
- admin.py — connection test, catalog sync, owner watch-link config (5)
- browse.py — libraries, facets, collections, playlists, show/item, people (23)
- playback.py — image/subtitle proxies, HLS streaming, watch-state writes (10)
- _shared.py — the two genuinely cross-module helpers (_item_or_404, log)
- __init__.py — assembles `router` from the three sub-routers; the app wiring
(plex_routes.router in main.py) is unchanged.
Mechanically generated and proven behaviour-equivalent: every function/class
source relocated verbatim (get_source_segment equality) and the (method, path)
route set is identical to before. Endpoints keep the /api/plex prefix on each
sub-router. No SQL change (db.query untouched; 2.0 select() is the next step).
Gate: ruff clean, pytest 193 passed (pure-logic + DB lane).
17 lines
485 B
Python
17 lines
485 B
Python
"""Shared helpers, serializers and constants for the plex route package."""
|
|
|
|
import logging
|
|
from fastapi import HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from app.models import (
|
|
PlexItem,
|
|
)
|
|
|
|
log = logging.getLogger("siftlode.plex")
|
|
|
|
def _item_or_404(db: Session, rating_key: str) -> PlexItem:
|
|
it = db.query(PlexItem).filter_by(rating_key=str(rating_key)).first()
|
|
if it is None:
|
|
raise HTTPException(status_code=404, detail="Unknown Plex item")
|
|
return it
|