
    <%i              	       	   U d dl Z d dlZd dlZd dlZd dlZd dlZ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 d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ ej<                  dk\  rd dlmZ nd dl mZ d dl!Z!d dl"Z"d d	l#m$Z$ d d
l%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dl?mAZB d dlCmDZDmEZEmFZFmGZGmHZH d dlImJZJ d dlKmLZL d dlMmNZN d dlOmPZP d dlQmRZR d dlSmTZT d dlUmVZVmWZW d dl"mXZX d dlYmZZZm[Z[m\Z\m]Z] d dl^m_Z_ d dl`maZambZbmcZcmdZdmeZe d d lfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZn 	 d d!lompZp  ered$      reej                  fZteed%f   eud&<   nefZtd'Zveed%f   eud(<   d'Zweed%f   eud)<   d'Zxeed%f   eud*<   ej<                  d+k\  rd d,lmyZz d d-lm{Z| evezfz  Zvewe|fz  Zwej<                  d.k\  rd d/lm}Z} exe}fz  Zx	 d d,l myZ~ d d-l m{Z eve~fz  Zvewefz  Zwej<                  d+k\  rejx                  e<fZne<fZ G d0 d1      Z G d2 d3e      Zd4efd5Zd6 Zdd4een   fd7Zd8ed4eek   fd9Zd8efd:Zd4efd;Zd8ed4een   fd<Zd8ed4eej   fd=Zdd8ed4eee   fd>Zd4efd?Zd@edAed4efdBZddCZeZdD        ZddEZd4efdFZd4eeef   fdGZeZdH        ZdI ZdJ Zd8eeeedf   d4eem   fdKZddLemd4emfdMZ	 	 	 ddNeem   dOee   d4emfdPZdd4emfdQZdReeg   d4emfdSZ	 	 	 	 	 	 	 	 	 	 	 ddTedLemdUeld4emfdVZd4emfdWZd4efdXZddYZd4emfdZZdLemd4emfd[ZdLemd\emd4emfd]Zd^ee   fd_Zd` ZddaZdb Zdc Z G dd de      Z G df dg      Z G dh di      Z edjdkl      Z G dm dkee   en      Zdoed4efdpZdq Z ejd                         drefds       Zdted4efduZdved4efdwZdx Zdy Zd4efdzZd4efd{Zd| Zd}ee   d4ee   fd~Zd^ed4eeef   fdZeZd        Zd Zd Zd Zd Zd Zd Zd4efdZded4efdZd Zd Zd4efdZd Zdd8edeeee         d4efdZded^efdZdefdZd Zd4ej*                  eef   fdZdeei   defdZy# eq$ r  G d" d#      ZpY 'w xY w# eq$ r Y w xY w)    N)ABCMeta)OrderedDictdefaultdict)Decimal)Enum)AnyDefaultDictDictGenericListOptionalSequenceTupleTypeTypeVarUnion)   
   )	TypeGuard)apps)
LOOKUP_SEP)ForwardManyToOneDescriptorManyToManyDescriptorReverseManyToOneDescriptorReverseOneToOneDescriptor)ForeignObjectRel)Query)get_converters)_PATH_PARAMETER_COMPONENT_RERegexPatternResolver404RoutePattern
URLPatternURLResolverget_resolver)Promisecached_property)import_string)get_language)gettext_lazy)
exceptionsfieldsmixinsserializers
versioning)unicode_http_header)empty)api_settings)APIRequestFactory)JSONEncoder)
_MediaType)
ReturnDict
ReturnList)URITemplate)cacheerrorget_overridewarn)spectacular_settings)DJANGO_PATH_CONVERTER_MAPPINGOPENAPI_TYPE_MAPPINGPYTHON_TYPE_MAPPINGOpenApiTypes_KnownPythonTypes)OpenApiExampleOpenApiParameterOpenApiWebhook
_FieldType_ListSerializerType_ParameterLocationType_SchemaType_SerializerType)Choicesc                       e Zd Zy)rK   N__name__
__module____qualname__     P/usr/local/footviz/venv/lib/python3.12/site-packages/drf_spectacular/plumbing.pyrK   rK   C   s    rR   rK   	UnionType.UNION_TYPESrQ   LITERAL_TYPESTYPED_DICT_META_TYPESTYPE_ALIAS_TYPESr      )Literal)_TypedDictMeta)r      )TypeAliasTypec                       e Zd Zy)	_SentinelNrM   rQ   rR   rS   r`   r`   h       rR   r`   c                       e Zd Zy)UnableToProceedErrorNrM   rQ   rR   rS   rc   rc   l   ra   rR   rc   returnc                 H    t        j                  |       r| S | j                  S N)inspectisclass	__class__objs    rS   	get_classrl   p   s    //#&39CMM9rR   c                     t        j                  |       s| S t        | t        j                  t
        j                  f      r |        S | S rf   )rg   rh   
issubclassr.   BaseSerializerr,   Field)serializer_or_fields    rS   force_instancerr   t   s>    ??./""	'+*D*Dfll)S	T"$$""rR   c                     ddl m} t        t        |       t        j
                        xs t        |j                  |             xr | S )Nr   )OpenApiSerializerExtension)drf_spectacular.extensionsrt   
isinstancerr   r.   ro   bool	get_match)rk   strictrt   s      rS   is_serializerrz   }   s@    E>#&(B(BC 	L+55c:;JF
rR   rk   c                 H    t        t        |       t        j                        S rf   )rv   rr   r.   ListSerializerrj   s    rS   is_list_serializerr}      s    nS);+E+EFFrR   c                 h    t        |       rt        |       S  t        |       d| j                        S )NT)manycontext)r}   rr   rl   r   rj   s    rS   get_list_serializerr      s.    "4S"9>#m~y~SWadalal?mmrR   c                     t        | d      xr8 t        t        |             j                  t        j
                  j                  uS )NT)ry   )rz   rl   r   to_representationr.   r|   rj   s    rS   is_list_serializer_customizedr      s>    c$' 	<)#./AA));;<rR   c                 4    t        |       xr t        |        S rf   )rz   r}   rj   s    rS   is_basic_serializerr      s    =&8&="==rR   c                 d    t        t        |       t        j                        xr t	        |        S rf   )rv   rr   r,   rp   rz   rj   s    rS   is_fieldr      s'     nS)6<<8SsAS=SSrR   c                     t        | t        j                  j                        sy|s| | t        j
                  u ry| t               v xs | t        v S NF)rv   collectionsabcHashablerA   NONEget_openapi_type_mappingr@   )rk   
allow_nones     rS   is_basic_typer      sJ    c;??3343;#1B1B*B*,,J7J0JJrR   c                     t        t        j                  xr7 t        | dd       xr( t        | dd        xr t        j                  xr |dk(         S )Npartial	read_onlyresponse)rw   r=   COMPONENT_SPLIT_PATCHgetattrCOMPONENT_SPLIT_REQUEST)
serializer	directions     rS   is_patched_serializerr      s]    22 	[J	40	[
K66	[ &==Y)zBYZ	 rR   abc                    | xs dj                         j                         j                  dd      j                  dd      } |xs dj                         j                         j                  dd      j                  dd      }| |k(  S )N  _-)striplowerreplace)r   r   s     rS   is_trivial_string_variationr      sq    	
b!))#s3;;CEA	
b!))#s3;;CEA6MrR   c                 0    t        |       sJ d|  d       y )Nz\internal assumption violated because we expected a basic serializer here and instead got a "z". This may be the result of another app doing some unexpected magic or an invalid internal call. Feel free to report this as a bug at https://github.com/tfranzel/drf-spectacular/issues)r   )r   s    rS   assert_basic_serializerr      s-    z* $ &I	J*rR   c                  >   ddl m} m}m} t        t
        t        |j                  gt        t              D cg c]$  }|j                  d      st        t        |      & c}t        |      D cg c]   }|j                  d      st        ||      " c}t        |       D cg c]   }|j                  d      st        | |      " c}t        t              D cg c]$  }|j                  d      st        t        |      & c}S c c}w c c}w c c}w c c}w )Nr   )genericsviewsviewsets
SerializerViewSetAPIViewMixin)rest_frameworkr   r   r   objectdictr   r   dirr.   endswithr   r-   )r   r   r   cs       rS   get_lib_doc_excludesr      s    
 98		
 ,/{+;	Xaqzz,?W'+q
!	X	 ),H	O1I9N'(A
	O	 ),H	O1I9N'(A
	O	 '*&k	IQZZ5H'&!
	I	 	
 
Y	O	O	Is/   DD0DD%D<DD5Dc                     t        t        | dd      dd      }||S 	 | j                         j                  S # t        $ r }|rt	        d| d       Y d}~yY d}~yd}~ww xY w)z
    obtain model from view via view's queryset. try safer view attribute first
    before going through get_queryset(), which may perform arbitrary operations.
    querysetNmodela  Failed to obtain model through view's queryset due to raised exception. Prevent this either by setting "queryset = Model.objects.none()" on the view, checking for "getattr(self, "swagger_fake_view", False)" in get_queryset() or by simply using @extend_schema. (Exception: ))r   get_querysetr   	Exceptionr<   )viewemit_warningsr   excs       rS   get_view_modelr      s~    
 GD*d3WdCE	  "((( Q RUPUUVX  s   8 	A!AA!c                 x    dt         dt         fd} yt        j                         s |t        j                         xs d      S d t	         fdt        j                         D              } j                  d| D ]5  }|j                  s |t        j                  |j                              c S  y)zR get doc string with fallback on obj's base classes (ignoring DRF documentation). docrd   c                 l    dj                  d | j                         j                  d      D              S )N
c              3   <   K   | ]  }|j                           y wrf   )rstrip).0lines     rS   	<genexpr>z0get_doc.<locals>.post_cleanup.<locals>.<genexpr>   s     L4L   )joinr   split)r   s    rS   post_cleanupzget_doc.<locals>.post_cleanup   s(    yyL3::<3E3Ed3KLLLrR   Nr   c                 Z    	 | j                  |      S # t        $ r t        |       cY S w xY wrf   )index
ValueErrorlen)lstitems     rS   
safe_indexzget_doc.<locals>.safe_index   s-    	99T?" 	s8O	s    **c              3   D   K   | ]  } j                   |        y wrf   )__mro__)r   r   rk   r   s     rS   r   zget_doc.<locals>.<genexpr>   s!      '(
3;;"s    )
strrg   rh   getdocminr=   GET_LIB_DOC_EXCLUDESr   __doc__cleandoc)rk   r   lib_barrierclsr   s   `   @rS   get_docr      s    M# M# M {??3GNN3/5266  ,@,U,U,W K {{<K( ?;; 0 0 =>>? rR   c                 x    t        | t        j                        r| j                  } t	        j
                  |       S )z: unpack wrapped partial object and use actual func object )rv   	functoolsr   functypingget_type_hintsrj   s    rS   r   r     s,    #y(()hh  %%rR   c                  F    i t         t        j                  t               iS rf   )r?   rA   OBJECTbuild_generic_typerQ   rR   rS   r   r   	  s(    
