
    R1iL*                    T   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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-Z.d dl/Z.d dl0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe d dlfmgZg d dlhmiZi d dljmkZkmlZlmmZmmnZnmoZompZpmqZqmrZr  G d de$      Zsy)    N)defaultdict)AnyDictListOptionalUnion)
exceptions)
validators)models)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)rh   rd   re   rf   upperrg   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\   rL   _get_callbacks)selfrd   re   rf   rg   rh   	operationrl   rm   external_docsro   rp   request_bodyauthrs   
extensionsru   s                    [/home/cursorai/projects/iching/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   rw   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minrB   r?   hasattrviewr   rg   r   r   lookup_url_kwarglookup_fielduritemplate	variablesrd   )r   r   codesr   s        r   _is_list_viewzAutoSchema._is_list_view   s    668Jj$'J6@6F6F6HI6H74#d)Q,6HJ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)rg   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requiredrl   enumpatternrs   styleexplodedefaultallow_blankexamplesr   request
propertiesrl   r   Tr   )r   r   rl   r   r   r   z'could not resolve parameter annotation z. Skipping.)(r   r   rS   responser?   typer+   r>   resolve_serializerrefr   r    r   manyr*   excluder   r3   r   rl   r   r   rs   r   r   r   r   r-   r   r   r8   _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7I)%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 7S >ykUV} 8~  % % $%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appendr3   r+   rO   STRrS   r   )r   ro   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   )ro   ps     r   dict_helperz/AutoSchema._get_parameters.<locals>.dict_helper   s,    5?@ZQvY$(!+Z@@@s   rd   r   )keyc                     | d   S )Nr   r   )r   s    r   <lambda>z,AutoSchema._get_parameters.<locals>.<lambda>#  s    QvYr   )r   r   r   rd   _resolve_path_parameters_get_filter_parameters_get_pagination_parametersr   r   r   r   get_examplesparameter_onlyr   
setdefaultr\   r-   callablerN   SORT_OPERATION_PARAMETERSsortedvalues)r   r   override_parametersvpath_variablesro   r   r   examples_by_keyexampler   s              r   r|   zAutoSchema._get_parameters   s   	A #??A #,,TYY7
7!Av;Na;aA7 	 

$77GH
$5578
 $99;<
 $5578	

 2779NC *$"3"+
