Initial commit from ZIP
This commit is contained in:
commit
378d4692a9
454 files changed
+40367
No files matched your search
+74
@@ -0,0 +1,74 @@
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from rest_framework import serializers
|
||||
from rest_framework.authtoken.serializers import (
|
||||
AuthTokenSerializer as BaseAuthTokenSerializer,
|
||||
)
|
||||
from outbo.apps.authentication.models import User
|
||||
from outbo.apps.organizations.models import Organization
|
||||
from outbo.apps.organizations.serializers import OrganizationSerializer
|
||||
|
||||
|
||||
class AuthTokenSerializer(BaseAuthTokenSerializer):
|
||||
def validate(self, attrs):
|
||||
validated_attrs = super().validate(attrs)
|
||||
user = validated_attrs["user"]
|
||||
if user.is_staff:
|
||||
msg = _("Administrators cannot login via API.")
|
||||
raise serializers.ValidationError(msg, code="authorization")
|
||||
return validated_attrs
|
||||
|
||||
|
||||
class _BaseUserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
|
||||
|
||||
class UserSerializer:
|
||||
class List(_BaseUserSerializer):
|
||||
organization_name = serializers.SlugRelatedField(
|
||||
source="organization", slug_field="name", read_only=True
|
||||
)
|
||||
photo = serializers.SerializerMethodField()
|
||||
|
||||
class Meta(_BaseUserSerializer.Meta):
|
||||
fields = [
|
||||
"id",
|
||||
"full_name",
|
||||
"organization_name",
|
||||
"photo",
|
||||
"email",
|
||||
"phone_number",
|
||||
"job_title",
|
||||
]
|
||||
|
||||
def get_photo(self, instance: User):
|
||||
if instance.photo_url:
|
||||
return self.context["request"].build_absolute_uri(instance.photo_url)
|
||||
|
||||
class Retrieve(_BaseUserSerializer):
|
||||
organization = serializers.SerializerMethodField()
|
||||
photo = serializers.SerializerMethodField()
|
||||
|
||||
class Meta(_BaseUserSerializer.Meta):
|
||||
fields = [
|
||||
"id",
|
||||
"username",
|
||||
"full_name",
|
||||
"organization",
|
||||
"photo",
|
||||
"email",
|
||||
"phone_number",
|
||||
"job_title",
|
||||
"is_observer",
|
||||
"is_trader",
|
||||
]
|
||||
|
||||
def get_photo(self, instance: User):
|
||||
if instance.photo_url:
|
||||
return self.context["request"].build_absolute_uri(instance.photo_url)
|
||||
|
||||
# NOTE: Hacky workaround
|
||||
def get_organization(self, instance):
|
||||
serializer = OrganizationSerializer.List(read_only=True)
|
||||
serializer.instance = Organization.objects.get(id=instance.organization_id)
|
||||
return serializer.data
|
||||
Reference in new issue
Block a user