Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

plugin_manager_service.py 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. class PluginCredentialType(enum.Enum):
  7. MODEL = 0
  8. TOOL = 1
  9. def to_number(self):
  10. return self.value
  11. class CheckCredentialPolicyComplianceRequest(BaseModel):
  12. dify_credential_id: str
  13. provider: str
  14. credential_type: PluginCredentialType
  15. def model_dump(self, **kwargs):
  16. data = super().model_dump(**kwargs)
  17. data["credential_type"] = self.credential_type.to_number()
  18. return data
  19. class CredentialPolicyViolationError(BaseServiceError):
  20. pass
  21. class PluginManagerService:
  22. @classmethod
  23. def check_credential_policy_compliance(cls, body: CheckCredentialPolicyComplianceRequest):
  24. try:
  25. ret = EnterprisePluginManagerRequest.send_request(
  26. "POST", "/check-credential-policy-compliance", json=body.model_dump()
  27. )
  28. if not isinstance(ret, dict) or "result" not in ret:
  29. raise ValueError("Invalid response format from plugin manager API")
  30. except Exception as e:
  31. raise CredentialPolicyViolationError(
  32. f"error occurred while checking credential policy compliance: {e}"
  33. ) from e
  34. if not ret.get("result", False):
  35. raise CredentialPolicyViolationError("Credentials not available: Please use ENTERPRISE global credentials")
  36. logging.debug(
  37. f"Credential policy compliance checked for {body.provider} with credential {body.dify_credential_id}, result: {ret.get('result', False)}"
  38. )