Coverage for src/lexigram/admin/services/export/scheduler.py: 0%
59 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-24 23:18 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-24 23:18 +0800
1"""Export job models and scheduling types for Lexigram Admin."""
3from __future__ import annotations
5from dataclasses import dataclass, field
6from datetime import UTC, datetime
7from enum import StrEnum
8from typing import Any
11class ExportFormat(StrEnum):
12 """Supported export formats."""
14 CSV = "csv"
15 EXCEL = "xlsx"
16 JSON = "json"
17 PDF = "pdf"
20class ExportStatus(StrEnum):
21 """Export job status."""
23 PENDING = "pending"
24 PROCESSING = "processing"
25 COMPLETED = "completed"
26 FAILED = "failed"
27 CANCELLED = "cancelled"
30class ExportSchedule(StrEnum):
31 """Export scheduling options."""
33 IMMEDIATE = "immediate"
34 HOURLY = "hourly"
35 DAILY = "daily"
36 WEEKLY = "weekly"
37 MONTHLY = "monthly"
40@dataclass
41class ExportTemplate:
42 """Export template configuration."""
44 name: str
45 format: ExportFormat
46 columns: list[Any] # ExportColumn - defined elsewhere
47 description: str | None = None
48 filters: dict[str, Any] = field(default_factory=dict)
49 sort_by: str | None = None
50 sort_order: str = "asc"
51 include_charts: bool = False
52 chart_configs: list[dict[str, Any]] = field(default_factory=list)
53 styling: dict[str, Any] = field(default_factory=dict)
56@dataclass
57class ExportJob:
58 """Export job configuration and status."""
60 job_id: str
61 resource_name: str
62 format: ExportFormat
63 filters: dict[str, Any] = field(default_factory=dict)
64 columns: list[str] = field(default_factory=list)
65 template_name: str | None = None
66 status: ExportStatus = ExportStatus.PENDING
67 progress: float = 0.0
68 total_records: int = 0
69 processed_records: int = 0
70 file_path: str | None = None
71 file_size: int = 0
72 download_url: str | None = None
73 error_message: str | None = None
74 created_at: datetime = field(default_factory=lambda: datetime.now(UTC))
75 started_at: datetime | None = None
76 completed_at: datetime | None = None
77 user_id: Any | None = None
78 scheduled_for: datetime | None = None
79 schedule_type: ExportSchedule = ExportSchedule.IMMEDIATE
80 email_recipients: list[str] = field(default_factory=list)
81 metadata: dict[str, Any] = field(default_factory=dict)
84__all__ = [
85 "ExportFormat",
86 "ExportJob",
87 "ExportSchedule",
88 "ExportStatus",
89 "ExportTemplate",
90]