Spaces:
Sleeping
Sleeping
Rajan Sharma
commited on
Create schema.py
Browse files
schema.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import List, Optional, Dict
|
| 2 |
+
from pydantic import BaseModel, Field, validator
|
| 3 |
+
|
| 4 |
+
class TaskPlan(BaseModel):
|
| 5 |
+
title: str
|
| 6 |
+
format: str = Field(description="table|list|comparison|map|narrative|chart")
|
| 7 |
+
data_key: Optional[str] = None
|
| 8 |
+
filter: Optional[str] = None
|
| 9 |
+
derive: Optional[List[str]] = None
|
| 10 |
+
joins: Optional[List[Dict]] = None # [{"right_key":"...", "left_on":"...", "right_on":"...", "how":"left"}]
|
| 11 |
+
group_by: Optional[List[str]] = None
|
| 12 |
+
agg: Optional[List[str]] = None # ["avg(x)", "median(y)", "p90(z)", "count(*)"]
|
| 13 |
+
pivot: Optional[Dict] = None # {"index":["a","b"], "columns":"c", "values":"v"}
|
| 14 |
+
sort_by: Optional[str] = None
|
| 15 |
+
sort_dir: Optional[str] = "desc"
|
| 16 |
+
top: Optional[int] = None
|
| 17 |
+
fields: Optional[List[str]] = None
|
| 18 |
+
chart: Optional[str] = None
|
| 19 |
+
encodings: Optional[Dict[str, str]] = None
|
| 20 |
+
number_format: Optional[Dict[str, str]] = None
|
| 21 |
+
title_override: Optional[str] = None
|
| 22 |
+
|
| 23 |
+
@validator("format")
|
| 24 |
+
def _fmt(cls, v):
|
| 25 |
+
allowed = {"table","list","comparison","map","narrative","chart"}
|
| 26 |
+
if v not in allowed: raise ValueError(f"format must be one of {allowed}")
|
| 27 |
+
return v
|
| 28 |
+
|
| 29 |
+
class ScenarioPlan(BaseModel):
|
| 30 |
+
tasks: List[TaskPlan]
|
| 31 |
+
notes: Optional[str] = None
|