fix(plex): E30 review round 3 — a dead headshot breaks the Plex-failing streak, 410 held by a test
This commit is contained in:
@@ -117,13 +117,15 @@ def test_the_batch_stores_the_hungarian_biography(db):
|
||||
|
||||
class _Plex:
|
||||
"""A PlexClient stand-in. `down`: urls Plex does not answer for (True: none); `dead`: urls Plex
|
||||
answers "not found" for (a dead CDN file); `status`: an error status Plex answers every url with."""
|
||||
answers `gone` for (a dead CDN file: "not found"); `status`: an error status Plex answers every
|
||||
other url with."""
|
||||
|
||||
def __init__(self, down=False, dead=(), status=None):
|
||||
def __init__(self, down=False, dead=(), status=None, gone=404):
|
||||
self.asked: list[tuple[str, int | None]] = []
|
||||
self.down = down
|
||||
self.dead = set(dead)
|
||||
self.status = status
|
||||
self.gone = gone
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
@@ -135,7 +137,7 @@ class _Plex:
|
||||
self.asked.append((url, width))
|
||||
if self.down is True or (self.down and url in self.down):
|
||||
raise plex_people.PlexError("down") from httpx.ConnectError("refused")
|
||||
code = 404 if url in self.dead else self.status
|
||||
code = self.gone if url in self.dead else self.status
|
||||
if code:
|
||||
req = httpx.Request("GET", url)
|
||||
status = httpx.HTTPStatusError(
|
||||
@@ -236,13 +238,23 @@ def test_plex_failing_between_successes_does_not_end_the_run(db, cache_dir, plex
|
||||
assert plex_people.warm_portraits(db, 100) == {"cached": 4, "failed": 4}
|
||||
|
||||
|
||||
def test_dead_headshots_are_left_alone_and_the_rest_still_land(db, cache_dir, plex_on):
|
||||
def test_plex_failing_between_dead_files_does_not_end_the_run(db, cache_dir, plex_on):
|
||||
_faces(db, 8)
|
||||
plex_on["plex"] = _Plex( # down, dead, down, dead, …: Plex answers in between
|
||||
down={CDN + f"{i}.jpg" for i in (0, 2, 4, 6)}, dead={CDN + f"{i}.jpg" for i in (1, 3, 5, 7)}
|
||||
)
|
||||
assert plex_people.warm_portraits(db, 100) == {"cached": 0, "failed": 8}
|
||||
assert len(plex_on["plex"].asked) == 8
|
||||
|
||||
|
||||
@pytest.mark.parametrize("gone", [404, 410])
|
||||
def test_dead_headshots_are_left_alone_and_the_rest_still_land(db, cache_dir, plex_on, gone):
|
||||
_faces(db, 8)
|
||||
dead = {CDN + f"{i}.jpg" for i in range(6)} # more dead files than any failure limit
|
||||
plex_on["plex"] = _Plex(dead=dead)
|
||||
plex_on["plex"] = _Plex(dead=dead, gone=gone)
|
||||
assert plex_people.warm_portraits(db, 100) == {"cached": 2, "failed": 6}
|
||||
|
||||
plex_on["plex"] = again = _Plex(dead=dead)
|
||||
plex_on["plex"] = again = _Plex(dead=dead, gone=gone)
|
||||
assert plex_people.warm_portraits(db, 100) == {"cached": 0}
|
||||
assert again.asked == [] # dead ones marked, live ones cached: nothing to ask for
|
||||
|
||||
|
||||
Reference in New Issue
Block a user