# pylint: disable=C0115
"""
Serializer classes for the Provider app.
"""
from smarter.apps.account.serializers import (
AccountMiniSerializer,
MetaDataWithOwnershipModelSerializer,
SecretSerializer,
UserMiniSerializer,
)
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."""
owner = UserMiniSerializer(read_only=True)
account = AccountMiniSerializer(read_only=True)
api_key = SecretSerializer(read_only=True)
class Meta:
model = Provider
fields = "__all__"
read_only_fields = ["created_at", "updated_at", "owner", "account"]
[docs]
def get_queryset(self):
name = self.request.GET.get("name")
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")
model_name = self.request.GET.get("model_name")
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")
verification_type = self.request.GET.get("verification_type")
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")
)
except SmarterException:
return ProviderModelVerification.objects.none()
queryset = ProviderModelVerification.objects.filter(provider_model=provider_model)
verification_type = self.request.GET.get("verification_type")
if verification_type:
queryset = queryset.filter(verification_type__iexact=verification_type)
return queryset