
    <%i-                    `   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dl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 d d	lmZmZmZ d d
lmZmZ d dlm Z m!Z!m"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, d dl-m.Z. d dl/Z0d dl1Z0d dl2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZg d dlhmiZi d dljmkZk d dllmmZmmnZnmoZompZpmqZqmrZrmsZsmtZt  G d de&      Zuy)    N)defaultdict)AnyDictListOptionalUnion)
exceptions)
validators)models)
get_format)gettext_lazy)permissions	renderersserializers)_UnvalidatedFieldempty)CreateAPIViewGenericAPIViewListCreateAPIView)ListModelMixin)ViewInspector)get_pk_description)api_settings)get_field_info)APIView)*)add_trace_messageerrorget_overridehas_overridewarn)OpenApiAuthenticationExtensionOpenApiFilterExtensionOpenApiSerializerExtensionOpenApiSerializerFieldExtension))ComponentRegistryResolvedComponentUnableToProceedErrorappend_metaassert_basic_serializerbuild_array_typebuild_basic_typebuild_choice_fieldbuild_examples_listbuild_generic_typebuild_listed_example_valuebuild_media_type_objectbuild_mocked_viewbuild_object_typebuild_parameter_typebuild_serializer_contextfilter_supported_argumentsfollow_field_sourcefollow_model_field_lookupforce_instanceget_docget_list_serializerget_managerget_type_hintsget_view_modelis_basic_serializeris_basic_typeis_fieldis_higher_order_type_hintis_list_serializeris_list_serializer_customizedis_patched_serializeris_serializeris_trivial_string_variation!modify_media_types_for_versioningresolve_django_path_parameterresolve_regex_path_parameterresolve_type_hintsafe_ref!sanitize_specification_extensionswhitelisted)spectacular_settings)OpenApiTypes)	DirectionOpenApiCallbackOpenApiExampleOpenApiParameterOpenApiRequestOpenApiResponse_SchemaType_SerializerTypec                   &   e Zd ZddddddZdeded	ed
ededee   fdZde	fdZ
dHdee   de	fdZde	fdZdeeeef      fdZdIdZdee   fdZdee   fdZdefdZdee   fdZdeeeef      fdZdeeeeef   ef      fdZdee   fdZdee   fdZdee   fdZdee   fdZdefdZd  Zdee    fd!Z!defd"Z"de	fd#Z#dee   fd$Z$d% Z%dee&   fd&Z'd' Z(d( Z)d) Z*dJd*Z+d+e&d,eddfd-Z,dJd.Z-d/ Z.d0 Z/d1 Z0d2 Z1d3 Z2d4 Z3d5edefd6Z4dee&   fd7Z5d8edee&   fd9Z6d: Z7dee8   fd;Z9dKd<Z:dId=Z;dId>Z<dLd?e=defd@Z>d?e=dee   fdAZ?dMdBZ@dLdefdCZAd?e=de&fdDZBdeCj                  d?e=defdEZEdJdefdFZF	 dJded?e=deGfdGZHy)N
AutoSchemaretrievecreateupdatepartial_updatedestroy)getpostputpatchdeletepath
path_regexpath_prefixmethodregistryreturnc                    || _         || _        || _        || _        |j	                         | _        | j                         ry d| j                         i}| j                         }|r||d<   | j                         }|r||d<   | j                         }	|	r|	|d<   | j                         }
|
r|
|d<   | j                         }|r||d<   | j                         }|r||d<   | j                         }|r||d<   | j                         }|r||d	<   | j!                         |d
<   | j#                         }|r|j%                  t'        |             | j)                         }|r||d<   |S )NoperationIddescriptionsummaryexternalDocs
parameterstagsrequestBodysecurity
deprecated	responses	callbacks)ri   re   rf   rg   upperrh   is_excludedget_operation_idget_descriptionget_summary_get_external_docs_get_parametersget_tags_get_request_bodyget_authis_deprecated_get_response_bodiesget_extensionsr]   rM   _get_callbacks)selfre   rf   rg   rh   ri   	operationrm   rn   external_docsrp   rq   request_bodyauthrt   
extensionsrv   s                    O/usr/local/footviz/venv/lib/python3.12/site-packages/drf_spectacular/openapi.pyget_operationzAutoSchema.get_operation>   s{    !	$&lln"/1F1F1H!I	**,'2Im$""$#*Ii //1(5In%))+
&0Il#}} $If--/'3Im$}}$(Ij!'')
&0Il#!%!:!:!<	+((*
>zJK'')	%.Ik"    c                      y$ override this for custom behaviour F r   s    r   rx   zAutoSchema.is_excluded}       r   N
serializerc                    || j                         }t        |t              r<|r:|j                         D ci c]  \  }}t	        |      | }}}|t        |         }t        |      ryt        |      ryt        | j                  d      r| j                  j                  dk(  S | j                  dk7  ryt        | j                  t              ryt        | j                  t              rP| j                  j                  xs | j                  j                  }|t!        j"                  | j$                        v ryyc c}}w )z
        partially heuristic approach to determine if a view yields an object or a
        list of objects. used for operationId naming, array building and pagination.
        defaults to False if all introspection fail.
        TFactionlistGET)get_response_serializers
isinstancedictitemsstrminrC   r@   hasattrviewr   rh   r   r   lookup_url_kwarglookup_fielduritemplate	variablesre   )r   r   codesr   s        r   _is_list_viewzAutoSchema._is_list_view   s    668Jj$'J6@6F6F6HI74#d)Q,IJI#C
O4Jj)$499h'99##v--;;%dii0dii0#yy99STYY=S=S;#8#8#CC) Js   D<c                     | j                   dk7  ryt        | j                  dd       dk(  ryt        | j                  t        t
        f      ryy)NPOSTFr   r\   T)rh   getattrr   r   r   r   r   s    r   _is_create_operationzAutoSchema._is_create_operation   sC    ;;& 499h-9dii"3]!CDr   c                     g S r   r   r   s    r   get_override_parametersz"AutoSchema.get_override_parameters       	r   c                    i }| j                         D ]  }t        |t              r|j                  r"t	        |j
                        rt        |j
                        }n}t        |j
                        r'| j                  |j
                  |      j                  }nAt        |j
                  t              r|j
                  }nt        d|j                   d       |j                  r:t	        |j
                        rt        |      }nt        d|j                   d       |j                  rd ||j                  |j                   f<   9t#        |j                  ||j                   |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  |j0                  |j2                  |j4                  t7        |j8                        |j:                        ||j                  |j                   f<   t        |      rt=        |      }| j?                  |d      }|d   jA                         D ]  \  }}	 |jB                  jE                  |      }t#        |||jI                  dd       t        jJ                  tM        |d	d
      tO        ||jE                  dg       v             ||t        jJ                  f<    t        d| d        |S # tF        $ r d }Y w xY w)Nz unsupported type for parameter "z". Skipping.zparameter "z^" has many=True and is not a basic type. many=True only makes sense for basic types. Ignoring.nameschemalocationrequiredrm   enumpatternrt   styleexplodedefaultallow_blankexamplesr   request
propertiesrm   r   Tr   )r   r   rm   r   r   r   z'could not resolve parameter annotation z. Skipping.)(r   r   rT   responser@   typer,   r?   resolve_serializerrefr   r!   r   manyr+   excluder   r4   r   rm   r   r   rt   r   r   r   r   r.   r   r   r9   _map_serializerr   fieldsr`   	ExceptionpopQUERYr   bool)	r   	directionresult	parameterr   mappedproperty_nameproperty_schemafields	            r   _process_override_parametersz'AutoSchema._process_override_parameters   s   557 >	WI)%56%% 0-inn=F(8!44Y^^YOSSF	5&^^F;INN;K<XY>>$Y^^4!1&!9))..)9 :T U
 $$AEF9>>9+=+==>AU&^^%!*!3!3!*!3!3$-$9$9&^^ ) 1 1#,#7#7'oo ) 1 1 ) 1 1$-$9$9!4Y5G5G!H#,#7#7BF9>>9+=+==>  %Y/*95	--iC6<\6J6P6P6R 2M?% ) 0 0 4 4] C EY*.$3$7$7t$L!1!7!7$+E=$$G!%mvzz*b7Q&Q!REF=*:*@*@@A >ykUV}>	W~  % % $%s   K((K65K6c                 
   g }| j                  d      }t        j                  r_t        |      dkD  rQ|j	                  t        t        j                  t        t        j                        t        j                  |             |S )Nformat   )r   r   r   r   )map_renderersr   URL_FORMAT_OVERRIDElenappendr4   r,   rP   STRrT   r   )r   rp   formatss      r   _get_format_parametersz!AutoSchema._get_format_parameters   sl    
