| from pydantic import BaseModel, Field |
| from typing import Any, Optional, Dict |
| from enum import Enum |
| import uuid |
| import time |
|
|
|
|
| class JobStatus(str, Enum): |
| PENDING = "pending" |
| CLAIMED = "claimed" |
| COMPLETED = "completed" |
| FAILED = "failed" |
| TIMEOUT = "timeout" |
|
|
|
|
| class APIJob(BaseModel): |
| job_id: str = Field(default_factory=lambda: str(uuid.uuid4())) |
| created_at: float = Field(default_factory=time.time) |
| claimed_at: Optional[float] = None |
| completed_at: Optional[float] = None |
|
|
| |
| method: str |
| endpoint: str |
| headers: Dict[str, str] = {} |
| body: Optional[Any] = None |
| query_params: Dict[str, str] = {} |
|
|
| |
| target_mirror: Optional[str] = None |
|
|
| |
| status: JobStatus = JobStatus.PENDING |
| response_status_code: Optional[int] = None |
| response_headers: Dict[str, str] = {} |
| response_body: Optional[Any] = None |
| error: Optional[str] = None |
|
|
| |
| ttl: float = 30.0 |
|
|
|
|
| class ClaimRequest(BaseModel): |
| mirror_id: str |
| available_endpoints: list[str] |
|
|
|
|
| class CompleteRequest(BaseModel): |
| mirror_id: str |
| job_id: str |
| response_status_code: int |
| response_headers: Dict[str, str] = {} |
| response_body: Optional[Any] = None |
| error: Optional[str] = None |
|
|