/1 rR   c                     t        | t        j                        s*t        d| j                   dt        j                   d       t        | t        j                        S )Nz&Failed to obtain queryset from model "z" because manager "zS" was not found. You may need to change the DEFAULT_QUERY_MANAGER setting. bailing.)hasattrr=   DEFAULT_QUERY_MANAGERr:   rN   r   )r   s    rS   get_managerr     s[    5.DDE4U^^4D E$::; <IJ	

 5.DDEErR   c                  d    t         j                  ddiS t         j                  dk(  rdddS di dS )Ntyper   rw   T)r   additionalProperties)r=   GENERIC_ADDITIONAL_PROPERTIESrQ   rR   rS   r   r     s=    99A!!		;	;v	E $?? "==rR   c                 
   t               }| t        |       | t        j                  u ry| |v rt	        ||          S | t
        v rt	        |t
        |             S t        d|  d       t	        |t        j                           S )zW
    resolve either enum or actual type and yield schema template for modification
    Nzcould not resolve type for "z". defaulting to "string")r   r   rA   r   r   r@   r<   STR)rk   openapi_type_mappings     rS   build_basic_typer   $  s     45
{d3i'3,2C2C+C	$	$(-..	#	#()<S)ABCC+C50IJK()9)9:;;rR   schemac                 ,    d| d} ||| d<   ||| d<   | S )Narray)r   items	minLength	maxLengthrQ   )r   
min_length
max_lengths      rS   build_array_typer   4  s1    /F({({MrR   
propertiesdescriptionc                     ddi}|r|j                         |d<   | r| |d<   d|v r|j                  d      |d<   |rt        |      |d<   |j                  |       |S )Nr   r   r   r   r   required)r   popsortedupdate)r   r  r   kwargsr   s        rS   build_object_typer  =  sq     "8,F + 1 1 3})|')/4J)K%&#H-z
MM&MrR   c                 *    d| i}|r||d<   |r||d<   |S )Nr   examplesencodingrQ   )r   r  r	  media_type_objects       rS   build_media_type_objectr  P  s/    !6*(0*%(0*%rR   r  c                    i }| D ]  }t        j                  |j                  j                  dd            }i }|j                  t
        ur|j                  |d<   |j                  r|j                  |d<   |j                  r|j                  |d<   n||j                  k7  r|j                  |d<   |j                  r|j                  |d<   |||<    |S )Nr   r   valueexternalValuesummaryr   )	
inflectioncamelizenamer   r  r1   external_valuer  r   )r  r   examplenormalized_name
sub_schemas        rS   build_examples_listr  Y  s    F -$--gll.B.B3.LM
==%")--Jw!!*1*@*@J'??$+OOJy!,$+LLJy!(/(;(;J}%",- MrR   r  locationc                    ddg}|t         j                  k(  r|ddgz  }|| |j                         D ci c]  \  }}||vs|| c}}d}|r||d<   |s|dk(  rd|d	<   |rd|d
<   |||d<   |	|	|d<   |rI|d   j                  d      dk(  rt	        |t
              |d   d   d<   nt	        |t
              |d   d<   |+|d   j                  d      dk(  r||d   d   d<   n||d   d<   |
d|vr|
|d   d<   |s2|d   j                  d      dk(  r|d   j                  dd      |d   d<   |r||d<   |r|j                  t        |             |S c c}}w )NreadOnly	writeOnlynullabledefault)inr  r   r   pathTr  
deprecatedexplodestyler   r   r   )keyr   enumpatternstringr      r  )rD   PATHr   getr  r   r  !sanitize_specification_extensions)r  r   r  r  r   r$  r%  r   r!  r"  r  allow_blankr  
extensionsirrelevant_field_metakvs                    rS   build_parameter_typer0  l  s     (5#(((*i!88$*LLNUDAqa?T6T1a4UF
  +}8v%!z#|#yw('7206t0EF8W%f-'-d'<F8V$('723:F8W%i0*1F8Y'y0EE&-x#6(+//78C(.x(8(<(<[!(Lx%%z7