$$X.++Gq0@2!55'(8(89)//	  r   c                    d }| j                         }t        j                  | j                        D cg c]  }|df|vs
| }}i  || j	                  |             || j                                || j                                || j                               }|j                         D ]  \  }}|	||v s||= |||<    t        t              }| j                         D ]-  }	|	j                  s||	j                     j                  |	       / |j                         D ]?  \  }}
||v s||   j                  di        ||   d   j                  t!        |
             A t#        t$        j&                        r)t)        |j+                         t$        j&                        S t$        j&                  rt)        |j+                         d       S t        |j+                               S c c}w )Nc                 >    | D ci c]  }|d   |d   f| c}S c c}w )Nr   inr   )rp   ps     r   dict_helperz/AutoSchema._get_parameters.<locals>.dict_helper   s(    5?@QvY$(!+@@@s   re   r   )keyc                     | d   S )Nr   r   )r   s    r   <lambda>z,AutoSchema._get_parameters.<locals>.<lambda>$  s
    QvY r   )r   r   r   re   _resolve_path_parameters_get_filter_parameters_get_pagination_parametersr   r   r   r   get_examplesparameter_onlyr   
setdefaultr]   r.   callablerO   SORT_OPERATION_PARAMETERSsortedvalues)r   r   override_parametersvpath_variablesrp   r   r   examples_by_keyexampler   s              r   r}   zAutoSchema._get_parameters   s   	A #??A #,,TYY7
Av;Na;aA
 

$77GH
$5578
 $99;<
 $5578	

 2779 	,NC *$"3"+
3	, &d+((* 	HG%% 6 67>>wG	H -224 	RMCj 3**:r:3
+223Fx3PQ	R
 (BBC*++-3G3a3abb!;;*++-3FGG
))+,,E
s   G2G2c           	          t        | j                  t        | j                  d| j                  j                               d      }t	        | j                  j
                        }t	        |      }|xs |S )r   r   N)r   r   rh   lowerr:   	__class__)r   action_or_methodview_doc
action_docs       r   rz   zAutoSchema.get_description(  sZ    "499gdii4;;K\K\K^._aef499../-.
%X%r   c                      yr   Nr   r   s    r   r{   zAutoSchema.get_summary/      r   c                 N    | j                         }t        |t              rd|iS |S )Nurl)get_external_docsr   r   )r   r   s     r   r|   zAutoSchema._get_external_docs3  s+    ..0mS)=))  r   c                      yr   r   r   s    r   r   zAutoSchema.get_external_docs:  r   r   c           
      Z   g }| j                   j                         D ]A  }t        |t        j                  d      s t        j                  |      }|st        d|j                   d       Q|j                  |       }|3t        |t              r|j                  |       n|j                  |       t        |j                  t              r |j                  g|j!                  |       g}}n|j                  |j!                  |       }}t#        ||      D ]E  \  }}| j$                  j'                  t)        |t(        j*                  |j                  |             G D t        j,                  r|j                  t        j,                         | j                   j/                         D 	cg c]  }	|	j                   }
}	t0        j2                  |
v r|j                  i        |S t0        j4                  |
v r-| j6                  t0        j8                  v r|j                  i        |S c c}	w )a#  
        Obtains authentication classes and permissions from view. If authentication
        is known, resolve security requirement for endpoint and security definition for
        the component section.
        For custom authentication subclass ``OpenApiAuthenticationExtension``.
        Tz could not resolve authenticator z~. There was no OpenApiAuthenticationExtension registered for that class. Try creating one by subclassing it. Ignoring for now.)r   r   objectr   )r   get_authenticatorsrN   rO   AUTHENTICATION_WHITELISTr"   	get_matchr!   r   get_security_requirementr   r   r   extendr   r   get_security_definitionzipri   register_on_missingr'   SECURITY_SCHEMASECURITYget_permissionsr   AllowAnyIsAuthenticatedOrReadOnlyrh   SAFE_METHODS)r   authsauthenticatorschemesecurity_requirementsnamesdefinitionsr   
definitionr   permss              r   r   zAutoSchema.get_auth>  s    !YY99; !	M}.B.[.[]ab3==mLF6}7N7N6O PL M
 $*$C$CD$I!$03T:LL!67LL!67&++s+&,kk]V5S5STX5Y4Z{%+[[&2P2PQU2V{$'{$;  j11%!.>>,66)	3!	F  ((LL-667&*ii&?&?&ABBB5(LL  22e;{OgOg@gLL Cs   -H(c                 "    | j                         S r   _get_serializerr   s    r   get_request_serializerz!AutoSchema.get_request_serializert      ##%%r   c                 "    | j                         S r   r  r   s    r   r   z#AutoSchema.get_response_serializersx  r  r   c                 ,    | j                         }|dd S )r   Nr   )_tokenize_path)r   tokenized_paths     r   r~   zAutoSchema.get_tags|  s    ,,.bq!!r   c                     i S Nr   r   s    r   r   zAutoSchema.get_extensions  s    	r   c                 z   i }| j                         D ]  }t        |j                  t              r|j                  }nd|j                  i}i }|j	                         D ];  \  }}t        |t              r|||j                         <   +t        ||j                  || j                        }i }|j                  j                         }	|	r|	|d<   |j                  j                         }
|
r|
|d<   |j                  j                  d      }|r||d<   |j                  j                         }|r||d<   |j                  j                  d      |d	<   |j                  j                         }|r|j!                  t#        |             |||j                         <   > |j                  |i||j$                  <    |S )
a  
        Creates a mocked view for every callback. The given extend_schema decorator then
        specifies the expectations on the receiving end of the callback. Effectively
        simulates a sub-schema from the opposing perspective via a virtual view definition.
        ra   )rh   re   extend_schema_decoratorri   rm   rn   r   rr   rt   r   ru   )get_callbacksr   	decoratorr   r   r   r2   re   ri   r   rz   r{   r   r   r   r   r]   rM   r   )r   r   callbackmethods
