Ë
    º2Úi:0  ã                   óô   — d dl Z d dlZd dlmZmZ d dlmZ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 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!m"Z" d dl#m$Z$  G d„ de«      Z
 G d„ de	«      Z%y)é    N)Ú
URLPatternÚURLResolver)ÚviewsÚviewsets)ÚBaseSchemaGenerator)ÚEndpointEnumerator)Úapi_settings)Úadd_trace_messageÚget_overrideÚreset_generator_stats)ÚOpenApiViewExtension)Ú
AutoSchema)ÚComponentRegistryÚalpha_operation_sorterÚbuild_root_objectÚcamelize_operationÚerrorÚ	get_classÚis_versioning_supportedÚmodify_for_versioningÚnormalize_result_objectÚoperation_matches_versionÚsanitize_result_objectÚwarn)Úspectacular_settingsc                   ó6   ‡ — e Zd Zdd„Zˆ fd„Zd„ Zˆ fd„Zˆ xZS )r   c                 ó‚  — | j                  ||«      }t        j                  D ]  } ||¬«      }Œ i }|D ]  \  }}}}	||f|vsŒ||||	f|||f<   Œ t        |j	                  «       «      }t        t        j                  «      rt        |t        j                  ¬«      S t        j                  rt        |t        ¬«      S |S )N)Ú	endpoints)Úkey)	Ú_get_api_endpointsr   ÚPREPROCESSING_HOOKSÚlistÚvaluesÚcallableÚSORT_OPERATIONSÚsortedr   )
ÚselfÚpatternsÚprefixÚapi_endpointsÚhookÚapi_endpoints_deduplicatedÚpathÚ
path_regexÚmethodÚcallbacks
             úQ/var/www/html/acx/venv/lib/python3.12/site-packages/drf_spectacular/generators.pyÚget_api_endpointsz$EndpointEnumerator.get_api_endpoints   sÑ   € Ø×/Ñ/°¸&ÓAˆä(×<Ñ<ò 	:ˆDÙ ¨=Ô9‰Mð	:ð &(Ð"Ø2?ò 	`Ñ.ˆD�*˜f hØ�fˆ~Ð%?Ò?Ø<@À*ÈfÐV^Ð;_Ð*¨4°¨<Ò8ð	`ô Ð7×>Ñ>Ó@ÓAˆäÔ(×8Ñ8Ô9Ü˜-Ô-A×-QÑ-QÔRÐRÜ!×1Ò1Ü˜-Ô-CÔDÐDà Ð ó    c                 óJ   •— t         ‰| �  |«      }|j                  dd«      }|S )Nz\.ú.)ÚsuperÚget_path_from_regexÚreplace)r'   r.   r-   Ú	__class__s      €r1   r7   z&EndpointEnumerator.get_path_from_regex*   s'   ø€ Ü‰wÑ*¨:Ó6ˆà�|‰|˜E 3Ó'ˆØˆr3   c                 ó¾  — |€| j                   }g }|D ]Ç  }|t        |j                  «      z   }t        |t        «      r^| j                  |«      }|j                  }| j                  ||«      sŒ[| j                  |«      D ]  }||||f}	|j                  |	«       Œ Œ‰t        |t        «      sŒš| j                  |j                  |¬«      }
|j                  |
«       ŒÉ |S )z§
        Return a list of all available API endpoints by inspecting the URL conf.
        Only modification the DRF version is passing through the path_regex.
        )r(   r)   )r(   ÚstrÚpatternÚ
isinstancer   r7   r0   Úshould_include_endpointÚget_allowed_methodsÚappendr   r    Úurl_patternsÚextend)r'   r(   r)   r*   r<   r.   r-   r0   r/   ÚendpointÚnested_endpointss              r1   r    z%EndpointEnumerator._get_api_endpoints0   sì   € ð
 ÐØ—}‘}ˆHàˆàò 	7ˆGØ¤# g§o¡oÓ"6Ñ6ˆJÜ˜'¤:Ô.Ø×/Ñ/°