CDMA Vs   E
E
c                    t        t        j                  | j                              }| j                  rd|vr|j                  d       |sd }nVt        d |D              rd}nAt        d |D              rd}n,t        d |D              rd}nt        d |D              rd	}nd }| j                  rd |vr|j                  d        d
|i}|r||d<   t        j                  r&t        | j                  j                               |d<   t        | j                  j                         D cg c]  \  }}|dvs||f c}}      |d<   |S c c}}w )Nr   c              3   <   K   | ]  }t        |t                y wrf   )rv   rw   r   choices     rS   r   z%build_choice_field.<locals>.<genexpr>  s     <&Z%<r   booleanc              3   <   K   | ]  }t        |t                y wrf   )rv   intr3  s     rS   r   z%build_choice_field.<locals>.<genexpr>       ;Z$;r   integerc              3   R   K   | ]  }t        |t        t        t        f       ! y wrf   )rv   r7  floatr   r3  s     rS   r   z%build_choice_field.<locals>.<genexpr>  s     M6ZeW 56Ms   %'numberc              3   <   K   | ]  }t        |t                y wrf   )rv   r   r3  s     rS   r   z%build_choice_field.<locals>.<genexpr>  r8  r   r&  r$  r   r   r   Nzx-spec-enum-id)listr   fromkeyschoicesr+  appendall
allow_nullr=    ENUM_GENERATE_CHOICE_DESCRIPTIONbuild_choice_description_listr   	list_hash)fieldrA  r   r   r.  r/  s         rS   build_choice_fieldrI    s1   ;''67GRw.r	<G<	<	;7;	;	MWM	M	;7;	;D/t
 	F v<< =emm>Q>Q>S T}(U]]=P=P=R)jTQVW_iVi1a&)jkFM *ks   )E	
6E	
c                 2    dj                  d | D              S )Nr   c              3   2   K   | ]  \  }}d | d|   yw)z* `z` - NrQ   )r   r  labels      rS   r   z0build_choice_description_list.<locals>.<genexpr>  s!     J,%s5'eW-J   )r   )rA  s    rS   rF  rF    s    99J'JJJrR   c                     | j                  d      r| dd } | j                  dd      j                         } |dk(  r| dk(  rdd	d
|rd|iS i S dd| t        d      |z  dS )zM Either build a bearer scheme or a fallback due to OpenAPI 3.0.3 limitations HTTP_   Nr   r   BearerAuthorizationhttpbearer)r   schemebearerFormatapiKeyheaderz4Token-based authentication with required prefix "%s")r   r  r  r   )
startswithr   
capitalizer   )header_nametoken_prefixbearer_formats      rS   #build_bearer_security_scheme_objectr^    s     g&!!"o%%c3/::<KxK?$B
 3@.
 	
 FH
 	
 F	
 	
rR   c                    t         }|j                  r|r|j                   d| d}n|j                  xs |xs d}|j                  |j                  |dt	        |j
                        i | |j                  |dt	        |j                        }|j                  r|j                  |d   d<   |j                  r|j                  |d   d<   |j                  r|j                  |d   d	<   |j                  r|j                  |d   d
<   |j                  r|j                  |d<   |j                  r|j                  |d<   |j                  r|j                  |d<   |r||d<   |S )N (r   r   )titleversion)openapiinfopaths
componentsrd  r   termsOfServicecontactlicenseserverstagsexternalDocswebhooks)r=   VERSIONOAS_VERSIONTITLEr*  EXTENSIONS_INFOAPPEND_PATHSEXTENSIONS_ROOTDESCRIPTIONTOSCONTACTLICENSESERVERSTAGSEXTERNAL_DOCS)re  rf  rm  rb  settingsroots         rS   build_root_objectr}    sk   #HG%%&b	3""3g3''^^
 00H0HI

 4E3X223 
 ,H,D,D
E
D &.&:&:V]#||)1V%&"*"2"2VY"*"2"2VY"**Y}}}}V'55^#ZKrR   c                     d| v r&t        |       dkD  rdd| j                  d      igi| S d| v r't        |       dk(  rt        | d         dk(  r| d   d   S | S )z
    ensure that $ref has its own context and does not remove potential sibling
    entries when $ref is substituted. also remove useless singular "allOf" .
    $refr'  allOfr   )r   r  )r   s    rS   safe_refr    sn    
 CK!O66::f#567B6BB&S[A-#fWo2F!2Kgq!!MrR   metac                 L   t         j                  j                  d      r| j                         } |j                         }|j	                  dd       }| j	                  dd       }|s|rwd| v r+t        | d   t              r| d   dg| d<   nUg | d   d| d<   nHd| v r	d| ddigi} n;t        |       dk(  rd| v r| d   j                  ddi       n| s	di ddigi} nJ d       d	| v rd
| v r| j	                  d
      | d	<   d| v rd| v r| j	                  d      | d<   t        i | |      S )Nz3.1r  r   nullr  oneOfr'  zInvalid nullable caseexclusiveMinimumminimumexclusiveMaximummaximum)
r=   ro  rY  copyr  rv   r   r   rB  r  )r   r  schema_nullablemeta_nullables       rS   append_metar    sV   ''2259yy{((:t4

:t4mfVnc2&,Vnf%=F6N%>vf~%>v%>F6N6!!FVV,<#=>V!g&7w&&'78!B(8#9:555u 'I,?)/I)>F%&'I,?)/I)>F%&&v&&''rR   r  c           
         t        | |d   d      }t        |      dk(  r;t        |t              r|j                  S t        |t
              r|j                  S t        |      r|S t        |t              r8|j                  r|j                  j                  S |j                  j                  S t        |t              r|j                  j                  S t        |t              r|j                  j                  S t        |t               r|j                  j                  S | j"                  j%                  |d         }t        |t&              r|j                  S |S t        |t        ft
        z         st        |      rt        |t              rt)        |j                        }n1t        |t
              rt)        |j                        }nt)        |      }|s't+        d|d    d|  ddj-                  |       d      t/        ||dd       S | j"                  j%                  |d         j0                  }t/        ||dd       S )	zh
        navigate through root model via given navigation path. supports forward/reverse relations.
    r   Nr'  z=could not follow field source through intermediate property "z" on model zb. Please add a type hint on the model's property/function to enable traversal of the source path ".z".)r   r   rv   propertyfgetCACHED_PROPERTY_FUNCSr   callabler   reversereltarget_fieldrH  r   relatedr   r   _meta	get_fieldr   _follow_return_typerc   r   _follow_field_sourcerelated_model)r   r  field_or_propertyrH  target_models        rS   r  r  =  s     tAw5
