feat: add historical backfill with --init CLI and episode numbering
Adds a --init mode that seeds the database with past shows from a given anchor episode/date forward, batch-fetching likes from SoundCloud and partitioning them into weekly buckets. Episode numbers are tracked in the shows table and auto-incremented by the poller for new shows. Includes full API documentation (docs/api.md) and updated README. Made-with: Cursor
This commit is contained in:
@@ -226,6 +226,52 @@ def test_add_track_to_show_at_position(db):
|
||||
assert tracks[2]["track_id"] == 2
|
||||
|
||||
|
||||
def test_get_or_create_show_with_episode_number(db):
|
||||
week_start = datetime(2026, 1, 8, 3, 0, 0, tzinfo=timezone.utc)
|
||||
week_end = datetime(2026, 1, 15, 3, 0, 0, tzinfo=timezone.utc)
|
||||
show = db.get_or_create_show(week_start, week_end, episode_number=521)
|
||||
assert show.episode_number == 521
|
||||
show2 = db.get_or_create_show(week_start, week_end)
|
||||
assert show2.id == show.id
|
||||
assert show2.episode_number == 521
|
||||
|
||||
|
||||
def test_get_or_create_show_updates_episode_number(db):
|
||||
week_start = datetime(2026, 1, 8, 3, 0, 0, tzinfo=timezone.utc)
|
||||
week_end = datetime(2026, 1, 15, 3, 0, 0, tzinfo=timezone.utc)
|
||||
show = db.get_or_create_show(week_start, week_end)
|
||||
assert show.episode_number is None
|
||||
show2 = db.get_or_create_show(week_start, week_end, episode_number=521)
|
||||
assert show2.id == show.id
|
||||
assert show2.episode_number == 521
|
||||
|
||||
|
||||
def test_get_latest_episode_number(db):
|
||||
assert db.get_latest_episode_number() is None
|
||||
db.get_or_create_show(
|
||||
datetime(2026, 1, 8, 3, 0, 0, tzinfo=timezone.utc),
|
||||
datetime(2026, 1, 15, 3, 0, 0, tzinfo=timezone.utc),
|
||||
episode_number=521,
|
||||
)
|
||||
assert db.get_latest_episode_number() == 521
|
||||
db.get_or_create_show(
|
||||
datetime(2026, 1, 15, 3, 0, 0, tzinfo=timezone.utc),
|
||||
datetime(2026, 1, 22, 3, 0, 0, tzinfo=timezone.utc),
|
||||
episode_number=522,
|
||||
)
|
||||
assert db.get_latest_episode_number() == 522
|
||||
|
||||
|
||||
def test_update_show_episode_number(db):
|
||||
week_start = datetime(2026, 1, 8, 3, 0, 0, tzinfo=timezone.utc)
|
||||
week_end = datetime(2026, 1, 15, 3, 0, 0, tzinfo=timezone.utc)
|
||||
show = db.get_or_create_show(week_start, week_end)
|
||||
assert show.episode_number is None
|
||||
db.update_show_episode_number(show.id, 521)
|
||||
show2 = db.get_or_create_show(week_start, week_end)
|
||||
assert show2.episode_number == 521
|
||||
|
||||
|
||||
def test_has_track_in_show(db):
|
||||
week_start = datetime(2026, 3, 13, 2, 0, 0, tzinfo=timezone.utc)
|
||||
week_end = datetime(2026, 3, 20, 2, 0, 0, tzinfo=timezone.utc)
|
||||
|
||||
Reference in New Issue
Block a user