path_itemsrh   r'  mocked_viewr   rm   rn   r   rt   r   s                 r   r   zAutoSchema._get_callbacks  s    **, .	@H(,,d3",,!8#5#56J%,]]_ $7!	i.1:Jv||~./!!,5!]]	 	)00@@B/:Im,%,,88:+2Ii(*11CCJO/;Im,(//==?
.8Il+)4););)P)PQZ)[	+&(//>>@
$$%Fz%RS-6
6<<>*I$7L &.]]J$?F8==!].	@` r   c                     g S r   r   r   s    r   r&  zAutoSchema.get_callbacks  r   r   c                 2   | j                         }|D cg c]  }|j                  dd       }}| j                  dk(  r| j                         rd}n'| j                  | j                  j                            }|s|j                  d       t        j                  d| j                        r|j                  d       t        j                  dk(  rdj                  |g|z         S t        j                  d	k(  rdj                  ||gz         S J d
       c c}w )r   -_r   r   rootz<drf_format_suffix\w*:\w+>	formattedPREr   zBInvalid value for OPERATION_ID_METHOD_POSITION. Allowed: PRE, POST)r   replacerh   r   method_mappingr   r   researchrf   rO   OPERATION_ID_METHOD_POSITIONjoin)r   r!  tr   s       r   ry   zAutoSchema.get_operation_id  s    ,,.7EF!!))C-FF;;%D$6$6$8F(():):)<=F!!&)992DOOD!!+.<<E88VH~566!>>&H88NfX566^^^5% Gs   Dc                      yr   r   r   s    r   r   zAutoSchema.is_deprecated  r   r   c                 6   t        j                  | j                  d| j                  t         j                        }t        j                  dd|      }|j                  d      j                  d      j                  d      }|D cg c]  }|s|	 c}S c c}w )N )r   replstringflagsz\{[\w\-]+\})r   r=  r>  /)r5  subrg   re   
IGNORECASErstriplstripsplit)r   re   r!  r9  s       r   r   zAutoSchema._tokenize_path  sx    vv$$99--	
 vvn2dCS)005;;C@)/aQ///s   BBc                 &   t        | j                  d      }g }|D ]/  }t        t        j                        }d}t        | j                  || j                  d            }|st        | j                  |      }|r|d   }n|t        d| d| d       n	 t        | j                  d	d       |k(  rt        | j                  d
|      }n|j                  d      r	|d d  d}n|}t        ||      }	| j                  |	d       }d|vr|	j                  rt        ||	      }|j)                  t+        |t,        j.                  ||             2 |S # t         j"                  $ r, t        d| d|j$                   d|j&                   d       Y ow xY w)NF)emit_warningsr<  r   r   z)could not derive type of path parameter "zv" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. <int:zP>) or annotating the parameter type with @extend_schema. Defaulting to "string".r   r   _pk_idr   rm   z" because model ".ze" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".)r   r   rm   r   )r>   r   r,   rP   r   rI   rf   r   rJ   r!   r   endswithr8   _map_model_fieldprimary_keyr   django_exceptions
FieldError
__module____name__r   r4   rT   PATH)
r   r   modelrp   variabler   rm   resolved_parametermodel_field_namemodel_fields
             r   r   z#AutoSchema._resolve_path_parameters  s   tyy>
! ,	H%l&6&67FK!>4+=+=h+G" &%A$//S[%\"!+H5?z JEEMJ OVWtyy*<dCxO+2499nh+W(!**51.6sm_C+@(+3(";ECS"TK!22;$2OF$F2{7N7N&8&L 2)..'	 O,	\  )33 CH: N!,,-Qu~~.> ?\]s   B	E<FFc                 T    | j                         sg S t        | j                  dg       S )r   filter_backends)r   r   r   r   s    r   get_filter_backendszAutoSchema.get_filter_backends!  s'    !!#Ityy"3R88r   c                     g }| j                         D ]V  }t        j                   |             }|r||j                  |       z  }4| |       j                  | j                        z  }X |S r#  )r\  r#   r  get_schema_operation_parametersr   )r   rp   filter_backendfilter_extensions       r   r   z!AutoSchema._get_filter_parameters'  sr    
"668 	ZN5??@PQ.NNtTT
n.NNtyyYY
	Z r   c                     | j                         sg S | j                         }|sg S t        j                  |      }|r|j	                  |       S |j	                  | j
                        S r#  )r   _get_paginatorr#   r  r^  r   )r   	paginatorr`  s      r   r   z%AutoSchema._get_pagination_parameters1  sc    !!#I'')	I1;;IF#CCDII<<TYYGGr   c                 \   t        |t        j                        sJ 	 t        j                         j                  |j                  t        |j                        |j                  d      \  }} |di |}|j                  |_	        |r`t        |t        j                        rF|j                  s(t        |j                        j                         |_        | j                  ||      S t        |t        j                         rZ|j"                  j                  s2t        |j                        j                         |j"                  _        | j                  ||      S |r<t        |t        j$                  t        j&                  f      s| j                  ||      S t        |t        j(                        r| j+                  |j,                  |      S t/        t        d      r3t        |t        j0                        rt3        t4        j6                        S t        |t        j8                        rt3        t4        j:                        S t/        t        |j=                               rt?        t        |j=                               }t        j                  j@                  jC                  |      }|s6tE        d|j=                          d       t3        t4        jF                        S | j                   |       |      S tI        d| d       t3        t4        jF                        S #  d }Y xY w)	Nr   )
field_nameinfomodel_classnested_depth	JSONFieldzmodel field "zY" has no mapping in ModelSerializer. It may be a deprecated field. Defaulting to "string"zcould not resolve model field "z}". Failed to resolve through serializer_field_mapping, get_internal_type(), or any override mechanism. Defaulting to "string"r   )%r   r   Fieldr   ModelSerializerbuild_fieldr   r   rU  re  PrimaryKeyRelatedFieldquerysetr<   related_modelnone_map_serializer_fieldManyRelatedFieldchild_relationReadOnlyField
ModelField
ForeignKeyrN  target_fieldr   ri  r,   rP   ANYBinaryFieldBYTEget_internal_typer   serializer_field_mappingr`   r!   r   r   )r   rY  r   	field_clsfield_kwargsr   internal_types          r   rN  zAutoSchema._map_model_field?  s   +v||444
	&1&A&A&C&O&O&++#K$5$56'--	 'P '#I| --E*//E Z{'I'IJ >>!,[-F-F!G!L!L!N--eY??{;;< ''000;K<U<U0V0[0[0]$$---eY??:ek.G.GI_I_-`a--eY??V%6%67(()A)A9MMV[)jfFVFV.W#L$4$455V%7%78#L$5$566V[::<=#FK,I,I,KLM#33LLPPQ^_I#K$A$A$C#D E\ ] ((8(899--ik9EE1+ ?) *
 $L$4$455W	Es   A*L$ $L+c                 "   | j                  ||      }t        |d      rt        |d      }t        |      rt	        |      }|Fy t        |      rt        |      }n.t        |t              r|}n| j                  t        |      |      }t        |d      }|rNt        |t        j                  ||      }| j                  j                  |       t        |j                   |      S t        ||      S t#        j$                  |      }	|	r|s|	j'                  | |      }|y |	j)                         r\t        |	j)                         t        j                  ||      }| j                  j                  |       t        |j                   |      S t        ||      S t+        |      r"| j-                  ||      }|rt        ||      S d S t/        |      r,| j1                  ||      }|rt        |j                   |      S d S t        |t2        j4                        r| j                  |j6                  |      }|j9                  dd        |j9                  dd        |j;                  d      |j;                  d      k(  r|j9                  dd        t        t=        |      |      S t        |t2        j>                  t2        j@                  f      rt        |t2        j@                        }
