Rajan Sharma commited on
Commit
21827d6
·
verified ·
1 Parent(s): 3a2fa09

Create schemas.py

Browse files
Files changed (1) hide show
  1. schemas.py +39 -0
schemas.py ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pydantic import BaseModel, Field, ConfigDict
2
+ from typing import List, Optional, Literal, Dict
3
+
4
+ FormatType = Literal["table", "list", "comparison", "map", "narrative", "chart"]
5
+ SortDir = Literal["asc", "desc"]
6
+ JoinHow = Literal["left", "inner", "right", "outer"]
7
+ ChartType = Literal["bar", "line", "area", "point", "tick", "rule"]
8
+
9
+ class JoinSpec(BaseModel):
10
+ right_key: str
11
+ left_on: str
12
+ right_on: str
13
+ how: JoinHow = "left"
14
+
15
+ class TaskSpec(BaseModel):
16
+ title: str
17
+ data_key: Optional[str] = None
18
+ format: FormatType = "table"
19
+ filter: Optional[str] = None
20
+ derive: Optional[List[str]] = None
21
+ group_by: Optional[List[str]] = None
22
+ agg: Optional[List[str]] = None
23
+ pivot: Optional[Dict[str, str]] = None
24
+ join: Optional[List[JoinSpec]] = None
25
+ sort_by: Optional[str] = None
26
+ sort_dir: SortDir = "desc"
27
+ top: Optional[int] = None
28
+ fields: Optional[List[str]] = None
29
+ chart: Optional[ChartType] = None
30
+ x: Optional[str] = None
31
+ y: Optional[str] = None
32
+ color: Optional[str] = None
33
+ column: Optional[str] = None
34
+
35
+ class ScenarioPlan(BaseModel):
36
+ model_config = ConfigDict(extra="forbid")
37
+ tasks: List[TaskSpec] = Field(default_factory=list)
38
+ narrative_required: bool = True
39
+ notes: Optional[str] = None