4yA~'2$))))+@A$)))'($$)+?@ (((,,999(..;;;)+DE$,,999)+EF$((555)+EF$**777KK))$q'2E%!12 ))) (8+8M*MN)*+X623D3I3IJ-/DE23D3I3IJ23DE*STXYZT[S\ ]  %w '??Bxx~>NbR 
 (d12h?? ;;00a9GGL'd12h??rR   c                     t        |       j                  d      }||S t        |      \  }}|t        v rA|D cg c]  }|t	        d       us| }}t        |      dkD  rt        d| d       |S |d   S |S c c}w )Nrd   r'  zOcould not traverse Union type, because we don't know which type to choose from z|. Consider terminating "source" on a custom property that indicates the expected Optional/Union type. Defaulting to "string"r   )r   r)  _get_type_hint_originrU   r   r   r<   )
a_callabletarget_typeoriginargsarg	type_argss         rS   r  r  u  s     ,00:K(5LFD$(BSCtDz,ASB	By>A!{ #Z[
 | Cs   A8A8c           
          	 t        | |      S # t        $ r}|rt        |       Y d}~n?d}~wt        $ r0}|r$t        d|  ddj	                  |       d| d       Y d}~nd}~ww xY wdt
        fd}|xs |S )	z
    a model traversal chain "foreignkey.foreignkey.value" can either end with an actual model field
    instance "value" or a model property function named "value". differentiate the cases.

    :return: models.Field or function object
    Nz!could not resolve field on model z with path "r  z". This is likely a custom field that does some unknown magic. Maybe consider annotating the field/property? Defaulting to "string". (Exception: r   rd   c                      y rf   rQ   rj   s    rS   dummy_propertyz+follow_field_source.<locals>.dummy_property  s    rR   )r  rc   r<   r   r   r   )r   r  r  r   er   r  s          rS   follow_field_sourcer    s    #E400 G 3E7,sxxPT~FV W__b^ccdfs $n$s    	A%)A%&A  A%c                     t        |       }|j                  t              }|j                  ||j	                               \  }}}}|S )z
    Follow a model lookup `foreignkey__foreignkey__field` in the same
    way that Django QuerySet.filter() does, returning the final models.Field.
    )r   r   r   names_to_pathget_meta)r   lookupquerylookup_splittedr   rH  s         rS   follow_model_field_lookupr    sA    
 %LEll:.O((%..:JKNAuaLrR   c                     | \  }}}}ddddddj                  |d      }|j                  d      r|d	d
 dz   }|j                  dd      }||fS )zE sort endpoints first alphanumerically by path, then by method order r   r'     r      )GETPOSTPUTPATCHDELETErP  /Nr   {!)r)  r   r   )endpointr  
path_regexmethodcallbackmethod_prioritys         rS   alpha_operation_sorterr    sn    )1&D*fh 
c&!n  }}SCRy3<<S!D  rR   c                   x    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZddZd Zedeeef   fd       Zedefd       Zy)ResolvedComponentschemas	responses
parametersr  requestBodiesheaderssecuritySchemeslinks	callbacks	pathItemsNc                 <    || _         || _        || _        || _        y rf   )r  r   r   r   )selfr  r   r   r   s        rS   __init__zResolvedComponent.__init__  s    		rR   c                 d    t        | j                  xr | j                  xr | j                        S rf   )rw   r  r   r   r  s    rS   __bool__zResolvedComponent.__bool__  s#    DII;$));<<rR   rd   c                 2    | j                   | j                  fS rf   )r  r   r  s    rS   r#  zResolvedComponent.key  s    yy$))##rR   c                 b    | j                         sJ dd| j                   d| j                   iS )Nr  z#/components/r  )r  r   r  r  s    rS   refzResolvedComponent.ref  s0    }}-		{!DII;?@@rR   NN)rN   rO   rP   SCHEMARESPONSE	PARAMETEREXAMPLEREQUEST_BODYHEADERSECURITY_SCHEMALINKCALLBACK	PATH_ITEMr  r  r  r   r   r#  rI   r  rQ   rR   rS   r  r    s    FHIG"LF'ODHI= $U38_ $ $ A[ A ArR   r  c                       e Zd ZdZd Zd Zy)ComponentIdentityz@ A container class to make object/component comparison explicit c                     || _         y rf   rj   )r  rk   s     rS   r  zComponentIdentity.__init__  s	    rR   c                 r    t        |t              r| j                  |j                  k(  S | j                  |k(  S rf   )rv   r  rk   )r  others     rS   __eq__zComponentIdentity.__eq__  s/    e./88uyy((xx5  rR   N)rN   rO   rP   r   r  r  rQ   rR   rS   r  r    s    J!rR   r  c                   X    e Zd ZddZdeddfdZdeddfdZd ZdefdZd	 Z	de
fd
Zy)ComponentRegistryrd   Nc                     i | _         y rf   )_componentsr  s    rS   r  zComponentRegistry.__init__  s
    EGrR   	componentc                     || v r=t        d|j                   d| j                  |j                     j                   d       || j                  |j                  <   y )Nztrying to re-register a z component with name zB. this might lead to a incorrect schema. Look out for reused names)r<   r   r  r#  r  r  r  s     rS   registerzComponentRegistry.register  s^    *9>>*::O##IMM2778 9@A
 +4'rR   c                 @    || vr|| j                   |j                  <   y y rf   )r  r#  r  s     rS   register_on_missingz%ComponentRegistry.register_on_missing  s#    D .7DY]]+ !rR   c           	         |j                   | j                  vry|j                  }| j                  |j                      j                  }t        |t              st        j                  |      r|}n|j                  }t        |t              st        j                  |      r|}n|j                  }t        |dd      xs t        |dd      }||k7  r!|st        d|j                   d| d| d       y)NFsuppress_collision_warningz/Encountered 2 components with identical names "z" and different identities z and zH. This will very likely result in an incorrect schema. Try renaming one.T)r#  r  r   rv   r  rg   rh   ri   r;   r<   r  )r  r  	query_objregistry_objquery_idregistry_idr  s          rS   __contains__zComponentRegistry.__contains__  s    == 0 00$$	''	6==i!23wy7Q H **Hl$56'//,:W&K&00K &BEJ KH&BEJ 	# {"+EA)..AQ R((0z{m DJK
 rR   c                 X    t        |t              r|j                  }| j                  |   S rf   rv   r  r#  r  r  r#  s     rS   __getitem__zComponentRegistry.__getitem__  s'    c,-''C$$rR   c                 V    t        |t              r|j                  }| j                  |= y rf   r  r  s     rS   __delitem__zComponentRegistry.__delitem__  s$    c,-''CS!rR   c                    t        t              }| j                  j                         D ](  }|j                  ||j
                     |j                  <   * |j                         D ]%  \  }}|j                         D ]  \  }}|||   |<    ' t        |j                               D 	ci c]4  }|t        ||   j                               D 	ci c]  }	|	||   |	    c}	6 c}	}S c c}	w c c}	}w rf   )
r   r   r  valuesr   r   r  r   r  keys)
r  extra_componentsoutputr  
extra_typeextra_component_dictcomponent_namecomponent_schemar   r  s
             rS   buildzComponentRegistry.build#  s    0;D0A))002 	FI5>5E5EF9>>"9>>2	F 1A0F0F0H 	F,J,4H4N4N4P F0 05Ez">2F	F v{{}-
 vd|?P?P?R8ST4d++TT
 	