|
s4tC        |d      (| j                  |jD                  |      }t        ||      S tC        |dd       s|
rE|jF                  jH                  }|jJ                  g}tM        ||tO        jP                         	      }n|jF                  jH                  jR                  jT                  }nvt        |jV                  t2        j4                        rP|jV                  jV                  jX                  jH                  }|jV                  jZ                  j]                  d
      }nt_        |jV                  d      r\t_        |jV                  jX                  d      r<|jV                  jX                  jH                  }|jZ                  j]                  d
      }nSta        d|jb                  jd                   d|jf                   d       t        t	        th        jj                        |      S |
r|jm                  |jJ                         tM        ||tO        jP                         	      }to        |      r| jq                  |      }nBt        |tN        jr                        r| ju                  ||      }nJ d|jf                   d       |j9                  dd        t        ||      S t        |t2        jv                        r#t        t	        th        jj                        |      S t        |t2        jx                        r#t        t	        th        jz                        |      S t        |t2        j|                        r#t        t	        th        jz                        |      S t        |t2        j~                        rt        t=        t        |            |      S t        |t2        j                        r<t        |      }d|v r!d|v r|d   dz   |j9                  d      z   |d<   t        ||      S t        |t2        j                        rt        |j                  t              r,t        t=        t	        th        j                              |      S t        |j                        r?| j1                  |j                  |      }|rt        t=        |j                         |      S d S | j                  |j                  |      }| j                  |j                  |       t        |jf                  |j;                  d            r|j9                  dd        t        t=        |      |      S t        |t2        j                        r#t        t	        th        j                        |      S t        |t2        j                        r#t        t	        th        j                        |      S t        |t2        j                        r#t        t	        th        j                        |      S t        |t2        j                        r#t        t	        th        j                        |      S t        |t2        j                        r#t        t	        th        jz                        |      S t        |t2        j                        r#t        t	        th        j                        |      S t        |t2        j                        r#t        t	        th        jj                        |      S t        |t2        j                        rd|j                  j                         k(  rt	        th        j                        }nPd|j                  j                         k(  rt	        th        j                        }nt	        th        jj                        }t        ||      S t        |t2        j                        rtC        |dt        j                        ri t	        th        jj                        ddi|j                  |j                  dk(  rdnd|j                   dd<   |j                  rt        d      nd
}dxx   d| d |j                   d!z  cc<   n]t	        th        j                        |j                  &d"|j                  z  }j                  || d#d#d$       | j                  |       t        |      S t        |t2        j                        r7t	        th        j                        | j                  |       t        |      S t        |t2        j                        rPt	        th        j                        | j                  |       t        fd%d&D              sd'd<   t        |      S t        |t2        j                        rt        j                  r|d(k(  rt	        th        j                        nFtC        |d)t        j                        }t	        |rth        jz                  nth        jj                        t        |      S t        |t2        j                        rtC        |jV                  |j                  d       }|It        d*|jf                   d+|j                   d,       t        t	        th        jj                        |      S t        | jq                  |      |      S t_        t2        d-      r!t2        j                  t2        j                  f}nt2        j                  f}t        ||      r#t        t	        th        j                        |      S t        |t2        j                        r#t        t	        th        j                        |      S t        |t2        j                  t2        j                  f      r}t	        th        j                        t        |j                  t              s>| j                  |j                  |      d.<   | j                  |j                  d.          t        |      S t        |t2        j                        r#t        t	        th        jj                        |      S t        |t2        j                        rt+        |jV                        rCtC        tC        |jV                  jV                  dd       dd       }|jV                  j                  }n.tC        tC        |jV                  dd       dd       }|j                  }|<ta        d/|jf                   d0       t        t	        th        jj                        |      S tM        ||      }t_        |d1      r3|j                  j                  jd                  d2k(  rt	        t              }nt_        |d3      r3|j                  j                  jd                  d2k(  rt	        t              }nUto        |      r| jq                  |      }n8t        |tN        jr                        r| ju                  ||      }nJ d4| d5       t        ||      S t        |t2        j                        r)| ju                  |j                   |      }t        ||      S ta        d6| d7       t        t	        th        jj                        |      S )8Nr   field_component_namer   r   r   r  readOnlyr   rm   pk_fieldrn  )r   rL  MetarU  z*Could not derive type for under-specified z "z". The serializer has no associated model (Meta class) and this particular field has no type without a model association. Consider changing the field or adding a Meta class. Defaulting to string.zField "z3" must point to either a property or a model field.z

titleipv4ipv6coerce_to_stringr   decimalr   z^-?0?z^-?\d{0,}r   DECIMAL_SEPARATORz(?:\z\d{0,z})?$
   T)maximumminimumexclusiveMaximumexclusiveMinimumc              3   p   K   | ]-  }d t        j                  |d            cxk  xr dk  nc  / yw)i   r   iN)intr`   ).0r   contents     r   	<genexpr>z3AutoSchema._map_serializer_field.<locals>.<genexpr>Q  s/     oQT{c'++c1*=&>L*LLos   36r  r  int64r   use_urlzSerializerMethodField "z" is missing required method "z". defaulting to "string".NullBooleanFieldadditionalPropertiesz)Could not derive type for ReadOnlyField "z" because the serializer class has no associated model (Meta class). Consider using some other field like CharField(read_only=True) instead. defaulting to string._partialmethod_get_FIELD_display__partialmethod__zReadOnlyField target "z!" must be property or model fieldz$could not resolve serializer field "z". Defaulting to "string")_get_serializer_field_metar    r   r@   r,   rB   rK   r   r   rq  r9   r'   SCHEMAri   r
  r)   r   r%   r  map_serializer_fieldget_namerC   _unwrap_list_serializerrF   r   r   rr  rs  r   r`   r+   rm  SlugRelatedFieldr   r  rn  rU  
slug_fieldr7   r   	TextField_metapkparentr  sourcerE  r   r!   r   rS  re  rP   r   r   r   _map_response_type_hintrj  rN  StringRelatedFieldHyperlinkedIdentityFieldURIHyperlinkedRelatedFieldMultipleChoiceFieldr-   ChoiceField	ListFieldchildr   rx  r?   _insert_field_validatorsrG   	DateFieldDATEDateTimeFieldDATETIME	TimeFieldTIME
EmailFieldEMAILURLField	UUIDFieldUUIDDurationFieldIPAddressFieldprotocolr   IP4IP6DecimalFieldr   COERCE_DECIMAL_TO_STRINGmax_whole_digitslocalizer   decimal_placesDECIMALr]   _insert_min_max
FloatFieldDOUBLEIntegerFieldINTall	FileFieldrO   COMPONENT_SPLIT_REQUESTBINARYUPLOADED_FILES_USE_URLSerializerMethodFieldmethod_namer   BooleanFieldr  BOOLri  	DictFieldHStoreFieldOBJECT	CharFieldrt  source_attrsr  funcr   r  ru  rY  )r   r   r   bypass_extensionsmetaoverrider   r  	componentserializer_field_extensionis_slugrU  r  rY  sepvaluer  rh   boolean_field_classestargetr  s                       @r   rq  z AutoSchema._map_serializer_fieldx  s   ..ui@w'#E73HX&)(3>*84*84Hd+!33N84LiX#/7M#N #--*11! 		 11)<"9==$77"6400%D%N%Nu%U"%.?/DDT9UF~+446-3<<>*11! 		 11)<"9==$77"6400 e$11%CF06;vt,@D@ //yAI7@;y}}d3JdJ e[99://0D0DiPFJJz4(JJy$'xx&&**]*CC

