Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

plugin_manager_service.py 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import enum
  2. import logging
  3. from pydantic import BaseModel
  4. from services.enterprise.base import EnterprisePluginManagerRequest
  5. from services.errors.base import BaseServiceError
  6. logger = logging.getLogger(__name__)
  7. class PluginCredentialType(enum.IntEnum):
  8. MODEL = enum.auto()
  9. TOOL = enum.auto()
  10. def to_number(self):
  11. return self.value
  12. class CheckCredentialPolicyComplianceRequest(BaseModel):
  13. dify_credential_id: str
  14. provider: str
  15. credential_type: PluginCredentialType
  16. def model_dump(self, **kwargs):
  17. data = super().model_dump(**kwargs)
  18. data["credential_type"] = self.credential_type.to_number()
  19. return data
  20. class CredentialPolicyViolationError(BaseServiceError):
  21. pass
  22. class PluginManagerService:
  23. @classmethod
  24. def check_credential_policy_compliance(cls, body: CheckCredentialPolicyComplianceRequest):
  25. try:
  26. ret = EnterprisePluginManagerRequest.send_request(
  27. "POST", "/check-credential-policy-compliance", json=body.model_dump()
  28. )
  29. if not isinstance(ret, dict) or "result" not in ret:
  30. raise ValueError("Invalid response format from plugin manager API")
  31. except Exception as e:
  32. raise CredentialPolicyViolationError(
  33. f"error occurred while checking credential policy compliance: {e}"
  34. ) from e
  35. if not ret.get("result", False):
  36. raise CredentialPolicyViolationError("Credentials not available: Please use ENTERPRISE global credentials")
  37. logger.debug(
  38. "Credential policy compliance checked for %s with credential %s, result: %s",
  39. body.provider,
  40. body.dify_credential_id,
  41. ret.get("result", False),
  42. )