
    撾i                         d Z ddlZddlmZ ddlmZ ddlmZ  G d dej                        Z	 G d	 d
ej                        Z G d dej                        Z G d dej                        Zy)zE
DRF serializers for face registration, identification, and listing.
    N)settings)serializers   )
FaceRecordc                   $    e Zd ZdZ G d d      Zy)FaceRecordSerializeruA   Read serializer for FaceRecord — excludes the embedding vector.c                        e Zd ZeZg dZddgZy)FaceRecordSerializer.Meta)idnamephoto
created_atmetadatar   r   N)__name__
__module____qualname__r   modelfieldsread_only_fields     ./var/www/face-recognition/faces/serializers.pyMetar
      s    B ,/r   r   N)r   r   r   __doc__r   r   r   r   r   r      s    K0 0r   r   c                       e Zd ZdZ ej
                  dd      Z ej                  d      Z ej                  de
      Zd Zd	 Zy
)RegisterSerializerz'Write serializer for face registration.   T)
max_lengthrequiredr   F)r   defaultc           	      ,   t        t        dd      }|j                  |kD  r,t        j                  d|j                   d| d|dz   d      g d}|j
                  |vr5t        j                  d	|j
                   d
dj                  |       d      |S zDValidate photo file: max size 10MB, allowed types jpeg/jpg/png/webp.MAX_UPLOAD_SIZEi   zPhoto file size (z& bytes) exceeds maximum allowed size (z	 bytes / i   z MB).)z
image/jpegz	image/pngz
image/webpzUnsupported file type 'z'. Allowed types: z, .getattrr   sizer   ValidationErrorcontent_typejoinselfvaluemax_sizeallowed_typess       r   validate_photoz!RegisterSerializer.validate_photo       8%68HI:: --#EJJ< 0:YxK'@&AH 
 B]2--)%*<*<)= >""&))M":!;1> 
 r   c                     t        |t              r	 t        j                  |      }t        |t              st        j                  d      |S # t        j                  $ r t        j                  d      w xY w)z Ensure metadata is a valid dict.zMetadata must be valid JSON.z&Metadata must be a JSON object (dict).)
isinstancestrjsonloadsJSONDecodeErrorr   r)   dict)r-   r.   s     r   validate_metadataz$RegisterSerializer.validate_metadata/   sn    eS!R

5) %&--.VWW	 '' R!112PQQRs   A )A7N)r   r   r   r   r   	CharFieldr   
ImageFieldr   	JSONFieldr9   r   r1   r:   r   r   r   r   r      sI    1 ;  C$?D"K""D1E${$$eTBH$	r   r   c                   <    e Zd ZdZ ej
                  d      Zd Zy)IdentifySerializerz)Write serializer for face identification.Tr    c           	      ,   t        t        dd      }|j                  |kD  r,t        j                  d|j                   d| d|dz   d      g d}|j
                  |vr5t        j                  d	|j
                   d
dj                  |       d      |S r#   r&   r,   s       r   r1   z!IdentifySerializer.validate_photo@   r2   r   N)r   r   r   r   r   r<   r   r1   r   r   r   r?   r?   ;   s    3"K""D1Er   r?   c                       e Zd ZdZ ej
                         Z ej                         Z ej                         Z
 ej                  d      Z ej                         Zy)IdentifyResultSerializerz+Read serializer for identification results.T)
allow_nullN)r   r   r   r   r   BooleanFieldmatchedr;   r   
FloatField
confidenceIntegerFieldr   distancer   r   r   rB   rB   S   sW    5&k&&(G ;  "D''')J	!	!	!T	2B%{%%'Hr   rB   )r   r6   django.confr   rest_frameworkr   modelsr   ModelSerializerr   
Serializerr   r?   rB   r   r   r   <module>rO      sa       & 0;66 0"// "J// 0({55 (r   