=$//7>>ek@@+B^B^_` (D(DEG wuj9E33ENNIN"6400
D1=!NN00E#../F"5eVVM]M]M_"`K"'.."6"6"<"<"?"?KellK,H,HI!LL//44::E"\\0066s;FU\\62wu||?P?PRY7Z!LL--33E"\\//4FDU__E]E]D^ _!,,- .[\ ''78H8H'I4PPMM%"2"23
 2%IYIYI[\ $55kBK6..{IFm(8(8'99lmmu JJz4(vt,,e[;;</0@0@A4HHe[AAB/0@0@A4HHe[@@A/0@0@A4HHe[<<=/0B50IJDQQe[445'.F$&)@&*=&9F&BVZZP]E^&^]#vt,,e[223%++'89"#34D\EUEU4V#WY]^^$U[[1 33EKKK	MV{#3IMM#BDI`\``33EKKK--ekk6B.u/?/?GATUJJw-"#3F#;TBB e[223/0A0ABDIIe[667/0E0EFMMe[223/0A0ABDIIe[334/0B0BCTJJe[112/0@0@A4HHe[223/0A0ABDIIe[667/0@0@A4HHe[778 --//),*:*:;5>>//11),*:*:;),*:*:;vt,, e[556u0,2W2WXU-l.>.>?U9U))5$)$:$:a$?	RWRhRhQiikEl I& >C^^*%89QTCI&T#fU=Q=Q<RRW*XX&*<+?+?@))5%"8"88ENN#($)6,0,0	$  $$UG4w--e[334&|':':;G  0w--e[556&|'7'78G  0oXnoo$+!w--e[223#;;	Y@V*<+>+>?!%L4W4WX*w<+;+;LL\L\]w--e[>>?U\\5+<+<dCF~-e.>.>-? @))**DF ##3L4D4D#EtLLt;;FCTJJ ; 23%0%=%={?[?[$\!%0%=%=$?!e23/0A0ABDIIe[223/0@0@A4HHek33[5L5LMN&|':':;Gekk+<=262L2LU[[Zc2d./--ekk7CY;Z[w--e[223/0@0@A4HHe[667!%,,/(;(;VT JGUYZ22fd CWdS++}?@P@P?Q R` a
 ##3L4D4D#EtLL(7F 01))..77;OO *#. 34,,11::>RR *#.&!55f=FFLL1..vyA_ 6ug=^__uvt,, e[334**5+<+<iHFvt,,3E7:STU+L,<,<=tDDr   r   r  c                     |j                   |j                   |d<   d|v r|d= |j                  |j                  |d<   d|v r|d= y y y )Nr  r  r  r  )	max_value	min_value)r   r   r  s      r   r  zAutoSchema._insert_min_max  s^    ??&!&GI!W,./??&!&GI!W,./ - 'r   c                    t        |      }t        j                  |      }|r|s|j                  | |      }n| j	                  ||      }t        |di       }|r|j                  t        |             | j                  |||      S )Nr   )	r9   r$   r  map_serializer_map_basic_serializerr   r]   rM   _postprocess_serializer_schema)r   r   r   r  serializer_extensionr   r   s          r   r   zAutoSchema._map_serializer  s    #J/
9CCJO(9)88yIF//
IFF!*lB?
MM;JGH226:yQQr   c                 z   t         j                  s|S |j                  dg       }|j                  dg       }t        |      D ]m  }|dk(  r/||   j                  d      r|d   |= ||v r|j	                  |       |dk(  s=||   j                  d      sR|d   |= ||v s]|j	                  |       o d|v r|s|d= |S )z
        postprocess generated schema for component splitting, if enabled.
        does only apply to direct component schemas and not intermediate schemas
        like components composed of sub-component via e.g. oneOf.
        r   r   r   r  r   	writeOnly)rO   r  r`   r   remove)r   r   r   r   r   r   	prop_names          r   r  z)AutoSchema._postprocess_serializer_schema  s     $;;MZZb1
::j"-j) 	/II%*Y*?*C*CJ*O<(3(OOI.J&:i+@+D+D[+Q<(3(OOI.	/ z"r   c                    t        |t        j                        si S i }|j                  rd|d<   |j                  rd|d<   |j
                  rd|d<   t        |t        j                        rH|j                  s<t        j                  r|dk(  r'd|d<   n!t        j                  r|j                  sd|d<   |j                  |j                  t        k7  rt        |j                        st        |t        j                  t        j                  t        j                   t        j"                  f      r|j                  }n	 |j%                  |j                        }t        |t&              rt)        |      }||d<   |j*                  r8t-        |j*                  |j.                        st1        |j*                        |d	<   |j2                  rt1        |j2                        |d
<   |S #  |j                  }Y xY w)NTr  r  nullabler   r   	minLengthr   r  rm   )r   r   rj  	read_only
write_only
allow_nullr  r   rO   r  ENFORCE_NON_BLANK_FIELDSr   r   r   ru  r  rm  r  to_representationsetr   labelrG   re  r   	help_text)r   r   r   r  r   s        r   r  z%AutoSchema._get_serializer_field_meta  s   %!2!23I??#D $D#De[223E<M<M#;;	)()D%%>>()D%==$%)?QVQ^Q^H_**556600	  --,#55emmDG '3'w-%DO;;:5;;HXHXY,DM??"%eoo"6D,#mmGs   >G# #G3c                 .   t        |       t        |      }|j                  s.|j                  j                  t	        | j
                               t               }i }|j                  j                         D ]  }t        |t        j                        r|j                  t        |dg       v r8| j                  ||      }|M|j                  xs$ |j!                  d      xr t"        j$                   }|r|j'                  |j                         | j)                  ||       |j                  t        |dg       v rd|d<   t+        |      ||j                  <    t-        ||      rg }t/        ||t        |dt1        |j2                                    S )Nexclude_fieldsr  deprecate_fieldsTrt   rm   )r   r   rm   )r*   r9   contextr]   r5   r   r  r   r   r   r   HiddenFieldre  r   rq  r   r`   rO   COMPONENT_NO_READ_ONLY_REQUIREDaddr  rL   rE   r3   r:   r   )r   r   r   r   r   r   r   add_to_requireds           r   r  z AutoSchema._map_basic_serializer  sx   
+#J/
 !!%%&>tyy&IJ5