T
s   )$C+C&C+&C+rd   N)rN   rO   rP   r  r  r  r  r  r  r   rI   r
  rQ   rR   rS   r  r    sS    H4"3 4 48-> 84 8:%"3 %
"

 
rR   r  TOpenApiGeneratorExtension)boundc                        e Zd ZU g Zeee      ed<   dZe	de
ee   f   ed<   dZdZdZ fdZd Zed        Zed	ed
efd       Zed	ed
ee   fd       Z xZS )r  	_registryNtarget_classFr   c                 Z    t        |   di | | j                  j                  |        y )NrQ   )super__init_subclass__r  rB  )r   r  ri   s     rS   r  z+OpenApiGeneratorExtension.__init_subclass__=  s%    !+F+S!rR   c                     || _         y rf   )target)r  r  s     rS   r  z"OpenApiGeneratorExtension.__init__A  s	    rR   c                 D    	 t         j                         _        y # t        $ rn t        j                  j                         }t         fd|D              r2 j                  s&t        d j                   d j                   d       d  _        Y y t        $ r}t        j                  j                         }t         fd|D              r@t        d|j                  j                   d j                   d j                   d	| d
	       d  _        Y d }~y d }~ww xY w)Nc              3   Z   K   | ]"  }j                   j                  |d z          $ ywr  Nr  rY  r   appr   s     rS   r   z8OpenApiGeneratorExtension._load_class.<locals>.<genexpr>J  &     Tc3##..sSy9T   (+zregistered extensions z for "z6" has an installed app but target class was not found.c              3   Z   K   | ]"  }j                   j                  |d z          $ ywr  r  r  s     rS   r   z8OpenApiGeneratorExtension._load_class.<locals>.<genexpr>R  r  r  zUnexpected error z$ occurred when attempting to import z for extension r`  z).)r(   r  ImportErrorr   app_configsr  anyoptionalr<   rN   r   ri   )r   installed_appsr  s   `  rS   _load_classz%OpenApiGeneratorExtension._load_classD  s
   	$,S-=-=>C 	$!--224NT^TT]`]i]i,S\\N&AQAQ@R SK L  $C 	$!--224NT^TT'(<(<'= >!!$!1!1 2/#,,rRSQTTVX  $C	$s    A4DDA9DDr  rd   c                    t        | j                  t              r| j                          | j                  y| j                  r 	 t        t        |      | j                        S t        |      | j                  k(  S # t        $ r Y yw xY wr   )rv   r  r   r%  match_subclassesrn   rl   	TypeError)r   r  s     rS   _matchesz"OpenApiGeneratorExtension._matchesY  s}    c&&,OO#!!!)F"3S5E5EFF V$(8(888  s   A< <	BBc                 v    t        | j                  d d      D ]  }|j                  |      s ||      c S  y )Nc                     | j                   S rf   )priority)r  s    rS   <lambda>z5OpenApiGeneratorExtension.get_match.<locals>.<lambda>k  s
    QZZ rR   T)r#  r  )r  r  r)  )r   r  	extensions      rS   rx   z#OpenApiGeneratorExtension.get_matchi  s>    3GQUV 	)I!!&) ((	) rR   )rN   rO   rP   r  r   r   r  __annotations__r  r   r   r   r'  r,  r#  r  r  classmethodr%  r   rw   r)  r   rx   __classcell__)ri   s   @rS   r  r  6  s    !ItDG}!37L%c4</07HH" $ $( 9c 9d 9 9 s x{  rR   )	metaclassr&  c                     	 t        |       S # t        $ r Y nw xY w	 | j                  d      ^ }}t        dj                  |            }t	        ||      S # t        t
        f$ r Y yw xY w)zB augmented import from string, e.g. MODULE.CLASS/OBJECT.ATTRIBUTE r  N)r(   r   r   r   r   AttributeError)r&  r  attrrk   s       rS   deep_import_stringr6  q  sq    V$$ ll3'tCHHTN+sD!!( s   
 	9A A)(A)c                  (    t        t                     S rf   )_load_enum_name_overridesr)   rQ   rR   rS   load_enum_name_overridesr9    s    $\^44rR   languagec                 r   i }t         j                  j                         D ]W  \  }}t        |t              rt        |      }|st        d| d       4t        j                  |      rt        |t              r|j                  }t        j                  |      r5t        |t              r%|D cg c]  }|j                  |j                  f }}t        |      r |       }g }|D ]g  }t        |t              s||j!                  ||f       )t        |d   t"        t$        f      r|j'                  |d          W|j!                  |       i |D cg c]  \  }}|dvs||f }	}}||t)        |	      <   Z t+        t         j                        t+        |      k7  rt-        d       |S c c}w c c}}w )Nz#unable to load choice override for z; from ENUM_NAME_OVERRIDES. please check module path string.r'  r>  zENUM_NAME_OVERRIDES has duplication issues. Encountered multiple names for the same choice set. Enum naming might be unexpected.)r=   ENUM_NAME_OVERRIDESr   rv   r   r6  r<   rg   rh   rn   rK   rA  r   r  r  r  rB  r?  tupleextendrG  r   r:   )
r:  	overridesr  rA  r   normalized_choicesr4  r  rL  hashable_valuess
             rS   r8  r8    s   I-AAGGI 5ggs#(1G5dV <3 4 ??7#
7G(DooG??7#
7D(A29:Q(:G:GiG 	2F&#&&."))66*:;F1Ie}5"))&)4"))&1	2 0B
+ueUR\E\UEN
 
 15	)O,-?5B 334IFH	
 5 ; 
s   /F.F3"F3r   c                     t        j                  t        j                  t	        |       dt
              j                               j                         d d S )NT)	sort_keysr      )hashlibsha256jsondumpsr  r4   encode	hexdigest)r   s    rS   rG  rG    s=    >>$**VC[DkRYY[\ffhiljlmmrR   r%  c                 ^    | j                  d      sd| z   } | j                  d      s| dz   } | S )N^$)rY  r   )r%  s    rS   anchor_patternrN    s5    c"-C C-NrR   c                    t               }t        j                  |       D ]  }|j                  d      |j                  d      }}d}t        j
                  r|dk(  rd}n)t        j                  r|j                  d      r|dd  d}||k7  ro|s y|j                  d	      r7|t        d	      d j                  d
      }|D 	cg c]  }	|	|v sd|	  }}	d}n|dk(  r|D 	cg c]  }	d|	 	 }}	|t        j                  v rWt        j                  |   }
t        |
      rt        |
      }nt        |
t               rt!        |
      }nvt#        d| d        y|t$        v rt        t$        |         }nJ||v r5t        t&        j(                        }t+        ||   j,                        |d<   nt/        d| d        yt1        ||t2        j4                  |      c S  yc c}	w c c}	w )zE
    convert django style path parameters to OpenAPI parameters.
    	converter	parameterNpkid_pk_iddrf_format_suffix_r   r  drf_format_suffixz+Unable to use path converter override for "z8". Please refer to the documentation on how to use this.r%  zEncountered path converter "z" that is unknown to Django.)r  r   r  r$  )r   r   finditergroupr2   SCHEMA_COERCE_PATH_PKr=   SCHEMA_COERCE_PATH_PK_SUFFIXr   rY  r   r   PATH_CONVERTER_OVERRIDESr   r   rv   r   r<   r>   rA   r   rN  regexr:   r0  rD   r(  )r  variableavailable_formatsregistered_convertersmatchrP  rQ  enum_valuesexplicit_formatssuffixoverrider   s               rS   resolve_django_path_parameterrg    s    +,-66zB 4
${{;7[9Q9	--)t2CI!>>9CUCUV[C\$Sb>*#.I   45(-A)B)CDJJ3O+;!'vIZ?Z!F8K  ,I--6GHFQvh<HKH,EEE+DDYOHX&)(3Hd+hA) ML M 77%&CI&NOF//%l&6&67F ./DY/O/U/U VF90;WXY#%**	
 	
_4
l I
 Is   	G!G!$G&c                 ^   t        |       j                         D ]  \  }}t        j                  r|dk(  rd}n)t        j
                  r|j                  d      r|dd  d}||k7  rM|dk(  r yt        |t        t        j                        t        |      t        j                        c S  y)	z
    convert regex path parameter to OpenAPI parameter, if pattern is
    explicitly chosen and not the generic non-empty default '[^/.]+'.
    rR  rS  rT  NrU  rV  z[^/.]+)r  r   r%  r  )analyze_named_regex_patternr   r2   r[  r=   r\  r   r0  r   rA   r   rN  rD   r(  )r  r_  rQ  r%  s       rS   resolve_regex_path_parameterrj    s    
 :*EKKM 
	7--)t2CI!>>9CUCUV[C\$Sb>*#.I h##L$4$45"7+%**	
 	

& rR   c                 t    t        | t        j                  t        j                  t        j                  f      S rf   )rn   r/   URLPathVersioningNamespaceVersioningAcceptHeaderVersioning)versioning_classs    rS   is_versioning_supportedrp    s2    &$$&&)))  rR   c                     	  | j                   | j                  fi | j                  \  }}t        |      t        |      k(  S # t        j
                  $ r Y yw xY wr   )determine_versionrequestr  r   r+   NotAcceptable)r   requested_versionrb  r   s       rS   operation_matches_versionrv    s[    6+T++DLLHDKKH
 7|s#4555 ## s   *A AAc                    |j                   r|j                  sJ |sJ ||j                  _        t        |j                   t        j
                        r\|j                   j                  }t        j                  |||i      }t        |t              r|j                  }||j                  |<   |S t        |j                   t        j                        r?	 t        t        t!        |                   j#                  |      |j                  _        |S t        |j                   t        j*                        rt-        |j                  d      s>|j/                  |j                        }|\  |j                  _        |j                  _        t5        |j                  j2                        }|j6                   d|j                   j                   d| |j                  _        |S # t&        $ r t)        d| d       Y |S w xY w)N)var_dict)urlconfz0namespace versioning path resolution failed for z. Path will be ignored.accepted_renderer; =)ro  rs  rb  rn   r/   rl  version_paramuritemplater   rv   r8   urir  rm  r%   detype_patternsr=  resolveresolver_matchr!   r:   rn  r   perform_content_negotiationrz  accepted_media_typer5   	full_type)patternsr  r  r   ru  r}  
negotiated
media_types           rS   modify_for_versioningr  %  s     T\\11,DLL$'')E)EF--;;""4=BS2TUdK(88D%6M"* K) 
D)):+I+I	J	d*6'h8+gdm LL'$ K 
D)):+L+L	M t||%8999$,,GJOYLDLL*DLL,L @ @A
##$Bt'<'<'J'J&K1M^L_` 	( K  	dDTFJabc K	ds   <G# #G?>G?media_typesc                    | j                   r$t        | j                   t        j                        s|S t	        | j
                  j                        }|j                  j                  | j                   j                        }t        |      }|r|| j                   j                  k(  r|S |D cg c]   }| d| j                   j                   d| " c}S c c}w )Nr{  r|  )ro  rn   r/   rn  r5   rs  r  paramsr)  r}  r0   default_version)r   r  r  rb  s       rS   !modify_media_types_for_versioningr  J  s    !!$//1R1RSDLL<<=J##D$9$9$G$GHG!'*Gg!6!6!F!FF & ,b..<<=QwiH  s   -%Cc                    i }d}d\  }}d\  }}d}|t        |       k  rd}| |   dk(  rd}	n\| ||dz    dk(  rd}d}d}	nJ| |   d	v r
