fix(plex): address S1 review round-2 findings
- by_rating_key: generic-typed (type[_M] -> _M | None) so call sites keep their Model | None static type. - Migrate the last 2 open-coded PlexCollection-by-rating_key lookups (sync.py resync_collection + delete_collection_local) to by_rating_key; zero open-coded rating_key lookups now remain in the package. - Add test_playlist_bulk_add_and_remove covering the bulk add/remove endpoints and pinning the remove-bulk synchronize_session=False path. Full suite 258 passed, 2 skipped; ruff clean.
This commit is contained in:
@@ -19,6 +19,7 @@ from app import sysconfig
|
||||
from app.models import PlexCollection, PlexItem, PlexLibrary, PlexSeason, PlexShow
|
||||
from app.plex import people
|
||||
from app.plex.client import PlexClient, PlexError, PlexNotConfigured
|
||||
from app.plex.lookups import by_rating_key
|
||||
|
||||
log = logging.getLogger("siftlode.plex")
|
||||
|
||||
@@ -382,13 +383,7 @@ def resync_collection(db: Session, plex: PlexClient, lib: PlexLibrary, rk: str)
|
||||
collection's membership on the affected member rows."""
|
||||
meta = plex.metadata(rk) or {}
|
||||
col = _upsert_collection(
|
||||
db,
|
||||
db.execute(
|
||||
select(PlexCollection).where(PlexCollection.rating_key == rk)
|
||||
).scalars().first(),
|
||||
rk,
|
||||
lib.id,
|
||||
meta,
|
||||
db, by_rating_key(db, PlexCollection, rk), rk, lib.id, meta
|
||||
)
|
||||
Model = PlexItem if lib.kind == "movie" else PlexShow
|
||||
new_members = {str(c.get("ratingKey")) for c in plex.collection_children(rk) if c.get("ratingKey")}
|
||||
@@ -415,9 +410,7 @@ def delete_collection_local(db: Session, lib: PlexLibrary, rk: str) -> None:
|
||||
select(Model).where(Model.collection_keys.contains([rk]))
|
||||
).scalars():
|
||||
row.collection_keys = [k for k in (row.collection_keys or []) if k != rk] or None
|
||||
col = db.execute(
|
||||
select(PlexCollection).where(PlexCollection.rating_key == rk)
|
||||
).scalars().first()
|
||||
col = by_rating_key(db, PlexCollection, rk)
|
||||
if col is not None:
|
||||
db.delete(col)
|
||||
db.flush()
|
||||
|
||||
Reference in New Issue
Block a user