&&--/ 	<E%!8!89<
<Lb#QQ//yAF~  iJJz*g3G3g3g/g  U--.))%8<
<NPR#SS'+|$+3F+;Ju''(/	<2 !Y7H !$Z
H\H\@]^
 	
r   c           
         |j                  d      }t        |t              r|D cg c]
  }|dk7  s	| c}d   }ddd}|j                  D ]}  }|dk(  rt        |t        j                        rd|vs)d	|d<   /t        |t        j
                        rd|vsNd
|d<   Tt        |t        j                        rsd|vss|j                  j                  j                  dd      j                         }|j                  dd      }|j                  dd      j                  dd      }||d<   t        |t        j                        r ||dt        |j                         t        |t        j                        r ||dt         |j                         Kt        |t        j"                        sg|j$                  sud|vs{ddj'                  |j$                  D cg c]  }t)        j*                  |       c}      z  |d<   |dv rt        |t        j,                        r ||dt        |j                         t        |t        j.                        r ||dt         |j                         -t        |t        j0                        sI|j2                  sWd|j2                  |j4                  xs dz
  z  }	 ||dt        |	d        ||dt         |	 d       |dk(  rlt        |t        j                        r ||dt        |j                         t        |t        j                        s ||dt         |j                         |d k(  st        |t        j                        r ||d!t        |j                         It        |t        j                        se ||d"t         |j                          y c c}w c c}w )#Nr   nullr   F)	exclusivec                    t        |      r |       }| j                  |      }|
 |||      }n|}|| |<   |dv r*d|j                          }|r||k7  rd| |<   y y || v r| |= y y y )Nr  r
  T)r   r`   r  )r   r   functionr  r
  current_value	new_valueexclusive_keys           r   update_constraintz>AutoSchema._insert_field_validators.<locals>.update_constraintE  s    "JJsOM($]E:	!	#F3K,,"+CIIK= 9 M104}- 2"f,}- - -r   r>  r   emailurir   asciibackslashreplacez\xz\u00z\Z$z\A^	maxLengthr  z(?:%s)$|)integernumberr  r  r  TarraymaxItemsminItemsr  maxPropertiesminProperties)r`   r   r   r
   EmailValidatorURLValidatorRegexValidatorregexr   encodedecoder3  MaxLengthValidatorr   limit_valueMinLengthValidatormaxFileExtensionValidatorallowed_extensionsr8  r5  escapeMaxValueValidatorMinValueValidatorDecimalValidator
max_digitsr  )
r   r   r   schema_typer9  r  r   r   extnr  s
             r   r  z#AutoSchema._insert_field_validators>  s   jj( k4(&1AQ&[1A!DKIN 	." !! '	SAh&a!:!:;v-+2x(:#:#:;v-+0x(:#<#<= ."#''//"8"8BT"U"\"\"^")//%"A")//%"="E"EeS"Q,3y):#@#@A%fk3N:#@#@A%fk3N:#D#DE!J^J^ .,5^_^r^rAsVZ"))D/As8t,ty) 55a!=!=>%fiammL:#?#?@%fiammL:#>#>?ALL1<<13C3C3Hq#IJE%fietT%fiufPTU'a!>!>?%fj#q}}M:#@#@A%fj#q}}M(a!>!>?%fosAMMR:#@#@A%fosAMMRO'	S' BN Bts   
OO"Oc                    t        |d      xs t        |      j                  d      }t        |      st	        |      r| j                  t        |      d      S t        |t              r|S 	 t        |      }t!        t        |t"        j$                        r|j&                  n|      }|r||d<   |S # t        $ r5 t        d|j                   d       t        t        j                        cY S w xY w)Nr   rj   r   z*unable to resolve type hint for function "zL". Consider using a type hint or @extend_schema_field. Defaulting to string.rm   )r   r=   r`   rF   rA   rq  r9   r   r   rK   r(   r!   rS  r,   rP   r   r:   	functoolspartialr  )r   rh   hintr   rm   s        r   r  z"AutoSchema._map_response_type_hint  s    FG,Tv0F0J0J80T(4.--nT.BJOOdD!K	6&t,F %fi.?.?@FKKf
 $/F=! $ 	6<V__<M NS T $L$4$455	6s   -B2 2;C0/C0c                 D    t        | j                  dd       }|r |       S y )Npagination_class)r   r   )r   r8  s     r   rb  zAutoSchema._get_paginator  s%    "499.@$G#%%r   serializer_namec                     d| dS )N	Paginatedr   r   )r   r9  s     r   get_paginated_namezAutoSchema.get_paginated_name  s    ?+400r   c                     t        t        j                  | j                  j	                         D cg c](  }t        |t        j                        r|j                  * c}            S c c}w r#  )	r   r   fromkeysr   get_parsersrN   rO   PARSER_WHITELIST
media_type)r   r   s     r   map_parserszAutoSchema.map_parsers  sW    DMM"&))"7"7"9#
12CCD LL#
   	 #
s   -A)	attributec                    |dv sJ d }t        t        j                  | j                  j	                         D cg c]4  } ||      r*t        ||      rt        ||      j                  d      d   6 c}            S c c}w )N)rA  r   c                     t         j                  t        | t         j                        S t        | t        j
                         S r#  )rO   RENDERER_WHITELISTrN   r   r   BrowsableAPIRenderer)rs    r   use_rendererz.AutoSchema.map_renderers.<locals>.use_renderer  s8    #66B"1&:&M&MNN%a)G)GHHHr   ;r   )r   r   r>  r   get_renderersr   r   rE  )r   rC  rI  rH  s       r   r   zAutoSchema.map_renderers  s    4444	I DMMYY,,.#
A71i#8 Ay!'',Q/#
   	 #