|r|d
z  }d
}	n9| |   dk(  r|r|sJ d}d}d}d
}	n"| |   dv r|r|sd}|||<   d\  }}n|d
z  }d
}	nd
}	|r|s|| |||	z    z  }n|r|s|| |||	z    z  }||	z  }|t        |       k  r|rJ |S )zH safely extract named groups and their pattern from given regex pattern r   )Fr   F\r  r  (?P<T(r'  >r   )r   r   )r   )
r  resultstackname_capturename_bufferregex_captureregex_bufferiskipffs
             rS   ri  ri  ^  s?   FE )L+"+M<	A
c$i-7d?B!AE]f$DLB!W^QJEB!W^; L MDB!W^ %&2{#,2)\
BB4!b&>)K4D1r6N*L	RC c$i-D 9MrR   c                 &    t        d | D              S )zMCache detyped patterns due to the expensive nature of rebuilding URLResolver.c              3   2   K   | ]  }t        |        y wrf   )detype_pattern)r   r%  s     rS   r   z"detype_patterns.<locals>.<genexpr>  s     AW(ArM  )r=  )r  s    rS   r  r    s     AAAArR   c           	      `   t        | t              rbt        t        | j                        | j                  D cg c]  }t        |       c}| j
                  | j                  | j                        S t        | t              r@t        t        | j                        | j                  | j                  | j                        S t        | t              rAt        t        j                  dd| j                        | j                  | j                         S t        | t"              rv| j$                  }t'        | j$                        j)                         D ]"  \  }}|j+                  d| d| dd| d	      }$ t#        || j                  | j                   
      S t-        d|  d       | S c c}w )z
    return an equivalent pattern that accepts arbitrary values for path parameters.
    de-typing the path will ease determining a matching route without having properly
    formatted dummy values for all path parameters.
    )r%  urlconf_namedefault_kwargsapp_name	namespace)r%  r  default_argsr  z<\w+:(\w+)>z<\1>)router  is_endpointr  r  r   z>[^/]+))r^  r  r  zunexpected pattern "z," encountered while simplifying urlpatterns.)rv   r$   r  r%  url_patternsr  r  r  r#   r  r  r  r"   resub_route_is_endpointr    _regexri  r   r   r<   )r%  pdetyped_regexr  r^  s        rS   r  r    s    ';'"7??35<5I5IJ.+J"11%%''
 	
 
GZ	("7??3%% --	
 	
 
G\	*&&'..A,,
 	

 
G\	*6w~~FLLN 	KD%)11tfAeWA&tfG$M	
 ,,
 	
 	#G9,XYZA Ks   F+
