
    Nwg                     ~    d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZ  G d d	      Z G d
 de      Zy)aL  
The metadata API is used to allow customization of how `OPTIONS` requests
are handled. We currently provide a single default implementation that returns
some fairly ad-hoc information about the view.

Future implementations might use JSON schema or other definitions in order
to return this information in a more standardized way.
    )PermissionDenied)Http404)	force_str)
exceptionsserializers)clone_request)ClassLookupDictc                       e Zd Zd Zy)BaseMetadatac                     t        d      )zx
        Return a dictionary of metadata about the view.
        Used to return responses for OPTIONS requests.
        z).determine_metadata() must be overridden.)NotImplementedError)selfrequestviews      N/var/www/horilla/myenv/lib/python3.12/site-packages/rest_framework/metadata.pydetermine_metadatazBaseMetadata.determine_metadata   s    
 ""MNN    N)__name__
__module____qualname__r    r   r   r   r      s    Or   r   c                   n   e Zd ZdZ ei ej                  dej                  dej                  dej                  dej                  dej                  dej                  dej                  dej                  d	ej                  d
ej                   dej"                  dej$                  dej&                  dej(                  dej*                  dej,                  dej.                  dej0                  dej2                  dej4                  dej6                  di      Zd Zd Zd Zd Z y)SimpleMetadataz
    This is the default metadata implementation.
    It returns an ad-hoc set of information about the view.
    There are not any formalized standards for `OPTIONS` responses
    for us to base this on.
    fieldbooleanstringurlemailregexslugintegerfloatdecimaldatedatetimetimedurationchoicezmultiple choicezfile uploadzimage uploadlistznested objectc                 2   |j                         |j                         |j                  D cg c]  }|j                   c}|j                  D cg c]  }|j                   c}d}t        |d      r| j                  ||      }|r||d<   |S c c}w c c}w )N)namedescriptionrendersparsesget_serializeractions)get_view_nameget_view_descriptionrenderer_classes
media_typeparser_classeshasattrdetermine_actions)r   r   r   rendererparsermetadatar0   s          r   r   z!SimpleMetadata.determine_metadata;   s    &&(446<@<Q<QR++R7;7J7JKVv((K	
 4)*,,Wd;G&-# SKs   BB
c                    i }ddht        |j                        z  D ]  }t        ||      |_        	 t	        |d      r|j                  |j                         |dk(  rt	        |d      r|j                          |j                         }| j                  |      ||<   ||_         |S # t        j                  t        t        f$ r Y +w xY w# ||_        w xY w)z
        For generic class based views we return information about
        the fields that are accepted for 'PUT' and 'POST' methods.
        PUTPOSTcheck_permissions
get_object)setallowed_methodsr   r   r6   r>   r?   r/   get_serializer_infor   APIExceptionr   r   )r   r   r   r0   method
serializers         r   r7   z SimpleMetadata.determine_actionsH   s    
 foD,@,@(AA 	'F(&9DL'4!45**4<<8U?wt\'BOO% "002
"&":"::"F&#	'&  ++-=wG   's*   AB):$C)C
C	C

C	Cc                     t        |d      r|j                  }|j                  j                         D ci c]1  \  }}t	        |t
        j                        s|| j                  |      3 c}}S c c}}w )zn
        Given an instance of a serializer, return a dictionary of metadata
        about its fields.
        child)r6   rG   fieldsitems
isinstancer   HiddenFieldget_field_info)r   rE   
field_namer   s       r   rB   z"SimpleMetadata.get_serializer_infoc   sp    
 :w' $))J &0%6%6%<%<%>
!
Ee[%<%<= ++E22
 	
 
s   6A0c           	      R   | j                   |   t        |dd      d}g d}|D ](  }t        ||d      }||dk7  st        |d      ||<   * t        |d	d      r| j                  |j                        |d	<   n!t        |d
d      r| j                  |      |d<   |j                  d      stt        |t        j                  t        j                  f      sJt        |d      r>|j                  j                         D cg c]  \  }}|t        |d      d c}}|d<   |S c c}}w )zl
        Given an instance of a serializer field, return a dictionary
        of metadata about it.
        requiredF)typerO   )		read_onlylabel	help_text
min_length
max_length	min_value	max_value
max_digitsdecimal_placesN T)strings_onlyrG   rH   childrenrQ   choices)valuedisplay_name)label_lookupgetattrr   rL   rG   rB   getrJ   r   RelatedFieldManyRelatedFieldr6   r]   rI   )r   r   
field_infoattrsattrr^   choice_valuechoice_names           r   rL   zSimpleMetadata.get_field_infor   s1    %%e,z59



  	GDE4.E Ub[#,U#F
4 	G
 5'4("&"5"5ekk"BJwUHd+%)%=%=e%DJz"{+5;#;#;[=Y=Y"Z[y) 271D1D1F%
 .L+ *$-k$M%Jy! %s    D#N)!r   r   r   __doc__r	   r   FieldBooleanField	CharField	UUIDFieldURLField
EmailField
RegexField	SlugFieldIntegerField
FloatFieldDecimalField	DateFieldDateTimeField	TimeFieldDurationFieldChoiceFieldMultipleChoiceField	FileField
ImageField	ListField	DictField
Serializerr`   r   r7   rB   rL   r   r   r   r   r      s    # $7$  )$ 	x$ 	x	$
 	e$ 	$ 	$ 	v$ 	  )$ 	$ 	  )$ 	v$ 	!!:$ 	v$ 	!!:$  	!$" 	''):#$$ 	}v-$ L26
&r   r   N)rj   django.core.exceptionsr   django.httpr   django.utils.encodingr   rest_frameworkr   r   rest_framework.requestr   "rest_framework.utils.field_mappingr	   r   r   r   r   r   <module>r      s8    4  + 2 0 >O O}\ }r   