
    ^f                         d Z ddlm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dS )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.
    )OrderedDict)PermissionDenied)Http404	force_str)
exceptionsserializers)clone_request)ClassLookupDictc                       e Zd Zd ZdS )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      I/var/www/html/env/lib/python3.11/site-packages/rest_framework/metadata.pydetermine_metadatazBaseMetadata.determine_metadata   s    
 ""MNNN    N)__name__
__module____qualname__r    r   r   r   r      s(        O O O O Or   r   c                      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j        dej        dej        di          Zd Zd Zd Zd ZdS )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choicezmultiple choicezfile uploadzimage uploadlistznested objectc                 (   t                      }|                                |d<   |                                |d<   d |j        D             |d<   d |j        D             |d<   t          |d          r|                     ||          }|r||d<   |S )	Nnamedescriptionc                     g | ]	}|j         
S r   
media_type).0renderers     r   
<listcomp>z5SimpleMetadata.determine_metadata.<locals>.<listcomp>@   s    YYYxx2YYYr   rendersc                     g | ]	}|j         
S r   r/   )r1   parsers     r   r3   z5SimpleMetadata.determine_metadata.<locals>.<listcomp>A   s    RRRFf/RRRr   parsesget_serializeractions)r   get_view_nameget_view_descriptionrenderer_classesparser_classeshasattrdetermine_actions)r   r   r   metadatar9   s        r   r   z!SimpleMetadata.determine_metadata<   s    ==--//"&";";"="=YY4CXYYYRRd>QRRR4)** 	.,,Wd;;G .&-#r   c                    i }ddht          |j                  z  D ]}t          ||          |_        	 t	          |d          r|                    |j                   |dk    r$t	          |d          r|                                 |                                }|                     |          ||<   n"# t          j
        t          t          f$ r Y nw xY w||_        # ||_        w xY w|S )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   r>   rD   rE   r8   get_serializer_infor   APIExceptionr   r   )r   r   r   r9   method
serializers         r   r?   z SimpleMetadata.determine_actionsH   s   
 foD,@(A(AA 	' 	'F(&99DL'4!455 9**4<888U??wt\'B'B?OO%%% "0022
"&":"::"F"F +-=wG     'w&&&&s*   AB5-C5CCCC	C(c                      t          |d          r|j        }t           fd|j                                        D                       S )zn
        Given an instance of a serializer, return a dictionary of metadata
        about its fields.
        childc                 x    g | ]6\  }}t          |t          j                  |                    |          f7S r   )
isinstancer	   HiddenFieldget_field_info)r1   
field_namer   r   s      r   r3   z6SimpleMetadata.get_serializer_info.<locals>.<listcomp>l   sS     
 
 
!
Ee[%<==
,,U334
 
 
r   )r>   rM   r   fieldsitems)r   rK   s   ` r   rH   z"SimpleMetadata.get_serializer_infoc   sh    
 :w'' 	* $)J 
 
 
 
%/%6%<%<%>%>
 
 
   	r   c                 h   t                      }| j        |         |d<   t          |dd          |d<   g d}|D ]/}t          ||d          }||dk    rt          |d          ||<   0t          |d	d          r|                     |j                  |d	<   n)t          |d
d          r|                     |          |d<   |                    d          s\t          |t          j
        t          j        f          s6t          |d          r&d |j                                        D             |d<   |S )zl
        Given an instance of a serializer field, return a dictionary
        of metadata about it.
        typerequiredF)	read_onlylabel	help_text
min_length
max_length	min_value	max_valueN Tstrings_onlyrM   rS   childrenrX   choicesc                 <    g | ]\  }}|t          |d           dS )Tr`   )valuedisplay_namer   )r1   choice_valuechoice_names      r   r3   z1SimpleMetadata.get_field_info.<locals>.<listcomp>   sH     % % %
 .L+ *$-k$M$M$M % % %r   )r   label_lookupgetattrr   rQ   rM   rH   getrO   r	   RelatedFieldManyRelatedFieldr>   rc   rT   )r   r   
field_infoattrsattrre   s         r   rQ   zSimpleMetadata.get_field_infor   sm   
 !]]
!.u5
6!(
E!B!B
:
 
 
  	G 	GDE4..E Ub[[#,U#F#F#F
4 5'4(( 	E"&"5"5ek"B"BJwUHd++ 	E%)%=%=e%D%DJz"{++ 		5;#;[=Y"Z[[		y))		% %
 271D1D1F1F% % %Jy! r   N) r   r   r   __doc__r   r	   FieldBooleanField	CharField	UUIDFieldURLField
EmailField
RegexField	SlugFieldIntegerField
FloatFieldDecimalField	DateFieldDateTimeField	TimeFieldChoiceFieldMultipleChoiceField	FileField
ImageField	ListField	DictField
Serializerri   r   r?   rH   rQ   r   r   r   r   r      s         #? $7$ )$ 	x$ 	x	$
 	e$ 	$ 	$ 	v$ 	 )$ 	$ 	 )$ 	v$ 	!:$ 	v$ 	$  	'):!$" 	}#$$ 	v+$ $  L0
 
 
  6  $ $ $ $ $r   r   N)rq   collectionsr   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      s    $ # # # # # 3 3 3 3 3 3       + + + + + + 2 2 2 2 2 2 2 2 0 0 0 0 0 0 > > > > > >O O O O O O O Oy y y y y\ y y y y yr   