c                    t        | t              st        | t              r-| j                         D ci c]  \  }}|t	        |       c}}S t        | t
              st        | t              r| D cg c]  }t	        |       c}S t        | t              rt        |       S t        t        t        t        fD ]  }t        | |      s ||       c S  | S c c}}w c c}w )zP resolve non-serializable objects like lazy translation strings and OrderedDict )rv   r   r   r   normalize_result_objectr?  r=  r&   r   rw   r7  r;  )r  r.  r/  	base_types       rS   r  r    s    &$:fk#B:@,,.I$!Q*1--II&$:fe#<4:;q'*;;&'"6{C, %	fi(V$$% M J;s   C2Cc                    t        t              }| d   j                         D ]6  \  }}|j                         D ]  \  }}||d      j                  ||f         8 |j                         D ]  \  }}t	        |      dk(  rt        d| d| d       t        t        |      dd  d      D ]>  \  }\  }}t        j                  rt        |      nd	| }	| d   |   |   dxx   |	z  cc<   @  | S )
Nre  operationIdr'  zoperationId "z" has collisions z". resolving with numeral suffixes.r  )startr   )r   r?  r   rB  r   r<   	enumerater  r=   CAMELIZE_NAMESr   )
r  
operationsr  methodsr  	operationoperation_idre  idxre  s
             rS   sanitize_result_objectr    s   T"J..0 Hg!( 	HFIy/077vG	HH  *//1 Ceu:?}\N*;E7Bdef#,VE]12->a#H 	CC$!5!D!DSXAcU)F7OD!&)-8FB8	C	C MrR   c                     i }| j                         D ]0  \  }}t        j                  d|      st        d|d       ,|||<   2 |S )Nz^x-zinvalid extension z(. vendor extensions must start with "x-")r   r  rb  r<   )r,  r  r#  r  s       rS   r*  r*    sT    F &&(  
Uxx$%cW,TUVF3K	 
 MrR   c           	      h   t        j                  d|       D ]0  }| j                  d| ddt        j                  |d       d      } 2 |j                  dg       D ]5  }|d   t        j                  k(  st        j                  |d   d      |d<   7 t        j                  |d   d      |d<   | |fS )	Nz	\{(\w+)\}r  }Fr  r  r  r  )r  findallr   r  r  r)  rD   r(  )r  r  path_variablerQ  s       rS   camelize_operationr    s    L$7 
||r"$$]E:;2>

 ]]<4 N	T?.333 * 3 3If4Eu MIfN  *229]3KUSIm?rR   c                 R    t        t               | j                               |      }|j                  |      }|rj|j                  |_        |j
                  |_        |j                  j                         D ]+  \  }}|j                  d      s|dv r||j                  |<   - |S )zK build a mocked request and use original request as reference if available )r  rO  )HTTP_ACCEPTHTTP_COOKIEHTTP_AUTHORIZATION)	r   r3   r   initialize_requestuserauthMETAr   rY  )r  r  r   original_requestr  rs  r  r  s           rS   build_mock_requestr    s    :g')6<<>:EG%%g.G',,',, ,00668 	'KD%??7+KK!&GLL	' NrR   c                    t        |       } t        j                  j                  |       \  }}}}}}t        j                  j	                  |      }|j                  |j                         D 	ci c]  \  }}	|		||	 c}	}       t        j                  j                  |d      }t        j                  j                  ||||||f      S c c}	}w )zP deconstruct url, safely attach query parameters in kwargs, and serialize again T)doseq)	r   urllibparseurlparseparse_qsr  r   	urlencode
urlunparse)
urlr  rU  netlocr  r  r  fragmentr.  r/  s
             rS   set_query_parametersr  
  s    
c(C4:LL4I4I#4N1FFD&%LL!!%(E	LL6<<>C41aQ]!Q$CDLL""5"5E<<""FFD&%#RSS Ds   /
C
:C
r  c                     t        |       } t        j                  j                  |       \  }}}}}}t        j                  j	                  dd||||f      S )Nr   )r   r  r  r  r  )r  rU  r  r  r  r  r  s          rS   get_relative_urlr    sN    
c(C4:LL4I4I#4N1FFD&%<<""BD&%#JKKrR   c           
         t         j                  dk\  r*t        j                  |       t        j                  |       fS t        | dd      }t        | dd      }t        j                  t        t        j                  t        t        j                  t        t        j                  t        t        j                  t        ij!                  ||      }||fS )z3 graceful fallback for py 3.8 typing functionality rY   
__origin__N__args__)sysversion_infor   
get_originget_argsr   r   r?  r
   r   r   r=  Setset	FrozenSet	frozensetr)  )hintr  r  s      rS   r  r    s    
6!  &(===|T2tZ.KKKKLL%JJi
 #ff
 	 t|rR   c           
          d}t        | d      r| j                  D cg c]  }| }}t        t        |       j	                         D ci c]  \  }}|t        |       c}}|t        |             S c c}w c c}}w )z9resolve required fields for TypedDicts if on 3.9 or aboveN__required_keys__)r   r  r   )r   r  r  r   r   resolve_type_hintr   )r  r  hr.  r/  s        rS   _resolve_typeddictr  +  s~    Ht()#556!A660>t0D0J0J0L
