52 lines
1.9 KiB
Markdown
52 lines
1.9 KiB
Markdown
# Task: Pipeline task definitions
|
|||
|
|
|
||
|
|
## Goal
|
||
|
|
Create the task definition classes and registry for the pipeline orchestrator. This is Phase 1 — define what tasks exist and their metadata.
|
||
|
|
|
||
|
|
## Requirements
|
||
|
|
|
||
|
|
### Create `src/backend/services/pipeline_tasks.py`
|
||
|
|
|
||
|
|
Implement:
|
||
|
|
|
||
|
|
1. `PipelineTask` dataclass:
|
||
|
|
- `name: str` — unique task identifier
|
||
|
|
- `description: str` — human-readable name
|
||
|
|
- `func: Callable` — async function to execute
|
||
|
|
- `depends_on: list[str]` — task names that must complete first
|
||
|
|
- `timeout: int` — max execution time in seconds
|
||
|
|
- `retry_count: int` — number of retries on failure
|
||
|
|
|
||
|
|
2. `TaskRegistry` class:
|
||
|
|
- `register(task: PipelineTask)` — add task to registry
|
||
|
|
- `get(task_name: str) -> PipelineTask` — lookup task
|
||
|
|
- `get_all() -> list[PipelineTask]` — list all registered tasks
|
||
|
|
- `get_dependencies(task_name: str) -> list[str]` — get task dependencies
|
||
|
|
- `get_ready_tasks( completed: set[str]) -> list[str]` — find tasks whose deps are met
|
||
|
|
|
||
|
|
3. Register built-in tasks:
|
||
|
|
- `news_ingestion` — runs news data ingestion
|
||
|
|
- `financials_ingestion` — runs financials data ingestion
|
||
|
|
- `sector_rotation` — runs sector rotation analysis
|
||
|
|
- `price_update` — runs price data update
|
||
|
|
- `sentiment_analysis` — runs sentiment analysis
|
||
|
|
|
||
|
|
### Constraints
|
||
|
|
- File under 200 lines
|
||
|
|
- Use existing async patterns
|
||
|
|
- No real DB calls in task definitions
|
||
|
|
|
||
|
|
## Acceptance Criteria
|
||
|
|
1. `TaskRegistry` correctly tracks tasks and dependencies
|
||
|
|
2. `get_ready_tasks()` returns correct task order
|
||
|
|
3. All 5 built-in tasks are registered
|
||
|
|
4. File is under 200 lines
|
||
|
|
|
||
|
|
## Files to Create
|
||
|
|
- `src/backend/services/pipeline_tasks.py`
|
||
|
|
|
||
|
|
## Files to Read First
|
||
|
|
- `src/backend/services/news_ingestion_service.py` — existing task functions
|
||
|
|
- `src/backend/services/financials_ingestion_service.py` — existing task functions
|
||
|
|
- `src/backend/services/rotation_service.py` — existing task functions
|