3 : &d+((*G%% 6 67>>wG + -224MCj 3**:r:3
+223Fx3PQ 5
 (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   rg   lowerr9   	__class__)r   action_or_methodview_doc
action_docs       r   ry   zAutoSchema.get_description'  sZ    "499gdii4;;K\K\K^._aef499../-.
%X%r   c                      yr   Nr   r   s    r   rz   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_docs2  s+    ..0mS)=))  r   c                      yr   r   r   s    r   r   zAutoSchema.get_external_docs9  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_authenticatorsrM   rN   AUTHENTICATION_WHITELISTr!   	get_matchr    r   get_security_requirementr   r   r   extendr   r   get_security_definitionziprh   register_on_missingr&   SECURITY_SCHEMASECURITYget_permissionsr   AllowAnyIsAuthenticatedOrReadOnlyrg   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&A&A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_serializers      ##%%r   c                 "    | j                         S r   r  r   s    r   r   z#AutoSchema.get_response_serializersw  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.
        r`   )rg   rd   extend_schema_decoratorrh   rl   rm   r   rq   rs   r   rt   )get_callbacksr   	decoratorr   r   r   r1   rd   rh   r   ry   rz   r~   r   r   r   r\   rL   r   )r   r   callbackmethods
path_itemsrg   r&  mocked_viewr   rl   rm   r   rs   r   s                 r   r   zAutoSchema._get_callbacks  s    **,H(,,d3",,!8#5#56J%,]]_!	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 &5L &.]]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  replacerg   r   method_mappingr   r   researchre   rN   OPERATION_ID_METHOD_POSITIONjoin)r   r   tr   s       r   rx   zAutoSchema.get_operation_id  s    ,,.7EF~!!))C-~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=  /)r4  subrf   rd   
IGNORECASErstriplstripsplit)r   rd   r   r8  s       r   r  zAutoSchema._tokenize_path  s|    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   rl   z" because model ".ze" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".)r   r   rl   r   )r=   r   r+   rO   r   rH   re   r   rI   r    r   endswithr7   _map_model_fieldprimary_keyr   django_exceptions
FieldError
__module____name__r   r3   rS   PATH)
r   r   modelro   variabler   rl   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   ro   filter_backendfilter_extensions       r   r   z!AutoSchema._get_filter_parameters&  sk    
"668N5??@PQ.NNtTT
n.NNtyyYY
 9 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_parameters0  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   rT  rd  PrimaryKeyRelatedFieldquerysetr;   related_modelnone_map_serializer_fieldManyRelatedFieldchild_relationReadOnlyField
ModelField
ForeignKeyrM  target_fieldr   rh  r+   rO   ANYBinaryFieldBYTEget_internal_typer   serializer_field_mappingr_   r    r   r   )r   rX  r   	field_clsfield_kwargsr   internal_types          r   rM  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                 H!   | 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                        rx| j                  |j6                  |      }|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<|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                        rtC        |dt        j                        rLi t	        th        jj                        ddi|j                  r~d|j                   d|j                   dd<   n]t	        th        j                        |j                  r&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                        rpt+        |jV                        rCtC        tC        |jV                  jV                  d
d       d(d       }|jV                  j                  }n.tC        tC        |jV                  d
d       d(d       }|j                  }|<ta        d)|jf                   d*       t        t	        th        jj                        |      S tM        ||      }t_        |d+      r3|j                  j                  jd                  d,k(  rt	        t              }nUto        |      r| jq                  |      }n8t        |tN        jr                        r| ju                  ||      }nJ d-| d.       t        ||      S t        |t2        j                        r(| ju                  |j                  |      }t        ||      S ta        d/| d0       t        t	        th        jj                        |      S )1Nr   field_component_namer   r   r   r  readOnlyrl   pk_fieldrm  )r   rK  Metaz*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   decimalz^-?\d{0,z}(?:\.\d{0,z})?$r   
   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>M  s2     oXnQT{c'++c1*=&>L*LLXns   36r  r  int64r   use_urlzSerializerMethodField "z" is missing required method "z". defaulting to "string".NullBooleanFieldadditionalPropertiesrT  z)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_displayz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+   rA   rJ   r   r   rp  r8   r&   SCHEMArh   r	  r(   r   r$   r  map_serializer_fieldget_namerB   _unwrap_list_serializerrE   r   r   rq  rr  r   r_   r*   rl  SlugRelatedFieldr   r  rm  rT  
slug_fieldr6   r   	TextField_metapkparentr  sourcerD  r   r    r   rR  rd  rO   r   r   r   _map_response_type_hintri  rM  StringRelatedFieldHyperlinkedIdentityFieldURIHyperlinkedRelatedFieldMultipleChoiceFieldr,   ChoiceField	ListFieldchildr   rw  r>   _insert_field_validatorsrF   	DateFieldDATEDateTimeFieldDATETIME	TimeFieldTIME
EmailFieldEMAILURLField	UUIDFieldUUIDDurationFieldIPAddressFieldprotocolr   IP4IP6DecimalFieldr   COERCE_DECIMAL_TO_STRINGmax_whole_digitsdecimal_placesDECIMALr\   _insert_min_max
FloatFieldDOUBLEIntegerFieldINTall	FileFieldrN   COMPONENT_SPLIT_REQUESTBINARYUPLOADED_FILES_USE_URLSerializerMethodFieldmethod_namer   BooleanFieldr  BOOLrh  	DictFieldHStoreFieldOBJECT	CharFieldrs  source_attrsr  funcr   rt  rX  )r   r   r   bypass_extensionsmetaoverrider   r  	componentserializer_field_extensionis_slugrT  r  rX  valuer  rg   boolean_field_classestargetr  s                      @r   rp  z AutoSchema._map_serializer_fieldw  sC   ..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(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2!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))$U%;%;$< ='',';';&<EC I&
 +<+?+?@))%"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 *#.&!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   )	r8   r#   r  map_serializer_map_basic_serializerr   r\   rL   _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)rN   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  rl   )r   r   ri  	read_only
write_only
allow_nullr  r   rN   r  ENFORCE_NON_BLANK_FIELDSr   r   r   rt  r  rl  r  to_representationsetr   labelrF   rd  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/        ||t1        |j2                              S )Nexclude_fieldsr  deprecate_fieldsTrs   )r   r   rl   )r)   r8   contextr\   r4   r   r  r   r   r   r   HiddenFieldrd  r   rp  r   r_   rN   COMPONENT_NO_READ_ONLY_REQUIREDaddr  rK   rD   r2   r9   r   )r   r   r   r   r   r   r   add_to_requireds           r   r  z AutoSchema._map_basic_serializer  sj   
+#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''(/ 02 !Y7H !
 4 45
 	
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_constraint;  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decoder2  MaxLengthValidatorr   limit_valueMinLengthValidatormaxFileExtensionValidatorallowed_extensionsr7  r4  escapeMaxValueValidatorMinValueValidatorDecimalValidator
max_digitsr  )
r   r   r   schema_typer8  r
  r   r   extnr  s
             r   r  z#AutoSchema._insert_field_validators4  s   jj( k4(&1AkQ&[1kA!DKIN 	." !!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^rAs^rVZ"))D/^rAs8t,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 "' 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   ri   r   z*unable to resolve type hint for function "zL". Consider using a type hint or @extend_schema_field. Defaulting to string.rl   )r   r<   r_   rE   r@   rp  r8   r   r   rJ   r'   r    rR  r+   rO   r   r9   	functoolspartialr  )r   rg   hintr   rl   s        r   r  z"AutoSchema._map_response_type_hintu  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   r2  s     r   ra  zAutoSchema._get_paginator  s%    "499.@$G#%%r   serializer_namec                     d| dS )N	Paginatedr   r   )r   r3  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_parsersrM   rN   PARSER_WHITELIST
media_type)r   r   s     r   map_parserszAutoSchema.map_parsers  s\    DMM"&))"7"7"9#
"9Q12CCD LL"9#
   	 #
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)r;  r   c                     t         j                  t        | t         j                        S t        | t        j
                         S r"  )rN   RENDERER_WHITELISTrM   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   r8  r   get_renderersr   r   rD  )r   r=  rC  rB  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   r4   r   r   r   rG  rH  r   r   r   r   rI  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   FrN  300)r   r   rB   r   r  rE   response_onlyrequest_onlyr;  status_codestuplemapr   r   rN    ENABLE_LIST_MECHANICS_ON_NON_2XXcopyr/   r  ra  r   r-   )r   r   r   r;  status_codeextraser   filtered_examplesr   example_media_typeexample_status_codess               r   _get_exampleszAutoSchema._get_examples  s     $002K2!!:J:JA2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   )rg   r  r   r   r   r  r<  	itertoolsrepeatrT   r   r   encoding
startswithr    r^  _get_request_for_media_typer   r0   )r   r   request_serializerrequest_body_requiredr  media_types_iterr;  r   r   rf  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"J
*n51;1C1CZEXEXZdZmZmhH
%/"( "EE"--k:@
 ))*iTS[\H484T4TU_aj4k1F1!
FHhGH%)FF%+ '7.  >E>E:J( 3FHhOO>E
 !'<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 )Nra  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  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 bodyrl   )r8   rB   r  r   rE   rg   rW  r/  r   r   r   r_   r   anyr?   r+   rA   rJ   r   r   r    rd   r.   )
r   r   r   r   rj  r  r   r   required_propsrp  s
            @r   rh  z&AutoSchema._get_request_for_media_type<  s   #J/
j)11*iHF$(L!J ,,,I :&{{g% "YYz2
%)
"//
IFI"]]F (..22<DJJLLdaPQPUPUV`PaL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204rl   No response bodyrO  rJ  rN  r   r   r  could not resolve "" for rq  l. Expected either a serializer or some supported override mechanism. Defaulting to generic free-form object.Unspecified response body)r   rE   r?   rA   r   rU   rg   r.  r   _get_response_for_coder   r   rT  r   r\   r    rd   r+   rO   r  )	r   r   response_serializersrt   r   r   media_typescontent_responser   s	            r   r   zAutoSchema._get_response_bodiesh  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$>$>$@ jdE*(+DGd12h+D(+D	4+D#'#>#>z4Q\^g#h 9$dOI.556Fy6QR&6IdO %A %&:%;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.)	r@   rp  r>   r   r   rB   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;  headersrl   rw  rx  ry  rq  rz  r{  r   FrN  rP  r   r  r;  )r  rl   )0r   rU   r   rl   r   r8   _get_response_headers_for_coder.  rB   r  r  rE   r   r   r?   r+   rA   rJ   r   r    rg   rd   rO   r  r   r   rN   rV  rC   r#   r  r:   r   r*   ra  r&   r6  _get_serializer_namer  get_paginated_response_schemaget_serializer_identityrh   r	  r   rG   r   r0   r^  )r   r   rX  r~  r   rl   r   r  r   r  rb  r;  s               r   r|  z!AutoSchema._get_response_for_code  sP   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



 #.
 #.J	 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   rS   r   r   r   r?   r   r+   rE   r   r   r    r   r   HEADERCOOKIEr3   r   rl   r   r   rs   r   r   r   r   r-   r   r   )r   rX  r   r   r   r   r   parameter_types           r   r  z)AutoSchema._get_response_headers_for_code  s   557Ii)9:%%9--t4i>P>P'Q>PdD	>P'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 8Z 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_identity(  s9    9CCJO+88yIH#r   c                 .    |j                   j                  S r   )r   rR  )r   r   r   s      r   get_serializer_namezAutoSchema.get_serializer_name1  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  r5   r   r   r   r  r  rB   r  r  r  rL  rD   rN   r  r4  matchr    )r   r   r   r  r  custom_namer   s          r   r  zAutoSchema._get_serializer_name5  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)   r8   r   r   r&   r  r  r  rh   registerr   r   r_   )r   r   r   r  r  discard_components         r   r   zAutoSchema.resolve_serializer`  s@    	 
+#J/
z334)..z9FWX&--33J	JI
 DMM)}}Y/ 54 MM""9-#33J	K\]I $$$  $$((0H< G%,,00>>G.i6F6FF  !MM),(t43 544 5 544s   AEB(EEEr"  )r   )Frb  )r   )Nr   )IrR  rQ  __qualname__r3  r   r%   r   rV   r   r   rw   rW   r   r   r   r   rS   r   r   r   r|   ry   rz   r   r{   r   r   r  r   r}   r   r   rQ   r%  rx   r   r  r   r   r[  r   r   rM  rp  r  r   r  r  r  r  r  ra  r6  r<  r   r  rR   r   r^  r~   rh  rP   r   r  r|  r  r  r   r  r  r  r&   r   r   r   r   rY   rY   4   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kEZ	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   rY   )trW  r.  rd  r4  collectionsr   typingr   r   r   r   r   r   django.corer	   rO  r
   	django.dbr   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.   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   drf_spectacular.settingsrN   drf_spectacular.typesrO   drf_spectacular.utilsrP   rQ   rR   rS   rT   rU   rV   rW   rY   r   r   r   <module>r     s       	 # 3 3  7 "  6 > > : T T 0 ; ; 0 : ( % " % _ _            : .  L Lr   