s   9A>c                 f   | j                   }t        |      }	 t        |t              rP|j                  j
                  t        j
                  k(  r |j                         |      S |j                  |      S t        |t              ryt        t        |dd             r|j                  |      S t        t        |dd             r |j                         |      S t        |d      r|j                  S t        d       y t        d       y # t        $ r}t        d| d       Y d }~y d }~ww xY w)	N)r  get_serializerget_serializer_classserializer_classzunable to guess serializer. This is graceful fallback handling for APIViews. Consider using GenericAPIView as view base class, if view is under your control. Either way you may want to add a serializer_class (or method). Ignoring view for now.zOEncountered unknown view base class. Please report this issue. Ignoring for nowzexception raised while getting serializer. Hint: Is get_serializer_class() returning None or is get_queryset() not working without a request? Ignoring the view for now. (Exception: ))r   r5   r   r   r   rM  rN  r   r   r   r   rO  r   r   )r   r   r  excs       r   r  zAutoSchema._get_serializer  s"   yy*40	$/ >>00N4Q4QQ64446wGG**7*;;D'* GD*:DAB..w.??gd,BDIJ64446wGGT#56000p gh 	EEHEL 	s<   AD 'D 97D 1,D D 6D D 	D0D++D0c                     g S r   r   r   s    r   r   zAutoSchema.get_examples  r   r   c                 T   | j                         D cg c]  }|j                  r| }}|s;t        |      rt        |j                  dg       }nt        |      rt        |dg       }|xs g }g }||z   D ]!  }	|dk(  r|	j                  r|dk(  r|	j                  r(|	j                  s	|	|v r|nd}
n|	j                  }
|r||
k7  rQ|	j                  s
|	|v r|fnd}n#t        t        t        |	j                              }|r||vr| j                  |      rot        |d      dura|dk(  sd|cxk  rd	k  sn t        j                  r?t!        j                   |	      }	t#        |	j$                  | j'                         |      |	_        |j)                  |	       $ t+        |      S c c}w )
zP Handles examples for request/response. purposefully ignores parameter examples r   r   r   zapplication/json)200201r   FrT  300)r   r   rC   r   r  rF   response_onlyrequest_onlyrA  status_codestuplemapr   r   rO    ENABLE_LIST_MECHANICS_ON_NON_2XXcopyr0   r  rb  r   r.   )r   r   r   rA  status_codeextraser   filtered_examplesr   example_media_typeexample_status_codess               r   _get_exampleszAutoSchema._get_examples  s     $002K!!:J:JAKK !*-'
(8(8*bIz*'
JC 2&(  	.GI%'*?*?J&7+?+?%%4;v4EZL^"%,%7%7"j,>>'':AV:K~R`$',Sg6J6J-K'L${2FF "":. V4EA*e{.JU.J+LL ))G, :7==$J]J]J_aj k$$W-A 	.D ##455a Ls
   F%F%c                    | j                   dvry | j                         }d}g }t        |t              r|j	                         }n-t        | j                         t        j                  |            }|D ]  \  }}t        |t              r%|j                  |j                  |j                  }	}}nd\  }	}|	r!|dk7  r|j                  d      st        d       | j                  |||d |      }| j!                  ||      \  }
}|
|j#                  ||
||	f       ||z  } |sy d|D 
	ci c]  \  }}
}}	|t%        |
||	       c}	}}
}i}|r||d<   |S c c}	}}
}w )	N)PUTPATCHr   TNNz!application/x-www-form-urlencoded	multipartzxEncodings object on media types other than "application/x-www-form-urlencoded" or "multipart/*" have undefined behavior.r  r   )rh   r  r   r   r   r	  rB  	itertoolsrepeatrU   r   r   encoding
startswithr!   rd  _get_request_for_media_typer   r1   )r   r   request_serializerrequest_body_requiredr  media_types_iterrA  r   r   rl  r   partial_request_body_requiredr   s                r   r   zAutoSchema._get_request_body  s   ;;66!88: $ ($/1779"4#3#3#5y7G7GHZ7[\&6 	G"J
*n51;1C1CZEXEXZdZmZmhH
%/"( "EE"--k:@
 ))*iTS[\H484T4TU_aj4k1F1!
FHhGH%)FF%+	G.  >E :J( 3FHhOO
 !'<L$s   +Ec                 H  	 t        |      }t        |      r!| j                  ||      }t        |      }||fS t	        |      r| j
                  dk(  rt        j                  |      }d|_        | j                  ||      }|sy|j                  }|j                  j                  di       j                         D cg c]  \  }}|j                  d      s| c}}	|j                  j                  dg       }t        	fd|D              }||fS t        |      rt        |      }d}||fS t!        |      rt#        |      }d}||fS t%        |t&              r|}d}||fS t)        d	| j
                   d
| j*                   d       t-               }d|d<   d}||fS c c}}w )Nrg  T)NFr   r  r   c              3   &   K   | ]  }|v 
 y wr#  r   )r  reqreadonly_propss     r   r  z9AutoSchema._get_request_for_media_type.<locals>.<genexpr>]  s     '\c>(A'\s   Fz#could not resolve request body for  zN. Defaulting to generic free-form object. (Maybe annotate a Serializer class?)zUnspecified request bodyrm   )r9   rC   r  r   rF   rh   r]  r5  r   r   r   r`   r   anyr@   r,   rB   rK   r   r   r!   re   r/   )
r   r   r   r   rp  r  r   r   required_propsrv  s
            @r   rn  z&AutoSchema._get_request_for_media_typeF  s   #J/
j)11*iHF$(L!J ,,,I :&{{g% "YYz2
%)
"//
IFI"]]F (..22<DJJLaPQPUPUV`PaN '--11*bAN$''\^'\$\!& ,,,% :&%j1F$)!  ,,, 'z2&z2F$)! ,,, 
D)F$)! ,,, 5dkk]!DII; OI I ()F$>F=!$)!,,,/s   =FFr   c           	      .   | j                         }t        |      s&t        |      st        |      st	        |t
              rZ| j                  dk(  rddt        d      iiS | j                         rd| j                  |d|      iS d| j                  |d|      iS t	        |t              ri }|j                         D ]n  \  }}t	        |t              rt        |d         |d	d  }}nt        |      d }}| j                  ||||      }||v r||   d
   j                  |d
          j|||<   p |S t        d| d| j                   d| j                    d       t#        t$        j&                        }t        d      |d<   d| j                  |d|      iS )NDELETE204rm   No response bodyrU  rK  rT  r   r   r  could not resolve "" for rw  l. Expected either a serializer or some supported override mechanism. Defaulting to generic free-form object.Unspecified response body)r   rF   r@   rB   r   rV   rh   r/  r   _get_response_for_coder   r   rZ  r   r]   r!   re   r,   rP   r  )	r   r   response_serializersru   r   r   media_typescontent_responser   s	            r   r   zAutoSchema._get_response_bodiesr  s   #<<> ./12()=>.@{{h&q1C/DEFF((*t::;OQVbk:lmm4667KU^g6hii,d3I$8$>$>$@ 	7 jdE*(+DGd12h+D(+D	4+D#'#>#>z4Q\^g#h 9$dOI.556Fy6QR&6IdO	7 %&:%;6$++aPTPYPY{ [: ;
 &l&9&9:F$%&A$BF=!466vuPY6Z[[r   c                    t        |      r| j                  ||      S t        |      r"| j                  ||      }|r|j                  S d S t        |      r+| j                  |j                  |      }|rt        |      S d S J d       )NzSerializer is of unknown type.)	rA   rq  r?   r   r   rC   r  r  r+   )r   r   r   r  r   s        r   r  z"AutoSchema._unwrap_list_serializer  s    J--j)DD ,//
IFI$-9==747
+11*2B2BINF/5#F+?4?:::5r   c                    t        |t              r%|j                  |j                  |j                  }}}ndg }}t        |      }| j                  ||      }|rd|ini }|si |d|xs t        d      iS t        |      r3| j                  |j                  |      }|si |d|xs t        d      iS t        |      r6| j                  ||      }	|	si |d|xs t        d      iS |	j                  }nt        |      rt        |      }n|t!        |      rt#        |      }net        |t$              r|}d }nPt'        d| d| j(                   d| j*                   d       t        t,        j.                        }t        d	      |d<   | j1                  |      rgt3        |d
      durXd|cxk  rdk  sn t4        j6                  r:t9        |      r:t;        j<                  t?        |            r| jA                  t?        |      |      }ntC        |      }| jE                         }