(,1A ##
 DM  7
s   	A3	A8
c                     t        | t        t        dt              t        t        dt              t        t        dt              t        t        dt              f      S )NGenericAliasrT   _GenericAlias_UnionGenericAlias)rv   r   typesr`   r   )r  s    rS   is_higher_order_type_hintr  ;  sG    d~y1{I.3,i8	  rR   c                    t        |       \  }|t        | d      rt        |       S |t        j                  |       rt        | t              rt        |       r6t        |       j                         D ci c]  \  }}|t        |       }}}n1| j                  D ci c]  }|t        t        j                         }}t        ||j                               S |t        u s| t        u s| t         u r6t#        rt        d               S t        t        j                              S |t        u r,t#        t        d         t%              t%                    S |t&        u s|t(        u s|t*        u s| t,        u rCt        t        j.                        }r&d   t0        j2                  urt        d         |d<   |S |t4        u rt#        t        d               S |t6        u rt#        t        d               S |t8        v rId	t              i}t;        fd
D              r&|j=                  t        t?        d                      |S t        j                  |       rrt        | t@              rbd	| D cg c]  }|jB                   c}i}| jD                  D cg c]  }t        |      s| }}|r|j=                  t        |d                |S tG        | tH              rtK        |       S tG        | tL              rt        | jN                        S |tP        v riD 	cg c]  }	|	t?        d      us|	 }
}	t%        |
      dkD  rd|
D 	cg c]  }	t        |	       c}	i}nt        |
d         }t?        d      v rd|d<   |S |tR        jT                  jV                  u rt#        t        d               S tY        |       c c}}w c c}w c c}w c c}w c c}	w c c}	w )z+ resolve return value type hints to schema NF)r   )r   r  r   )r   r   r   r'  r   r$  c              3   P   K   | ]  }t        d          t        |      u   yw)r   N)r   )r   r4  r  s     rS   r   z$resolve_type_hint.<locals>.<genexpr>h  s"     @tDG}V,@s   #&r  Tr  )-r  r   r   rg   rh   rn   r=  r   r   r  _fieldsrA   ANYr  r  r?  r7   r   r   r   r   r   r6   r   r   r   r  r  rV   rC  r  r   r   r  r   rv   rW   r  rX   	__value__rU   r   r   Iterablerc   )r  r  r.  r/  r   r   r   tmixin_base_typesr  r  r  s              @rS   r  r  D  sg   (.LFD~-?%%	GOOD1ju6M$>LT>R>X>X>Z[da!.q11[J[IMVA!-l.>.>??VJV JARSS	444<4:+=*.d1g&
 	
4D\EUEU4V
 	
 
5#DG,4y4y
 	

 
46[0Fk4ITU_M_!,"5"56DG6::-->tAw-GF)*	3 1$q' :;;	9	 1$q' :;;	=	  $t*%@4@@MM*4Q=9:		:dD#9$7$4::78'+||H!}Q7GAHHMM*+;A+>?@	D/	0!$''	D*	+ 00	;	$(BSCtDz,ASB	By>A)L3 1# 6LMF&y|4F:!%F:	;??++	+ 1$q' :;;"4((i \V: 8H CLs0   8O !O<O!O2O%O8OO"classesc                 R    |y|r| j                   |v S t        | t        |            S NT)ri   rv   r=  )rk   r  exacts      rS   whitelistedr    s-    }}''#uW~..rR   r  c                 n  	 ddl m	m} | G 	fdd|j                               }|j	                         }|j                         }t        j                  | j                         ||d       |_	        i |_
        |j                  }||_        ||_        ||_        d|_        | j                         |_        |S )Nr   )parsersr   c                   *    e Zd ZW  j                  gZy)"build_mocked_view.<locals>.TmpViewN)rN   rO   rP   
JSONParserparser_classes)r  s   rS   TmpViewr    s    !,,-rR   r  r   )r   r  r   r   as_viewr   r=   GET_MOCK_REQUESTupperrs  r  r   registryr  r  path_prefixr  )
r  r  extend_schema_decoratorr
  r   r  view_callabler   r   r  s
            @rS   build_mocked_viewr    s    -.%-- . . OO%M'++-D'88dDDL DK++FFOFKFFLLNFMKrR   r  c                      |r|dk(  r gS t               }|j                  |      }||u r gS  fd	  ||      S # t        t        f$ r t	        d|j
                   d        cY S w xY w)Nrs  c           	          | |u rgS d| j                         v r.| d   j                         D ci c]  \  }}| ||       c}}S | d   S c c}}w )Nr   r  )r  r   )r   sentinel
field_namefield_schemadrilldown_schema_exampler  s       rS   r  z<build_listed_example_value.<locals>.drilldown_schema_example  sn    X7N6;;=( 17|0D0J0J0L,J 4\8LL  i  	s   Az.OpenApiExample could not be paginated because z either has an unknown schema structure or the individual pagination fields did not provide example values themselves. Using the plain example value as fallback.)r   get_paginated_response_schemar4  KeyErrorr<   ri   )r  	paginatorr   r  r   r  s   `    @rS   build_listed_example_valuer    s    	Y.wxH44X>Fw	!'99H% <Y=P=P<Q R\ ]	

 s   ? *A,+A,c                     t        j                  |       }|j                         D ci c]  \  }}||j                  v s|| c}}S c c}}w rf   )rg   	signaturer   r  )r   r  sigr  vals        rS   filter_supported_argumentsr    sH    


D
!C!'S#3#..3HS  s   A	 A	c                 N    	 | j                         S #  d| j                  icY S xY w)Nrs  )get_serializer_contextrs  )r   s    rS   build_serializer_contextr     s,    )**,,)4<<((s    $rm  r
  c                 `   i }| D ]  }t        |j                  t              r|j                  }nd|j                  i}i }|j                         D ]H  \  }}t        |t              r|||j	                         <   +t        |d||      }i }	|j                  j                         }
|
r|
|	d<   |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	                         <   K |||j                   <    |S )a  
    Creates a mocked view for every webhook. 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.
    postr  )r  r  r  r
  r   r  rk  r   requestBodyr   rs  r  )rv   	decoratorr   r   r   r  r   get_descriptionget_summaryget_tags_get_request_bodyis_deprecated_get_response_bodiesget_extensionsr  r*  r  )rm  r
  r  webhookr  
path_itemsr  r$  mocked_viewr  r   r  rk  request_bodyr   r,  s                   rS   process_webhooksr0    s    F 2*g''.''Gw001G
!( (	3FI)T*-6
6<<>*+(1!	K I%,,<<>K+6	-(!((446G'.	)$%%..0D$(	&!&--??
KL+7	-($++99;J*4	,'%0%7%7%L%LY%WIk"$++::<J  !B:!NO)2Jv||~&Q(	3T  *w||e2*h MrR   )F)Tr  r  )NNN)FNNNFNNNTNNrf   r  )r   r   rE  rg   rG  r  r  r  r   urllib.parser  r   r   r   r   decimalr   r$  r   r   r	   r
   r   r   r   r   r   r   r   r   r  r   typing_extensionsr  r~  django.appsr   django.db.models.constantsr   +django.db.models.fields.related_descriptorsr   r   r   r   'django.db.models.fields.reverse_relatedr   django.db.models.sql.queryr   django.urls.convertersr   django.urls.resolversr   r    r!   r"   r#   r$   r%   django.utils.functionalr&   r'   django.utils.module_loadingr(   django.utils.translationr)   r*   r   r   r+   r,   r-   r.   r/   rest_framework.compatr0   rest_framework.fieldsr1   rest_framework.settingsr2   rest_framework.testr3   rest_framework.utils.encodersr4   rest_framework.utils.mediatypesr5   'rest_framework.utils.serializer_helpersr6   r7   r8   drf_spectacular.drainager9   r:   r;   r<   drf_spectacular.settingsr=   drf_spectacular.typesr>   r?   r@   rA   rB   drf_spectacular.utilsrC   rD   rE   rF   rG   rH   rI   rJ   django.db.models.enumsrK   r   r   rT   rU   r/  rV   rW   rX   r[   
_PyLiteralr\   _PyTypedDictMetar^   
_PxLiteral_PxTypedDictMetar  r`   r   rc   r   rl   rr   rz   r}   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r0  rI  rF  r^  r}  r  r  r  r  r  r  r  r  r  r  r  r  r6  r9  	lru_cacher8  rG  rN  rg  rj  rp  rv  r  r  ri  r  r  r  r  r*  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r0  rQ   rR   rS   <module>rO     s        	 
     0      w +    1  E , 1   = 5 1 6 N N 5 ' 0 1 5 6 J # E E 9   
. 5+$)5??#;KsCx;(K!#uS#X #)+ uS#X +$& %S/ &v,9j]"M.00w$((	7Dj]"M.00 v&66H,.	 		9 	:d :#	/(B GC GI.A$B GnS n$ >S >Y%? >T# T)J/ TKs K	:K0L KD 3 3 4   ",C 4&4S> &  F><% 1< ?@ <XkEZ < [ {  -1%)[) c]
 &[ (>": { . 666 )6 6r) )XKc K
0!{ !H	[ 	[ 	( (; (; (@5@d3i 5@p&%2!&A AB! !E
 E
P C238
g 8vs s 5 ( ( (Vn3 n3 nC C ;|6 6$ 6"Jc tCy (*c *d38n *Z B B
)X" &T3 TL# L# L" t =)@/V /htDL/A&B /TX /c  0c @)fkk#s(&; )<tN3 <?P <c,   :  		s$   Q( Q> (Q;:Q;>RR