"Task 4.7: Update template helpers to use key identifier

- Add series context helpers: prepare_series_context, get_series_by_key, filter_series_by_missing_episodes
- Update module docstring with identifier convention documentation
- Add unit tests for new series context helper functions
- Update infrastructure.md with template helpers documentation
- Mark Phase 4 (API Layer) as complete"
This commit is contained in:
Lukas 2025-11-28 16:01:18 +01:00
parent 5934c7666c
commit 5aabad4d13
4 changed files with 343 additions and 21 deletions

View File

@ -17,7 +17,7 @@
"keep_days": 30 "keep_days": 30
}, },
"other": { "other": {
"master_password_hash": "$pbkdf2-sha256$29000$AQAAAKAUImRsTSlFCGFMaQ$farZvo8fZCY9ZX7UiGFXTMtdduNvfSSVP8iDNwSWqfo", "master_password_hash": "$pbkdf2-sha256$29000$MwYgpBTCmPM.JwQgRGhtDQ$GbltEa61jWLom23mXGi7psyZ4haHuXM6MRB5wl4CCU4",
"anime_directory": "/mnt/server/serien/Serien/" "anime_directory": "/mnt/server/serien/Serien/"
}, },
"version": "1.0.0" "version": "1.0.0"

View File

@ -1,6 +1,327 @@
{ {
"pending": [], "pending": [
{
"id": "4900cd26-5702-44fc-b575-5111193a274f",
"serie_id": "test-series-2",
"serie_folder": "Another Series (2024)",
"serie_name": "Another Series",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "HIGH",
"added_at": "2025-11-28T14:58:37.173276Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "991f6985-1896-420c-8e28-675044bf9da3",
"serie_id": "series-high",
"serie_folder": "Series High (2024)",
"serie_name": "Series High",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "HIGH",
"added_at": "2025-11-28T14:58:37.214713Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "1d2c34fe-9f91-4614-a733-fd4e5ffbc451",
"serie_id": "series-normal",
"serie_folder": "Series Normal (2024)",
"serie_name": "Series Normal",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.216943Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "2eeb36cd-50ba-4e49-92c1-8f9385d9d0f9",
"serie_id": "series-low",
"serie_folder": "Series Low (2024)",
"serie_name": "Series Low",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "LOW",
"added_at": "2025-11-28T14:58:37.218979Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "c42241f8-6ffb-4ee4-bcfa-f4e388cdd8cf",
"serie_id": "test-series",
"serie_folder": "Test Series (2024)",
"serie_name": "Test Series",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.399213Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "728a5592-0b82-4ce5-a34f-7a9c390053dc",
"serie_id": "test-series",
"serie_folder": "Test Series (2024)",
"serie_name": "Test Series",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.467671Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "d64df138-b5b2-447a-a310-fde41a4607c8",
"serie_id": "invalid-series",
"serie_folder": "Invalid Series (2024)",
"serie_name": "Invalid Series",
"episode": {
"season": 99,
"episode": 99,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.540908Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "c87bb473-6b35-4f81-a0a8-7eec1e23756a",
"serie_id": "test-series",
"serie_folder": "Test Series (2024)",
"serie_name": "Test Series",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.578395Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "babab810-6c34-4a87-aec5-f8848645f57f",
"serie_id": "series-4",
"serie_folder": "Series 4 (2024)",
"serie_name": "Series 4",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.674390Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "4da2b237-ab58-4312-a322-09d28f3ba0ec",
"serie_id": "series-2",
"serie_folder": "Series 2 (2024)",
"serie_name": "Series 2",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.675597Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "d2ad485b-6f44-4738-8cba-ef9be5ef6853",
"serie_id": "series-0",
"serie_folder": "Series 0 (2024)",
"serie_name": "Series 0",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.677593Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "d44e3def-5e49-47c9-accb-c662712f3b5d",
"serie_id": "series-1",
"serie_folder": "Series 1 (2024)",
"serie_name": "Series 1",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.678299Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "d8ddb373-d20e-456e-a836-31991a9e3e90",
"serie_id": "series-3",
"serie_folder": "Series 3 (2024)",
"serie_name": "Series 3",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.678964Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "7cdbc2b6-0d5c-48fc-8a02-0b6b4d4275dd",
"serie_id": "persistent-series",
"serie_folder": "Persistent Series (2024)",
"serie_name": "Persistent Series",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.765201Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "1b5f11b3-26d3-43ea-9615-8f951dc09bac",
"serie_id": "ws-series",
"serie_folder": "WebSocket Series (2024)",
"serie_name": "WebSocket Series",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "NORMAL",
"added_at": "2025-11-28T14:58:37.835647Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
},
{
"id": "72a71e8e-3a06-4d81-896e-d5c11956cb12",
"serie_id": "workflow-series",
"serie_folder": "Workflow Test Series (2024)",
"serie_name": "Workflow Test Series",
"episode": {
"season": 1,
"episode": 1,
"title": null
},
"status": "pending",
"priority": "HIGH",
"added_at": "2025-11-28T14:58:37.870997Z",
"started_at": null,
"completed_at": null,
"progress": null,
"error": null,
"retry_count": 0,
"source_url": null
}
],
"active": [], "active": [],
"failed": [], "failed": [],
"timestamp": "2025-11-27T17:59:24.301867+00:00" "timestamp": "2025-11-28T14:58:37.880117+00:00"
} }

View File

@ -189,21 +189,21 @@ Provides utilities for template rendering and series data preparation.
### Core Functions ### Core Functions
| Function | Purpose | | Function | Purpose |
| ------------------------- | ------------------------------------ | | -------------------------- | --------------------------------- |
| `get_base_context` | Base context for all templates | | `get_base_context` | Base context for all templates |
| `render_template` | Render template with context | | `render_template` | Render template with context |
| `validate_template_exists`| Check if template file exists | | `validate_template_exists` | Check if template file exists |
| `list_available_templates`| List all available template files | | `list_available_templates` | List all available template files |
### Series Context Helpers ### Series Context Helpers
All series helpers use `key` as the primary identifier: All series helpers use `key` as the primary identifier:
| Function | Purpose | | Function | Purpose |
| --------------------------------- | ---------------------------------------------- | | ----------------------------------- | ---------------------------------------------- |
| `prepare_series_context` | Prepare series data for templates (uses `key`) | | `prepare_series_context` | Prepare series data for templates (uses `key`) |
| `get_series_by_key` | Find series by `key` (not `folder`) | | `get_series_by_key` | Find series by `key` (not `folder`) |
| `filter_series_by_missing_episodes`| Filter series with missing episodes | | `filter_series_by_missing_episodes` | Filter series with missing episodes |
**Example Usage:** **Example Usage:**

View File

@ -161,6 +161,7 @@ For each task completed:
### Phase 4: API Layer ✅ (Completed November 28, 2025) ### Phase 4: API Layer ✅ (Completed November 28, 2025)
All API layer tasks completed: All API layer tasks completed:
- Task 4.1: Update Anime API Endpoints ✅ - Task 4.1: Update Anime API Endpoints ✅
- Task 4.2: Update Download API Endpoints ✅ - Task 4.2: Update Download API Endpoints ✅
- Task 4.3: Update Queue API Endpoints ✅ - Task 4.3: Update Queue API Endpoints ✅