Ó;�Ø"×+Ñ+�Ø×/Ñ/°°hÕ?Ø"&×":Ñ":¸8Ó"Dò 7˜Ø$(¨*°f¸hÐ#G˜Ø%×,Ñ,¨XÕ6ñ7ô ˜G¤[Õ1Ø#'×#:Ñ#:Ø$×1Ñ1Ø%ð $;ó $Ð ð ×$Ñ$Ð%5Õ6ð	7ð" Ðr3   c                 óT   •— t         ‰| �  |«      }|D �cg c]  }|dvr|‘Œ
 c}S c c}w )N)ÚOPTIONSÚHEADÚTRACEÚCONNECT)r6   r?   )r'   r0   Úmethodsr/   r9   s       €r1   r?   z&EndpointEnumerator.get_allowed_methodsM   s;   ø€ Ü‘'Ñ-¨hÓ7ˆà!(ö
ØØÐDÑDò ò
ð 	
ùò 
s   •%)NÚ )Ú__name__Ú
__module__Ú__qualname__r2   r7   r    r?   Ú__classcell__©r9   s   @r1   r   r      s   ø„ ó!ô(ò÷:
ð 
r3   r   c                   óR   ‡ — e Zd ZeZˆ fd„Zˆ fd„Zdˆ fd„	Zd„ Zd„ Z	d„ Z
d	d„Zˆ xZS )
ÚSchemaGeneratorc                 ó~   •— t        «       | _        |j                  dd «      | _        d | _        t        ‰| �  |i |¤Ž y )NÚapi_version)r   ÚregistryÚpoprT   Ú	inspectorr6   Ú__init__)r'   ÚargsÚkwargsr9   s      €r1   rX   zSchemaGenerator.__init__X   s9   ø€ Ü)Ó+ˆŒØ!Ÿ:™: m°TÓ:ˆÔØˆŒÜ‰Ñ˜$Ð) &Ó)r3   c                 óz   •— t         ‰| �  |||«      }t        j                  rt	        j
                  dd|¬«      }|S )zv
        Customized coerce_path which also considers the `_pk` suffix in URL paths
        of nested routers.
        z
{(\w+)_pk}z{\1_id})r<   ÚreplÚstring)r6   Úcoerce_pathr   ÚSCHEMA_COERCE_PATH_PK_SUFFIXÚreÚsub)r'   r-   r/   Úviewr9   s       €r1   r^   zSchemaGenerator.coerce_path^   s8   ø€ ô
 ‰wÑ" 4¨°Ó6ˆÜ×<Ò<Ü—6‘6 -°jÈÔNˆDØˆr3   c                 óæ  •— t        j                  |j                  «      }|r!|j                  }|j                  «       |_        t        ‰| �  ||d«      }d|_        |r|_        t        |t        j                  «      rt        ||j                  «      }nBt        |t        j                  «      rt        ||j                  «       «      }nt        d«       |S t        |di «      j!                  dd«      }|s|S t#        |«      }	t#        |j                  j$                  «      }
t'        |	|
«      s6t)        d„ |	j*                  D «       «      |
j*                  z   }t-        d|i «      }	 |	«       |_        |S )aÄ  
        customized create_view which is called when all routes are traversed. part of this
        is instantiating views with default params. in case of custom routes (@action) the
        custom AutoSchema is injected properly through 'initkwargs' on view. However, when
        decorating plain views like retrieve, this initialization logic is not running.
        Therefore forcefully set the schema if @extend_schema decorator was used.
        NTz€Using not supported View class. Class must be derived from APIView or any of its subclasses like GenericApiView, GenericViewSet.rZ   Úschemac              3   óX   K  — | ]"  }|t         j                  j                  vr|–— Œ$ y ­w©N)r	   ÚDEFAULT_SCHEMA_CLASSÚ__mro__)Ú.0Úclss     r1   ú	<genexpr>z.SchemaGenerator.create_view.<locals>.<genexpr>Ÿ   s,   è ø€ ò ØØœl×?Ñ?×GÑGÑGô ñùs   ‚(*ÚExtendedRearrangedSchema)r   Ú	get_matchrj   Úview_replacementr6   Úcreate_viewÚswagger_fake_viewr=   r   ÚViewSetMixinÚgetattrÚactionr   ÚAPIViewÚlowerr   Úgetr   rd   Ú
