
    h                     ~    S r SSKJr  SSKJr  SSKJr  SSKJrJ	r	  SSK
Jr  SSKJr   " S S	5      r " S
 S\5      rg)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                       \ rS rSrS rSrg)BaseMetadata   c                     [        S5      e)z`
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      I/var/www/html/env/lib/python3.13/site-packages/rest_framework/metadata.pydetermine_metadataBaseMetadata.determine_metadata   s    
 ""MNN     N)__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   r   r      s    Or   r   c                   v   \ rS rSrSr\" 0 \R                  S_\R                  S_\R                  S_\R                  S_\R                  S_\R                  S_\R                  S_\R                  S	_\R                  S
_\R                   S_\R"                  S_\R$                  S_\R&                  S_\R(                  S_\R*                  S_\R,                  S_\R.                  S_\R0                  S\R2                  S\R4                  S\R6                  S\R8                  S0E5      rS rS rS r S r!Sr"g)SimpleMetadata   z
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                 J   UR                  5       UR                  5       UR                   Vs/ s H  o3R                  PM     snUR                   Vs/ s H  oDR                  PM     snS.n[        US5      (       a  U R                  X5      nU(       a  XeS'   U$ s  snf s  snf )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metadatar5   s          r   r   !SimpleMetadata.determine_metadata;   s    &&(446<@<Q<QR<Q++<QR7;7J7JK7JV((7JK	
 4)**,,W;G&-# SKs   BB 
c                    0 nSS1[        UR                  5      -   H  n[        X5      Ul         [	        US5      (       a  UR                  UR                  5        US:X  a!  [	        US5      (       a  UR                  5         UR                  5       nU R                  U5      X4'   Xl        M     U$ ! [        R                  [        [        4 a     N-f = f! Xl        f = f)zv
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   r;   rD   rE   r4   get_serializer_infor   APIExceptionr   r   )r   r   r   r5   method
serializers         r   r<    SimpleMetadata.determine_actionsH   s    
 foD,@,@(AAF(9DL'4!455**4<<8U?wt\'B'BOO% "002
"&":"::"F&# B&  ++-=wG   's*   AB3#C3CCCCC c                    [        US5      (       a  UR                  nUR                  R                  5        VVs0 s H7  u  p#[	        U[
        R                  5      (       a  M&  X R                  U5      _M9     snn$ s  snnf )zV
Given an instance of a serializer, return a dictionary of metadata
about its fields.
child)r;   rN   fieldsitems
isinstancer   HiddenFieldget_field_info)r   rK   
field_namer   s       r   rH   "SimpleMetadata.get_serializer_infoc   sw    
 :w'' $))J &0%6%6%<%<%>
%>!
e[%<%<= 3J++E22%>
 	
 
s   %A=$A=c           
         U R                   U   [        USS5      S.n/ SQnU H(  n[        XS5      nUc  M  US:w  d  M  [        USS9X$'   M*     [        US	S5      (       a  U R                  UR                  5      US	'   O&[        US
S5      (       a  U R                  U5      US'   UR                  S5      (       d}  [        U[        R                  [        R                  45      (       dN  [        US5      (       a=  UR                  R                  5        VVs/ s H  u  pgU[        USS9S.PM     snnUS'   U$ s  snnf )zT
Given an instance of a serializer field, return a dictionary
of metadata about it.
requiredF)typerW   )		read_onlylabel	help_text
min_length
max_length	min_value	max_value
max_digitsdecimal_placesN T)strings_onlyrN   rO   childrenrY   choices)valuedisplay_name)label_lookupgetattrr   rS   rN   rH   getrQ   r   RelatedFieldManyRelatedFieldr;   re   rP   )r   r   
field_infoattrsattrrf   choice_valuechoice_names           r   rS   SimpleMetadata.get_field_infor   s=    %%e,z59



 DE.E Ub[#,U#F
  
 5'4(("&"5"5ekk"BJwUHd++%)%=%=e%DJz"{++5;#;#;[=Y=Y"Z[[y)) 271D1D1F%
 2G-L *$-k$M 2G%Jy! %s   D<r   N)#r   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
Serializerrh   r   r<   rH   rS   r   r   r   r   r   r      s    # $7$  )$ 	x$ 	x	$
 	e$ 	$ 	$ 	v$ 	  )$ 	$ 	  )$ 	v$ 	!!:$ 	v$ 	!!:$  	!$" 	''):#$$ 	}v-$ L26
&r   r   N)rs   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   