
    _}dg                         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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.
    )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      V/var/www/surfInsights/venv3-11/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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durationchoicezmultiple choicezfile uploadzimage uploadlistznested objectc                     |                                 |                                d |j        D             d |j        D             d}t	          |d          r|                     ||          }|r||d<   |S )Nc                     g | ]	}|j         
S r   
media_type).0renderers     r   
<listcomp>z5SimpleMetadata.determine_metadata.<locals>.<listcomp>?   s    RRR+RRRr   c                     g | ]	}|j         
S r   r-   )r/   parsers     r   r1   z5SimpleMetadata.determine_metadata.<locals>.<listcomp>@   s    KKKVv(KKKr   )namedescriptionrendersparsesget_serializeractions)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    &&((4466RRD<QRRRKKt7JKKK	
 
 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        } fd|j                                        D             S )zn
        Given an instance of a serializer, return a dictionary of metadata
        about its fields.
        childc                 v    i | ]5\  }}t          |t          j                  |                    |          6S r   )
isinstancer   HiddenFieldget_field_info)r/   
field_namer   r   s      r   
<dictcomp>z6SimpleMetadata.get_serializer_info.<locals>.<dictcomp>l   sP     
 
 
!
Ee[%<==
++E22
 
 
r   )r>   rM   fieldsitems)r   rK   s   ` r   rH   z"SimpleMetadata.get_serializer_infoc   s[    
 :w'' 	* $)J
 
 
 
%/%6%<%<%>%>
 
 
 	
r   c                 B   | j         |         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.
        requiredF)typerW   )		read_onlylabel	help_text
min_length
max_length	min_value	max_value
max_digitsdecimal_placesN Tstrings_onlyrM   rT   childrenrY   choicesc                 <    g | ]\  }}|t          |d           dS )Trc   )valuedisplay_namer   )r/   choice_valuechoice_names      r   r1   z1SimpleMetadata.get_field_info.<locals>.<listcomp>   sH     % % %
 .L+ *$-k$M$M$M % % %r   )label_lookupgetattrr   rQ   rM   rH   getrO   r   RelatedFieldManyRelatedFieldr>   rf   rU   )r   r   
field_infoattrsattrrh   s         r   rQ   zSimpleMetadata.get_field_infor   sb    %e,z599
 



 
 
  	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DurationFieldChoiceFieldMultipleChoiceField	FileField
ImageField	ListField	DictField
Serializerrl   r   r?   rH   rQ   r   r   r   r   r      s         #? $7$ )$ 	x$ 	x	$
 	e$ 	$ 	$ 	v$ 	 )$ 	$ 	 )$ 	v$ 	!:$ 	v$ 	!:$  	!$" 	'):#$$ 	}v-$ $  L2    6
 
 
& & & & &r   r   N)rt   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     4 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} } } } }\ } } } } }r   