示例#1
0
    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
示例#2
0
 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),
     }