refactor(plex): the unit's tables move into plex/models

PlexLibrary, PlexShow, PlexSeason, PlexItem, PlexPerson, PlexCollection, PlexState, PlexLink,
PlexPlaylist and PlexPlaylistItem leave app/models.py for app/plex/models.py; app.tables registers
them. Every import is re-pointed; no schema change.
This commit is contained in:
2026-10-19 21:42:07 +02:00
parent 4b6db47083
commit 533571f572
66 changed files with 566 additions and 574 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ from app.downloads import errors as dlerrors
from app.downloads import formats, pipeline, quota, runner, service
from app.downloads import probe as probemod
from app.downloads.edit import INPUT_GUARD
from app.models import PlexItem, PlexLibrary, PlexShow
from app.plex.models import PlexItem, PlexLibrary, PlexShow
from app.catalog.models import Channel, Video
from app.downloads.models import DownloadJob, MediaAsset
from app.plex import paths as plex_paths
+2 -1
View File
@@ -9,7 +9,8 @@ from app.auth import current_user
from app.collation import sorted_words
from app.db import get_db
from app.main import app
from app.models import PlexCollection, PlexItem, PlexLibrary, User
from app.models import User
from app.plex.models import PlexCollection, PlexItem, PlexLibrary
from app.catalog.models import Channel, Subscription, Video
from app.reader.models import Playlist, PlaylistItem
from datetime import datetime, timezone
+2 -1
View File
@@ -17,7 +17,8 @@ from app.discover import hero, pins, queries, rails
from app.discover.budget import BANDS, fits, remaining_seconds
from app.plex import rollup
from app.plex.cards import leaf_card
from app.models import PlexItem, PlexLibrary, PlexShow, PlexState, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexShow, PlexState
from app.catalog.models import BlockedChannel, Channel, Subscription, Video
from app.reader.models import ComfortPin, Playlist, PlaylistItem, VideoState
+1 -1
View File
@@ -12,7 +12,7 @@ contradicts the remote's own count is not believed either.
import pytest
from sqlalchemy import select
from app.models import PlexCollection, PlexItem, PlexLibrary
from app.plex.models import PlexCollection, PlexItem, PlexLibrary
from app.catalog.models import Channel, Video
from app.reader.models import Playlist, PlaylistItem
from app.plex import sync as plex_sync
+2 -1
View File
@@ -28,7 +28,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary
from app.plex import paths as plex_paths
from app.plex import stream
+1 -1
View File
@@ -19,7 +19,7 @@ from datetime import datetime, timezone
import pytest
from sqlalchemy import event
from app.models import PlexItem, PlexLibrary, PlexPlaylist, PlexPlaylistItem
from app.plex.models import PlexItem, PlexLibrary, PlexPlaylist, PlexPlaylistItem
from app.catalog.models import Channel, Video
from app.reader.models import Playlist, PlaylistItem
+1 -1
View File
@@ -9,7 +9,7 @@ from sqlalchemy import select
import app.routes.plex.admin as admin_routes
from app import sysconfig
from app.models import PlexLink
from app.plex.models import PlexLink
from app.plex.client import PlexError, PlexNotConfigured
+1 -1
View File
@@ -5,7 +5,7 @@ and the crossfading hero), but ONLY when the item actually has an `art_key` —
resolve to a blank image on every card that tried to use it, so it must be null and let the client fall
back to the poster."""
from app.models import PlexItem, PlexShow
from app.plex.models import PlexItem, PlexShow
from app.plex.cards import movie_card, show_card
+2 -1
View File
@@ -22,7 +22,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, PlexState, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexState
from app.plex import watch_sync as plex_watch
+2 -1
View File
@@ -17,7 +17,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexCollection, PlexItem, PlexLibrary, PlexShow, PlexState, User
from app.models import User
from app.plex.models import PlexCollection, PlexItem, PlexLibrary, PlexShow, PlexState
from app.plex.query import PLEX_SORT_KEYS
from app.routes.plex.browse import sort_column
from app.routes.plex.collections import (
@@ -13,7 +13,8 @@ import app.state as state
from app.auth import admin_user, current_user
from app.db import get_db
from app.main import app
from app.models import PlexCollection, PlexItem, PlexLibrary, PlexShow, User
from app.models import User
from app.plex.models import PlexCollection, PlexItem, PlexLibrary, PlexShow
from app.plex.client import PlexError
from app.plex.lookups import by_rating_key
from app.routes.plex import collections as coll_routes
@@ -9,7 +9,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexCollection, PlexItem, PlexLibrary, PlexShow, User
from app.models import User
from app.plex.models import PlexCollection, PlexItem, PlexLibrary, PlexShow
def _seed(db):
+2 -1
View File
@@ -19,7 +19,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, PlexSeason, PlexShow, PlexState, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexSeason, PlexShow, PlexState
from app.plex import detail
from app.plex.sync import _apply_facet_fields, _enrich_people_batch
+2 -1
View File
@@ -13,7 +13,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, PlexShow, PlexState, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexShow, PlexState
NOW = datetime(2024, 6, 1, tzinfo=timezone.utc)
+2 -1
View File
@@ -13,7 +13,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, PlexShow, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexShow
def test_facets_returns_studio_vocabulary(db, monkeypatch, override_dep):
@@ -15,14 +15,8 @@ the merge is provably behaviour-equivalent (and a drift between grid and facets
from collections import Counter
from datetime import datetime, timezone
from app.models import (
PlexItem,
PlexLibrary,
PlexSeason,
PlexShow,
PlexState,
User,
)
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexSeason, PlexShow, PlexState
SCOPES = ("movie", "show", "both")
SHOW_STATES = ("all", "watched", "in_progress", "unwatched")
@@ -14,13 +14,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import (
PlexItem,
PlexLibrary,
PlexSeason,
PlexShow,
User,
)
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexSeason, PlexShow
from fastapi.testclient import TestClient
+1 -1
View File
@@ -13,7 +13,7 @@ from datetime import datetime, timedelta, timezone
from sqlalchemy import select
from app.db import SessionLocal
from app.models import PlexItem, PlexLibrary, PlexState
from app.plex.models import PlexItem, PlexLibrary, PlexState
from app.routes.plex import playback
+1 -1
View File
@@ -9,7 +9,7 @@ from fastapi.testclient import TestClient
import app.state as app_state
from app.main import app
from app.models import PlexItem, PlexLibrary
from app.plex.models import PlexItem, PlexLibrary
from app.plex import imgcache
from app.routes.plex import playback
+1 -1
View File
@@ -7,7 +7,7 @@ Uses the DB lane (`db` fixture) — skipped when no Postgres is reachable.
from sqlalchemy import text
from app.models import PlexLibrary, PlexShow
from app.plex.models import PlexLibrary, PlexShow
# Mirror of migration 0060's statements (plex_items runs against an empty table here — proving the
# SQL is valid for both tables; the assertions below check the seeded plex_shows rows).
+2 -1
View File
@@ -9,7 +9,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary
def _seed(db):
+2 -2
View File
@@ -14,7 +14,8 @@ from app.db import get_db
from app.main import app
from app import sysconfig
from app.plex.cards import display_summary, display_title
from app.models import (
from app.models import User
from app.plex.models import (
PlexCollection,
PlexItem,
PlexLibrary,
@@ -23,7 +24,6 @@ from app.models import (
PlexSeason,
PlexShow,
PlexState,
User,
)
+2 -1
View File
@@ -12,7 +12,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, PlexShow, PlexState, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexShow, PlexState
NOW = datetime(2024, 6, 1, tzinfo=timezone.utc)
+1 -1
View File
@@ -14,7 +14,7 @@ from sqlalchemy.orm import Session
import app.plex.sync as syncmod
from app import sysconfig
from app.db import engine
from app.models import PlexItem, PlexLibrary, PlexShow
from app.plex.models import PlexItem, PlexLibrary, PlexShow
from app.plex.genres import hu_genre, hu_genres
from app.plex.overlay import sync_overlay
from app.plex.sync import _apply_item, _canonical_guid
+2 -1
View File
@@ -9,7 +9,8 @@ from datetime import datetime, timezone
import httpx
import pytest
from app.models import PlexItem, PlexLibrary, PlexPerson, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexPerson
from app.plex import imgcache
from app.plex import people as plex_people
from app.plex import tmdb as plex_tmdb
+2 -8
View File
@@ -12,14 +12,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import (
PlexItem,
PlexLibrary,
PlexPerson,
PlexShow,
PlexState,
User,
)
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexPerson, PlexShow, PlexState
from app.plex.query import content_libs
NAME = "Robert De Niro"
+2 -1
View File
@@ -10,7 +10,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, PlexPerson, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexPerson
from app.plex import tmdb as plex_tmdb
PAYLOAD = {
+1 -1
View File
@@ -12,7 +12,7 @@ from sqlalchemy import select
from sqlalchemy.orm import Session
from app.db import engine
from app.models import PlexCollection, PlexItem, PlexLibrary, PlexShow
from app.plex.models import PlexCollection, PlexItem, PlexLibrary, PlexShow
from app.plex.detail import rich_detail
from app.plex.overlay import sync_overlay
from app.plex.plaintext import plain_text
+2 -1
View File
@@ -14,7 +14,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary
from app.plex import sync
from fastapi.testclient import TestClient
+2 -1
View File
@@ -19,7 +19,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary
from app.plex import paths as plex_paths
from app.plex import stream as plex_stream
@@ -6,7 +6,7 @@ rows, since positions have gaps after a removal. One request: an append plus a s
leaves the rows at the end whenever that call fails, and would overwrite another tab's changes.
"""
from app.models import PlexItem, PlexLibrary, PlexPlaylist, PlexPlaylistItem
from app.plex.models import PlexItem, PlexLibrary, PlexPlaylist, PlexPlaylistItem
def _seed(db, user, rks, *, positions=None, extra=("x", "y")):
+3 -2
View File
@@ -16,7 +16,8 @@ import app.state as state
from app.auth import current_user
from app.db import get_db
from app.main import app
from app.models import PlexItem, PlexLibrary, PlexSeason, PlexShow, PlexState, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexSeason, PlexShow, PlexState
from app.plex import rollup, sync
from app.plex.cards import ShowState
@@ -490,7 +491,7 @@ class TestPlaylistAndCollectionEndpoints:
] # input order preserved, m2 gone
def test_collections_list(self, db, monkeypatch, override_dep):
from app.models import PlexCollection
from app.plex.models import PlexCollection
lib = PlexLibrary(plex_key="1", title="Movies", kind="movie", enabled=True)
db.add(lib)
+1 -1
View File
@@ -1088,7 +1088,7 @@ def test_a_nul_in_the_rating_key_is_not_a_500(client, monkeypatch):
def test_a_nul_rating_key_names_no_row():
"""Postgres refuses NUL in text, so looking it up was a DataError (a 500) on every Plex route."""
from app.models import PlexItem
from app.plex.models import PlexItem
from app.plex.lookups import by_rating_key
assert by_rating_key(None, PlexItem, "12\x0034") is None # type: ignore[arg-type]
+2 -8
View File
@@ -8,14 +8,8 @@ with a stub Plex (the same seam the overlay test uses), so no live server is nee
from sqlalchemy import select
from app.models import (
PlexItem,
PlexLibrary,
PlexSeason,
PlexShow,
PlexState,
User,
)
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexSeason, PlexShow, PlexState
from app.plex.sync import (
_TYPE_EPISODE,
_TYPE_MOVIE,
+1 -1
View File
@@ -7,7 +7,7 @@ from sqlalchemy import select
from app.plex import people, sync
from app.plex.client import PlexError
from app.models import PlexItem, PlexLibrary, PlexPerson
from app.plex.models import PlexItem, PlexLibrary, PlexPerson
class _FakePlex:
+1 -1
View File
@@ -9,7 +9,7 @@ from datetime import datetime, timezone
import httpx
import pytest
from app.models import PlexItem, PlexLibrary, PlexPerson, PlexShow
from app.plex.models import PlexItem, PlexLibrary, PlexPerson, PlexShow
from app.plex import tmdb
# A TMDB /movie/{id}?append_to_response=keywords,credits,recommendations,images,external_ids payload.
+2 -1
View File
@@ -7,7 +7,8 @@ import pytest
from sqlalchemy import select
from app import sysconfig
from app.models import PlexItem, PlexLibrary, PlexLink, PlexState, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexLink, PlexState
from app.plex import watch_sync
+2 -1
View File
@@ -13,7 +13,8 @@ from types import SimpleNamespace
from sqlalchemy import select
from app.models import PlexItem, PlexLibrary, PlexState, User
from app.models import User
from app.plex.models import PlexItem, PlexLibrary, PlexState
from app.plex.watch_sync import _pull_apply, _reconcile_inprogress_movies
from app.routes.plex.playback import (
_PUSH_THROTTLE_S,