endpoint.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from datetime import datetime
  2. from typing import Optional
  3. from pydantic import BaseModel, Field, model_validator
  4. from configs import dify_config
  5. from core.entities.provider_entities import ProviderConfig
  6. from core.plugin.entities.base import BasePluginEntity
  7. class EndpointDeclaration(BaseModel):
  8. """
  9. declaration of an endpoint
  10. """
  11. path: str
  12. method: str
  13. hidden: bool = Field(default=False)
  14. class EndpointProviderDeclaration(BaseModel):
  15. """
  16. declaration of an endpoint group
  17. """
  18. settings: list[ProviderConfig] = Field(default_factory=list)
  19. endpoints: Optional[list[EndpointDeclaration]] = Field(default_factory=list)
  20. class EndpointEntity(BasePluginEntity):
  21. """
  22. entity of an endpoint
  23. """
  24. settings: dict
  25. tenant_id: str
  26. plugin_id: str
  27. expired_at: datetime
  28. declaration: EndpointProviderDeclaration = Field(default_factory=EndpointProviderDeclaration)
  29. class EndpointEntityWithInstance(EndpointEntity):
  30. name: str
  31. enabled: bool
  32. url: str
  33. hook_id: str
  34. @model_validator(mode="before")
  35. @classmethod
  36. def render_url_template(cls, values):
  37. if "url" not in values:
  38. url_template = dify_config.ENDPOINT_URL_TEMPLATE
  39. values["url"] = url_template.replace("{hook_id}", values["hook_id"])
  40. return values