|
rt        |      rt        |      rt        |j                        rtG        | jI                  | jK                  |d            tF        jL                  |
jO                  |      | jQ                  t        |      r|j                  n|d            }	| jR                  jU                  |	       |	j                  }n|
r|
jO                  |      }|s| jW                  d      }tY        | jZ                  |      }i ||D ci c]"  }|t]        || j_                  |||||            $ c}|dS c c}w )Nr<  headersrm   r}  r~  r  rw  r  r  r   FrT  rV  r   r  rA  )r  rm   )0r   rV   r   rm   r   r9   _get_response_headers_for_coder/  rC   r  r  rF   r   r   r@   r,   rB   rK   r   r!   rh   re   rP   r  r   r   rO   r\  rD   r$   r  r;   r   r+   rb  r'   r<  _get_serializer_namer  get_paginated_response_schemaget_serializer_identityri   r
  r   rH   r   r1   rd  )r   r   r^  r  r   rm   r   r  r   r  rc  rA  s               r   r  z!AutoSchema._get_response_for_code  sI   j/2##Z%;%;Z=P=P &.J %'K#J/
55k9M*19g&rSgS}k.RQ?Q=RSS
+11*2B2BINFW'W=+2VCUAVWW:&//
IFIW'W=+2VCUAVWW]]F:&%j1F&z2&z2F
D)FJ%j\}Adii[ Q, -
 &l&9&9:F$%&A$BF=! z*Z0=+--1E1f1f
 .j9.889LZ9XY--.A*.MyY)&1++-I !*-+J7=IYIY;Z-001J1J:Wa1bc*11$BB6J77,>z,J
((PZ\f		 11)<""@@H,,\:K7		;O



 #.
 	 3&&z9j+W_`  '

 
	
s   1'Mc                    i }| j                         D ]  }t        |t              s|j                  s"t        |j                  t              r&||j                  D cg c]  }t        |       c}vrbt        |j                        rt        |j                        }nHt        |j                        r'| j                  |j                  |      j                  }n|j                  }|st        d|j                   d       |j                  t        j                  t        j                   fvrt        d|j                          t#        |j                  ||j                  |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  |j0                  |j2                  |j4                  t7        |j8                        |j:                        }|d= |d= |||j                  <    |S c c}w )Nzresponse parameter z requires non-empty schemaz:incompatible location type ignored for response parameter r   r   r   )r   r   rT   r   r   r   r@   r   r,   rF   r   r   r!   r   r   HEADERCOOKIEr4   r   rm   r   r   rt   r   r   r   r   r.   r   r   )r   r^  r   r   r   r   r   parameter_types           r   r  z)AutoSchema._get_response_headers_for_code  s   557 +	4Ii)9:%%9--t4i>P>P'QdD	'QQY^^,))..9y~~.00KOO"*9>>*::TUV!!*:*A*ACSCZCZ)[[QR[R`R`Qabc1^^"++"++%11^^!))$//oo!))!))%11,Y-?-?@$//N  v&t$%3F9>>"W+	4Z M (Rs   Hc                 `    t        j                  |      }|r|j                  | |      }||S |S r#  )r$   r  get_identity)r   r   r   r  identitys        r   r  z"AutoSchema.get_serializer_identity2  s9    9CCJO+88yIH#r   c                 .    |j                   j                  S r   )r   rS  )r   r   r   s      r   get_serializer_namezAutoSchema.get_serializer_name;  s    ##,,,r   c           	      n   t        j                  |      }|r+|s) |j                  di t        |j                  | |      }nd }|r|}nt	        |d      rt        |d      }nht        t        |dd       dd       |j                  j                  }n9t        |      r| j                  |j                  |      S | j                  ||      }|sJ |j                  d      r|d d }t        ||      rd|z   }|dk(  rt        j                   r|d	z   }t#        j$                  d
|      st'        d| d       |S )N)auto_schemar   component_namer  ref_name
SerializeriPatchedr   Requestz	^[\w.-]+$zComponent name "z" contains illegal characters. Only "A-Z a-z 0-9 - . _" are allowed. Furthermore, "-" and "." are discoursed due to potential tooling issues. This likely leads to an invalid schema.r   )r$   r  r  r6   r    r   r   r  r  rC   r  r  r  rM  rE   rO   r  r5  matchr!   )r   r   r   r  r  custom_namer   s          r   r  zAutoSchema._get_serializer_name?  sF   9CCJO(97.77 :T$--49; K KD*&67
,<=DWZ6
DIU ??++D
+,,Z-=-=yII++J	BDt==&:D Y7t#D	!&:&R&R)#Dxxd+"4& )B C r   c           	         t        |       t        |      }t        |j                        5  t	        | j                  |||      t        j                  | j                  ||            }|| j                  v r| j                  |   cd d d        S | j                  j                  |       | j                  |||      |_        |j                   xsL |j                  j                  d      dk(  xr, |j                  j                  d       xr d|j                  v}|r"| j                  |= t	        d d       cd d d        S |cd d d        S # 1 sw Y   y xY w)N)r   r   r  r   r  r   r  )r*   r9   r   r   r'   r  r  r  ri   registerr   r   r`   )r   r   r   r  r  discard_components         r   r   zAutoSchema.resolve_serializerj  sM    	 
+#J/
z334 	)..z9FWX&--33J	JI
 DMM)}}Y/	 	 MM""9-#33J	K\]I $$$  $$((0H< G%,,00>>G.i6F6FF  !MM),(t43	 	4 5	 	 	s   AEB(EEEr#  )r   )Frh  )r   )Nr   )IrS  rR  __qualname__r4  r   r&   r   rW   r   r   rx   rX   r   r   r   r   rT   r   r   r   r}   rz   r{   r   r|   r   r   r  r   r~   r   r   rR   r&  ry   r   r   r   r   r\  r   r   rN  rq  r  r   r  r  r  r  r  rb  r<  rB  r   r  rS   r   rd  r   rn  rQ   r   r  r  r  r  r   r  r  r  r'   r   r   r   r   rZ   rZ   5   s=   !N== = 	=
 = (= 
+	=~T (A T Bd e4Do4U.V)W AF
[(9 
(-k!2 (-T& &Xc] !HT#s(^$< !8E$sCx.#2E,F#G 4${+ 4l&(A &&(?*C &"$s) " 8ttO4 _# _0t 0S	 02h9T#Y 9H76rtEl	0S 0; 04 0R6.`*
X?SB21# 1# 1T#Y s tCy   Dd>2 46l1f*-X$\i $\ $\L
;Y 
;8T_K` 
;[
z/S^ /bY 3 -k.D.D -QZ -_b -)VY )X X] - :C 	 r   rZ   )vr]  r4  rj  r5  collectionsr   typingr   r   r   r   r   r   django.corer	   rP  r
   	django.dbr   django.utils.formatsr   django.utils.translationr   r/  rest_frameworkr   r   r   rest_framework.fieldsr   r   rest_framework.genericsr   r   r   rest_framework.mixinsr   !rest_framework.schemas.inspectorsr   rest_framework.schemas.utilsr   rest_framework.settingsr   rest_framework.utils.model_metar   rest_framework.viewsr   drf_spectacular.authenticationdrf_spectaculardrf_spectacular.serializersdrf_spectacular.contribdrf_spectacular.drainager   r   r   r    r!   drf_spectacular.extensionsr"   r#   r$   r%   drf_spectacular.plumbingr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   drf_spectacular.settingsrO   drf_spectacular.typesrP   drf_spectacular.utilsrQ   rR   rS   rT   rU   rV   rW   rX   rZ   r   r   r   <module>r     s       	 # 3 3  7 "  + 6 > > : T T 0 ; ; 0 : ( % " % _ _            : .  U Ur   