action.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from sqlalchemy import Column, JSON
  2. from typing import Optional
  3. from pydantic import Field as PDField
  4. from sqlmodel import Field
  5. from app.models.base_model import BaseModel, TimeStampMixin, PrimaryKeyMixin
  6. # This class utilizes code from the Open Source Project TaskingAI.
  7. # The original code can be found at: https://github.com/TaskingAI/TaskingAI
  8. class ActionBase(BaseModel):
  9. name: str = Field(nullable=False)
  10. description: Optional[str] = Field(nullable=False)
  11. openapi_schema: Optional[dict] = Field(default=None, sa_column=Column(JSON))
  12. authentication: Optional[dict] = Field(default=None, sa_column=Column(JSON))
  13. extra: Optional[dict] = Field(default=None, sa_column=Column(JSON))
  14. metadata_: Optional[dict] = Field(default=None, sa_column=Column("metadata", JSON), schema_extra={"validation_alias": "metadata"})
  15. operation_id: str = Field(nullable=False)
  16. url: str = Field(nullable=False)
  17. method: str = Field(nullable=False)
  18. path_param_schema: Optional[dict] = Field(default=None, sa_column=Column(JSON))
  19. query_param_schema: Optional[dict] = Field(default=None, sa_column=Column(JSON))
  20. body_param_schema: Optional[dict] = Field(default=None, sa_column=Column(JSON))
  21. body_type: str = Field(nullable=False)
  22. function_def: Optional[dict] = Field(default=None, sa_column=Column(JSON))
  23. use_for_everyone: bool = Field(default=False, nullable=False)
  24. object: str = Field(nullable=False, default="action")
  25. class Action(ActionBase, PrimaryKeyMixin, TimeStampMixin, table=True):
  26. pass
  27. class ActionRead(ActionBase, PrimaryKeyMixin, TimeStampMixin):
  28. metadata_: Optional[dict] = PDField(default=None, alias="metadata")