schema.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from typing import Any, Dict, List, Optional
  2. from pydantic import BaseModel, Field
  3. class CardFilter(BaseModel):
  4. """Metadata describing a filter bound to a BI card."""
  5. card_id: str
  6. filter_id: str
  7. type: str
  8. where_clause: str
  9. default_value: Optional[str] = None
  10. options: List[str] = Field(default_factory=list)
  11. class CardInfo(BaseModel):
  12. card_id: str
  13. card_name: str
  14. card_desc: Optional[str] = None
  15. dataset_id: str
  16. sql_select: str
  17. sql_where: Optional[Dict[str, Any]] = None
  18. sql_groupby: Optional[str] = None
  19. filters: List[CardFilter] = Field(default_factory=list)
  20. class DashboardInfo(BaseModel):
  21. dashboard_id: str
  22. dashboard_name: str
  23. dashboard_desc: Optional[str] = None
  24. folder_path: Optional[str] = None
  25. cards: List[CardInfo] = Field(default_factory=list)
  26. class QARequest(BaseModel):
  27. request_id: str
  28. dashboard_id: str
  29. card_ids: List[str]
  30. bbk_id: str
  31. user_token: Optional[str] = None
  32. user_request: Optional[str] = None
  33. class QAPair(BaseModel):
  34. dashboard_id: str
  35. dashboard_name: str
  36. dashboard_desc: Optional[str]
  37. card_id: str
  38. card_name: str
  39. card_desc: Optional[str]
  40. dataset_id: str
  41. question: str
  42. answer: str = ""
  43. question_with_slot: str = ""
  44. filter_ids: List[str] = Field(default_factory=list)
  45. filters: List[str] = Field(default_factory=list)
  46. defs: List[str] = Field(default_factory=list)
  47. class QAResponseBody(BaseModel):
  48. dashboard_id: str
  49. bbk_id: str
  50. card_ids: List[str]
  51. qa_pairs: List[QAPair]
  52. class QAResponse(BaseModel):
  53. returnCode: str = "SUCCESS"
  54. body: QAResponseBody