def serialize( self, obj: Integration, attrs: Mapping[str, Any], user: User, include_config: bool = True ) -> MutableMapping[str, JSONData]: # XXX(epurkhiser): This is O(n) for integrations, especially since # we're using the IntegrationConfigSerializer which pulls in the # integration installation config object which very well may be making # API request for config options. integration: MutableMapping[str, Any] = serialize( objects=obj.integration, user=user, serializer=IntegrationConfigSerializer(obj.organization.id, params=self.params), include_config=include_config, ) dynamic_display_information = None config_data = None try: installation = obj.integration.get_installation(obj.organization_id) except NotImplementedError: # slack doesn't have an installation implementation config_data = obj.config if include_config else None else: try: # just doing this to avoid querying for an object we already have installation._org_integration = obj config_data = installation.get_config_data() if include_config else None dynamic_display_information = installation.get_dynamic_display_information() except ApiError as e: # If there is an ApiError from our 3rd party integration # providers, assume there is an problem with the configuration # and set it to disabled. integration.update({"status": "disabled"}) name = "sentry.serializers.model.organizationintegration" log_info = { "error": str(e), "integration_id": obj.integration.id, "integration_provider": obj.integration.provider, } logger.info(name, extra=log_info) integration.update( { "configData": config_data, "externalId": obj.integration.external_id, "organizationId": obj.organization.id, "organizationIntegrationStatus": obj.get_status_display(), "gracePeriodEnd": obj.grace_period_end, } ) if dynamic_display_information: integration.update({"dynamicDisplayInformation": dynamic_display_information}) return integration
def serialize(self, obj: Integration, attrs: Mapping[str, Any], user: User, **kwargs: Any) -> MutableMapping[str, JSONData]: provider = obj.get_provider() return { "id": str(obj.id), "name": obj.name, "icon": obj.metadata.get("icon"), "domainName": obj.metadata.get("domain_name"), "accountType": obj.metadata.get("account_type"), "status": obj.get_status_display(), "provider": serialize_provider(provider), }