Source code for smarter.apps.provider.serializers

# pylint: disable=C0115
"""
Serializer classes for the Provider app.
"""

from rest_framework import serializers

from smarter.apps.account.serializers import (
    AccountMiniSerializer,
    MetaDataWithOwnershipModelSerializer,
    UserMiniSerializer,
    UserProfileSerializer,
)
from smarter.apps.secret.serializers import SecretMiniSerializer
from smarter.common.exceptions import SmarterException
from smarter.lib.drf.serializers import SmarterCamelCaseSerializer

from .models import (
    Provider,
    ProviderModel,
    ProviderModelVerification,
    ProviderVerification,
    get_model_for_provider,
    get_models_for_provider,
    get_provider,
    get_providers,
)


[docs] class ProviderSerializer(MetaDataWithOwnershipModelSerializer): """PluginMeta model serializer.""" user_profile = UserProfileSerializer() api_key = SecretMiniSerializer(read_only=True) is_official_provider = serializers.BooleanField(read_only=True) tos_accepted = serializers.BooleanField(read_only=True) rfc1034_compliant_name = serializers.CharField(read_only=True) tos_accepted_by = UserMiniSerializer(read_only=True) class Meta: model = Provider fields = [ "id", "created_at", "updated_at", "name", "user_profile", "status", "description", "version", "annotations", "tags", "manifest_url", "ready", "is_default", "is_active", "is_verified", "is_featured", "is_deprecated", "is_flagged", "is_suspended", "base_url", "api_key", "default_model", "connectivity_test_path", "logo", "website_url", "ownership_requested", "contact_email", "contact_email_verified", "support_email", "support_email_verified", "docs_url", "terms_of_service_url", "privacy_policy_url", "is_official_provider", "tos_accepted", "tos_accepted_at", "tos_accepted_by", "rfc1034_compliant_name", ] read_only_fields = ["created_at", "updated_at", "manifest_url", "ready"]
[docs] def get_queryset(self): name = self.request.GET.get("name") # type: ignore if name: provider = get_provider(provider_name=name) return Provider.objects.filter(pk=provider.pk) try: providers = get_providers() except SmarterException: return Provider.objects.none() pks = [p.pk for p in providers] queryset = Provider.objects.filter(pk__in=pks) return queryset
[docs] class ProviderModelSerializer(MetaDataWithOwnershipModelSerializer): """ProviderModel model serializer.""" provider = ProviderSerializer(read_only=True) class Meta: model = ProviderModel fields = "__all__" read_only_fields = ["created_at", "updated_at", "provider"]
[docs] def get_queryset(self): name = self.request.GET.get("name") # type: ignore model_name = self.request.GET.get("model_name") # type: ignore if name and model_name: try: provider_model = get_model_for_provider(provider_name=name, model_name=model_name) except SmarterException: return ProviderModel.objects.none() return ProviderModel.objects.filter(pk=provider_model.pk) if name: try: provider_models = get_models_for_provider(provider_name=name) except SmarterException: return ProviderModel.objects.none() pks = [p.pk for p in provider_models] queryset = ProviderModel.objects.filter(pk__in=pks) return queryset queryset = ProviderModel.objects.filter(is_active=True) return queryset
[docs] class ProviderVerificationSerializer(SmarterCamelCaseSerializer): """ProviderVerification model serializer.""" provider = ProviderSerializer(read_only=True) class Meta: model = ProviderVerification fields = "__all__" read_only_fields = ["created_at", "updated_at", "provider"]
[docs] def get_queryset(self): name = self.request.GET.get("name") # type: ignore verification_type = self.request.GET.get("verification_type") # type: ignore if name: try: provider = get_provider(provider_name=name) queryset = ProviderVerification.objects.filter(provider=provider) except SmarterException: return ProviderVerification.objects.none() if verification_type: queryset = queryset.filter(verification_type__iexact=verification_type) return queryset queryset = ProviderVerification.objects.filter(is_active=True) return queryset
[docs] class ProviderModelVerificationSerializer(SmarterCamelCaseSerializer): """ProviderModelVerification model serializer.""" provider_model = ProviderModelSerializer(read_only=True) class Meta: model = ProviderModelVerification fields = "__all__" read_only_fields = ["created_at", "updated_at", "provider_model"]
[docs] def get_queryset(self): try: provider_model = get_model_for_provider( provider_name=self.request.GET.get("name"), model_name=self.request.GET.get("model_name") # type: ignore ) except SmarterException: return ProviderModelVerification.objects.none() queryset = ProviderModelVerification.objects.filter(provider_model=provider_model) verification_type = self.request.GET.get("verification_type") # type: ignore if verification_type: queryset = queryset.filter(verification_type__iexact=verification_type) return queryset