issubclassÚtuplerh   Útype)r'   r0   r/   ÚrequestÚoverride_viewÚoriginal_clsrb   rs   Úaction_schemaÚaction_schema_classÚview_schema_classÚmror9   s               €r1   ro   zSchemaGenerator.create_viewh   sV  ø€ ô -×6Ñ6°x·|±|ÓDˆÙØ#Ÿ<™<ˆLØ(×9Ñ9Ó;ˆHŒLô ‰wÑ" 8¨V°TÓ:ˆð "&ˆÔñ Ø'ˆHŒLä�dœH×1Ñ1Ô2Ü˜T 4§;¡;Ó/‰FÜ˜œeŸm™mÔ,Ü˜T 6§<¡<£>Ó2‰FäðPôð ˆKä ¨°"Ó5×9Ñ9¸(ÀDÓIˆÙàˆKô (¨Ó6ÐÜ% h§l¡l×&9Ñ&9Ó:ÐäÐ-Ð/@ÔAô ñ Ø2×:Ñ:ôó ð "×)Ñ)ñ*ˆCô #'Ð'AÀ3ÈÓ"KÐá)Ó+ˆŒØˆr3   c                 ó²   — | j                   €K| j                  | j                  | j                  «      | _        | j                  j                  «       | _         y y rf   )r   Úendpoint_inspector_clsr(   ÚurlconfrW   r2   )r'   s    r1   Ú_initialise_endpointsz%SchemaGenerator._initialise_endpoints¨   sA   € Ø�>‰>Ð!Ø!×8Ñ8¸¿¹ÈÏÉÓUˆDŒNØ!Ÿ^™^×=Ñ=Ó?ˆD�Nð "r3   c                 óª   — g }| j                   D ]A  \  }}}}| j                  ||«      }| j                  |||«      }|j                  ||||f«       ŒC |S )zY
        Generate (path, method, view) given (path, method, callback) for paths.
        )r   ro   r^   r@   )r'   Úview_endpointsr-   r.   r/   r0   rb   s          r1   Ú_get_paths_and_endpointsz(SchemaGenerator._get_paths_and_endpoints­   sl   € ð ˆØ26·.±.ò 	DÑ.ˆD�*˜f hØ×#Ñ# H¨fÓ5ˆDØ×#Ñ# D¨&°$Ó7ˆDØ×!Ñ! 4¨°V¸TÐ"BÕCð	Dð
 Ðr3   c                 óˆ  — i }| j                  «        | j                  «       }t        j                  €…t	        t        |D ��cg c]  \  }}}}|j                  ‘Œ c}}«      «      dkD  }|rJt        j                  j                  |D ��cg c]	  \  }}}}|‘Œ c}}«      }	t        j                  |	«      }	nd}	nt        j                  }	|	j                  d«      sd|	z   }	|D �]F  \  }}
}}t        |dg «      D ]  }t        |«       Œ t        |dg «      D ]  }t        |«       Œ t        j                   ||||«      |_        |s| j%                  |||«      sŒv|j&                  r/t)        |j&                  «      st        d|j&                  › d�«       nd|j&                  rX| j*                  xs |j&                  j,                  }|sŒät/        | j0                  j2                  ||||«      }t5        ||«      s�Œt7        |j8                  t:        «      sJ d	|j                  › d
�«       ‚t=        t?        |d|«      «      5  |j8                  jA                  ||
|	|| jB                  «      }ddd«       s�Œ�t        jD                  r't        jF                  |	d|t        jH                  ¬«      }t        jJ                  rt        jJ                  |z   }|j                  d«      sd|z   }t        jL                  rtO        ||«      \  }}|jQ                  |i «       |||   |jS                  «       <   �ŒI |S c c}}w c c}}w # 1 sw Y   ŒÕxY w)z: Iterate endpoints generating per method path operations. Né   ú/ú^ÚwarningsÚerrorsz$using unsupported versioning class "z.". view will be processed as unversioned view.z%Incompatible AutoSchema used on View z„. Is DRF's DEFAULT_SCHEMA_CLASS pointing to "drf_spectacular.openapi.AutoSchema" or any other drf-spectacular compatible AutoSchema?r9   rK   )r<   r\   r]   Úflags)*r„   r‡   r   ÚSCHEMA_PATH_PREFIXÚlenÚsetr9   Úosr-   Ú
commonpathr`   ÚescapeÚ
startswithr   r   r   ÚGET_MOCK_REQUESTrz   Úhas_view_permissionsÚversioning_classr   rT   Údefault_versionr   rW   r(   r   r=   rd   r   r
   rr   Úget_operationrU   ÚSCHEMA_PATH_PREFIX_TRIMra   Ú
IGNORECASEÚSCHEMA_PATH_PREFIX_INSERTÚCAMELIZE_NAMESr   Ú
setdefaultru   )r'   Úinput_requestÚpublicÚresultr   Ú_rb   Únon_trivial_prefixr-   Úpath_prefixr.   r/   ÚwÚeÚversionÚ	operations                   r1   ÚparsezSchemaGenerator.parse¹   s  € àˆØ×"Ñ"Ô$Ø×1Ñ1Ó3ˆ	ä×2Ñ2Ð:ô "%¤SÈi×)X¹]¸QÀÀ1Àd¨$¯.«.Ó)XÓ%YÓ!ZÐ]^Ñ!^ÐÙ!Ü Ÿg™g×0Ñ0ÈI×1V¹=¸4ÀÀAÀq²$Ó1VÓW�Ü Ÿi™i¨Ó4‘à!‘ä.×AÑAˆKØ×%Ñ% cÔ*Ø Ñ+ˆKà.7ó 7	5Ñ*ˆD�*˜f dä! $¨
°BÓ7ò �Ü�Q•ðä! $¨°"Ó5ò �Ü�a•ðô 0×@Ñ@ÀÈÈtÐUbÓcˆDŒLá˜d×7Ñ7¸¸fÀdÔKØà×$Ò$Ô-DÀT×EZÑEZÔ-[ÜØ:¸4×;PÑ;PÐ:Qð R5ð 6õð ×&Ò&à×$Ñ$ò =Ø×,Ñ,×<Ñ<ð ñ ØÜ,¨T¯^©^×-DÑ-DÀfÈdÐTXÐZaÓb�Ü0°°wÔ?Ùä˜dŸk™k¬:Ô6ð Ø7¸¿¹Ð7Gð HFð GóÐ6ô
 #¤7¨4°¸dÓ#CÓDñ Ø ŸK™K×5Ñ5Ø˜* k°6¸4¿=¹=ó�	÷ñ Ùä#×;Ò;Ü—v‘v k¸À4ÌrÏ}É}Ô]�ä#×=Ò=Ü+×EÑEÈÑL�à—?‘? 3Ô'Ø˜T‘z�ä#×2Ò2Ü"4°T¸9Ó"E‘��ià×Ñ˜d BÔ'Ø+4ˆF�4‰L˜Ÿ™›Ó(ðo7	5ðr ˆùóI *Yùã1V÷Tð ús   ÁL,Â	L2
È:*L8Ì8M	c           	      ó<  — t        «        t        | j                  ||«      | j                  j	                  t
        j                  «      | j                  xs t        |dd«      ¬«      }t
        j                  D ]  } ||| ||¬«      }Œ t        t        |«      «      S )z Generate a OpenAPI schema. r¨   N)ÚpathsÚ
componentsr¨   )r¢   Ú	generatorrz   r¡   )r   r   rª   rU   Úbuildr   ÚAPPEND_COMPONENTSrT   rr   ÚPOSTPROCESSING_HOOKSr   r   )r'   rz   r¡   r¢   r+   s        r1   Ú
get_schemazSchemaGenerator.get_schema  s�   € äÔÜ"Ø—*‘*˜W fÓ-Ø—}‘}×*Ñ*Ô+?×+QÑ+QÓRØ×$Ñ$ÒI¬°¸ÀDÓ(Iô
ˆô
 )×=Ñ=ò 	YˆDÙ °4ÀÐQWÔX‰Fð	Yô &Ô&=¸fÓ&EÓFÐFr3   rf   )NF)rL   rM   rN   r   r‚   rX   r^   ro   r„   r‡   rª   r²   rO   rP   s   @r1   rR   rR   U   s1   ø„ Ø/Ðô*ôõ>ò@@ò

òM÷^Gr3   rR   )&r’   r`   Údjango.urlsr   r   Úrest_frameworkr   r   Ú!rest_framework.schemas.generatorsr   r   ÚBaseEndpointEnumeratorÚrest_framework.settingsr	   Údrf_spectacular.drainager
   r   r   Údrf_spectacular.extensionsr   Údrf_spectacular.openapir   Údrf_spectacular.plumbingr   r   r   r   r   r   r   r   r   r   r   r   Údrf_spectacular.settingsr   rR   © r3   r1   ú<module>r¾      s^   ðÛ 	Û 	ç /ß *Ý AÝ ZÝ 0ç [Ñ [Ý ;Ý .÷÷ ÷ ó õ
 :ô=
Ð/ô =
ô@~GÐ)õ ~Gr3   