§
    ¦”j©5  ã                   ó  — d dl Z 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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$ d dl%m&Z&  G d„ de¦  «        Z G d„ de
¦  «        Z'dS )é    N)Ú
URLPatternÚURLResolver)ÚviewsÚviewsets)ÚBaseSchemaGenerator)ÚEndpointEnumerator)Úapi_settings)Úadd_trace_messageÚerrorÚget_overrideÚreset_generator_statsÚwarn)ÚOpenApiViewExtension)Ú
AutoSchema)ÚComponentRegistryÚalpha_operation_sorterÚbuild_root_objectÚcamelize_operationÚ	get_classÚis_versioning_supportedÚmodify_for_versioningÚnormalize_result_objectÚoperation_matches_versionÚprocess_webhooksÚsanitize_result_object)Úspectacular_settingsc                   ó2   ‡ — e Zd Zdd„Zˆ fd„Zd„ Zd„ Zˆ xZS )r   NÚ c                 ó�  — |                       ||¦  «        }t          j        D ]} ||¬¦  «        }Œi }|D ]\  }}}}	||f|vr||||	f|||f<   Œt          |                     ¦   «         ¦  «        }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
             úi/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/drf_spectacular/generators.pyÚget_api_endpointsz$EndpointEnumerator.get_api_endpoints   sñ   € Ø×/Ò/°¸&ÑAÔAˆå(Ô<ð 	:ð 	:ˆDØ ˜D¨=Ð9Ñ9Ô9ˆMˆMà%'Ð"Ø2?ð 	`ð 	`Ñ.ˆD�*˜f hØ�fˆ~Ð%?Ð?Ð?Ø<@À*ÈfÐV^Ð;_Ð*¨4°¨<Ñ8øåÐ7×>Ò>Ñ@Ô@ÑAÔAˆåÕ(Ô8Ñ9Ô9ð 	!Ý˜-Õ-AÔ-QÐRÑRÔRÐRÝ!Ô1ð 	!Ý˜-Õ-CÐDÑDÔDÐDà Ð ó    c                 óv   •— t          ¦   «                              |¦  «        }|                     dd¦  «        }|S )Nz\.ú.)ÚsuperÚget_path_from_regexÚreplace)r)   r0   r/   Ú	__class__s      €r3   r9   z&EndpointEnumerator.get_path_from_regex-   s2   ø€ Ý‰wŒw×*Ò*¨:Ñ6Ô6ˆà�|Š|˜E 3Ñ'Ô'ˆØˆr5   c                 óÖ  — |€| j         }g }|D ]Ú}|t          |j        ¦  «        z   }t          |t          ¦  «        rf|                      |¦  «        }|j        }|                      ||¦  «        r3|                      |¦  «        D ]}||||f}	| 	                    |	¦  «         ŒŒ”t          |t          ¦  «        r1|                      |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.
        N)r*   r+   )r*   ÚstrÚpatternÚ
isinstancer   r9   r2   Úshould_include_endpointÚget_allowed_methodsÚappendr   r"   Úurl_patternsÚextend)r)   r*   r+   r,   r>   r0   r/   r2   r1   ÚendpointÚnested_endpointss              r3   r"   z%EndpointEnumerator._get_api_endpoints3   s  € ð
 ÐØ”}ˆHàˆàð 	7ð 	7ˆGØ¥# g¤oÑ"6Ô"6Ñ6ˆJÝ˜'¥:Ñ.Ô.ð 7Ø×/Ò/°
Ñ;Ô;�Ø"Ô+�Ø×/Ò/°°hÑ?Ô?ð 7Ø"&×":Ò":¸8Ñ"DÔ"Dð 7ð 7˜Ø$(¨*°f¸hÐ#G˜Ø%×,Ò,¨XÑ6Ô6Ð6Ð6øå˜G¥[Ñ1Ô1ð 7Ø#'×#:Ò#:Ø$Ô1Ø%ð $;ñ $ô $Ð ð ×$Ò$Ð%5Ñ6Ô6Ð6øàÐr5   c                 óV  — t          |d¦  «        rat          |j        ¦  «        }d|j        v rt          |j        d         ¦  «        }nt          |j        j        ¦  «        }d„ ||z  D ¦   «         }n-i }d|j        v r|j        d         |d<    |j        di |¤Žj        }d„ |D ¦   «         S )NÚactionsÚhttp_method_namesc                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Úupper©Ú.0r1   s     r3   ú
<listcomp>z:EndpointEnumerator.get_allowed_methods.<locals>.<listcomp>X   s    € ÐPÐPÐP¨&�v—|’|‘~”~ÐPÐPÐPr5   c                 ó   — g | ]}|d v¯|‘Œ	S ))ÚOPTIONSÚHEADÚTRACEÚCONNECTrK   rM   s     r3   rO   z:EndpointEnumerator.get_allowed_methods.<locals>.<listcomp>a   s.   € ð 
ð 
ð 
ØØÐDÐDÐDð ØDÐDÐDr5   rK   )ÚhasattrÚsetrH   Ú
initkwargsÚclsrI   Úallowed_methods)r)   r2   rH   rI   ÚmethodsÚkwargss         r3   rA   z&EndpointEnumerator.get_allowed_methodsP   sÞ   € Ý�8˜YÑ'Ô'ð 	=Ý˜(Ô*Ñ+Ô+ˆGØ" hÔ&9Ð9Ð9Ý$'¨Ô(;Ð<OÔ(PÑ$QÔ$QÐ!Ð!å$'¨¬Ô(FÑ$GÔ$GÐ!àPÐP°GÐ>OÑ4OÐPÑPÔPˆGˆGð ˆFØ" hÔ&9Ð9Ð9Ø.6Ô.AÐBUÔ.V�Ð*Ñ+à"�h”lÐ,Ð, VÐ,Ð,Ô<ˆGð
ð 
Ø!(ð
ñ 
ô 
ð 	
r5   )Nr   )Ú__name__Ú
__module__Ú__qualname__r4   r9   r"   rA   Ú__classcell__©r;   s   @r3   r   r      sj   ø€ € € € € ð!ð !ð !ð !ð(ð ð ð ð ðð ð ð:
ð 
ð 
ð 
ð 
ð 
ð 
r5   r   c                   óX   ‡ — 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d
„ Zˆ xZS )ÚSchemaGeneratorc                 ó²   •— t          ¦   «         | _        |                     dd ¦  «        | _        d | _        g | _         t          ¦   «         j        |i |¤Ž d S )NÚapi_version)r   ÚregistryÚpoprd   Ú	inspectorÚschemas_storager8   Ú__init__)r)   Úargsr[   r;   s      €r3   ri   zSchemaGenerator.__init__j   sW   ø€ Ý)Ñ+Ô+ˆŒØ!Ÿ:š: m°TÑ:Ô:ˆÔØˆŒØ!ˆÔØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)r5   c                 ó”   •— 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)r8   Úcoerce_pathr   ÚSCHEMA_COERCE_PATH_PK_SUFFIXÚreÚsub)r)   r/   r1   Úviewr;   s       €r3   rn   zSchemaGenerator.coerce_pathq   sG   ø€ õ
 ‰wŒw×"Ò" 4¨°Ñ6Ô6ˆÝÔ<ð 	OÝ”6 -°jÈÐNÑNÔNˆDØˆr5   Nc                 óB  •— t          j        |¦  «        }|r |j        }|                     ¦   «         |_        t	          ¦   «                              ||d¦  «        }d|_        |r||_        t          |t          j	        ¦  «        rt          ||j        ¦  «        }nNt          |t          j        ¦  «        r#t          ||                     ¦   «         ¦  «        }nt          d¦  «         |S t          |di ¦  «                             dd¦  «        }|s|S t#          |¦  «        }	t#          |j        j        ¦  «        }
t'          |	|
¦  «        s7t)          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.r[   Úschemac              3   ó@   K  — | ]}|t           j        j        v¯|V — Œd S ©N)r	   ÚDEFAULT_SCHEMA_CLASSÚ__mro__)rN   rX   s     r3   ú	<genexpr>z.SchemaGenerator.create_view.<locals>.<genexpr>²   s?   è è € ð ð ØØ�lÔ?ÔGÐGÐGð ØGÐGÐGÐGðð r5   ÚExtendedRearrangedSchema)r   Ú	get_matchrX   Úview_replacementr8   Úcreate_viewÚswagger_fake_viewr?   r   ÚViewSetMixinÚgetattrÚactionr   ÚAPIViewÚlowerr   Úgetr   rt   Ú
issubclassÚtuplerx   ÚtypeÚ_set_schema_to_view)r)   r2   r1   ÚrequestÚoverride_viewÚoriginal_clsrr   r�   Úaction_schemaÚaction_schema_classÚview_schema_classÚmror;   s               €r3   r}   zSchemaGenerator.create_view{   sÀ  ø€ õ -Ô6°xÑ@Ô@ˆØð 	<Ø#œ<ˆLØ(×9Ò9Ñ;Ô;ˆHŒLõ ‰wŒw×"Ò" 8¨V°TÑ:Ô:ˆð "&ˆÔð ð 	(Ø'ˆHŒLå�d�HÔ1Ñ2Ô2ð 		Ý˜T 4¤;Ñ/Ô/ˆFˆFÝ˜�eœmÑ,Ô,ð 	Ý˜T 6§<¢<¡>¤>Ñ2Ô2ˆFˆFåðPñô ð ð ˆKå ¨°"Ñ5Ô5×9Ò9¸(ÀDÑIÔIˆØð 	àˆKõ (¨Ñ6Ô6ÐÝ% h¤lÔ&9Ñ:Ô:ÐåÐ-Ð/@ÑAÔAð 	Lõ ð ð Ø2Ô:ðñ ô ñ ô ð "Ô)ñ*ˆCõ #'Ð'AÀ3ÈÑ"KÔ"KÐà× Ò  Ð':Ð':Ñ'<Ô'<Ñ=Ô=Ð=Øˆr5   c                 óž   — | j         €E|                      | j        | j        ¦  «        | _        | j                             ¦   «         | _         d S d S rv   )r    Úendpoint_inspector_clsr*   Úurlconfrg   r4   )r)   s    r3   Ú_initialise_endpointsz%SchemaGenerator._initialise_endpoints»   sF   € ØŒ>Ð!Ø!×8Ò8¸¼ÈÌÑUÔUˆDŒNØ!œ^×=Ò=Ñ?Ô?ˆDŒNˆNˆNð "Ð!r5   c                 ó´   — g }| j         D ]M\  }}}}|                      ||¦  «        }|                      |||¦  «        }|                     ||||f¦  «         ŒN|S )zY
        Generate (path, method, view) given (path, method, callback) for paths.
        )r    r}   rn   rB   )r)   Úview_endpointsr/   r0   r1   r2   rr   s          r3   Ú_get_paths_and_endpointsz(SchemaGenerator._get_paths_and_endpointsÀ   sw   € ð ˆØ26´.ð 	Dð 	DÑ.ˆD�*˜f hØ×#Ò# H¨fÑ5Ô5ˆDØ×#Ò# D¨&°$Ñ7Ô7ˆDØ×!Ò! 4¨°V¸TÐ"BÑCÔCÐCÐCàÐr5   c           	      ó  — i }|                       ¦   «          |                      ¦   «         }t          j        €bt	          t          d„ |D ¦   «         ¦  «        ¦  «        dk    }|r3t          j        d„ |D ¦   «         ¦  «        }t          j	        |¦  «        }nd}nt          j        }| 
                    d¦  «        sd|z   }|D �]C\  }}}	}
t          |
dg ¦  «        D ]}t          |¦  «         Œt          |
dg ¦  «        D ]}t          |¦  «         Œt          j        |	||
|¦  «        |
_        |s|                      ||	|
¦  «        sŒ„|
j        r-t%          |
j        ¦  «        st          d	|
j        › d
�¦  «         nL|
j        rE| j        p|
j        j        }|sŒÕt+          | j        j        |	||
|¦  «        }t1          |
|¦  «        s�Œt3          |
j        t6          ¦  «        sJ d|
j        › d�¦   «         ‚t;          t=          |
d|
¦  «        ¦  «        5  |
j                             ||||	| j         ¦  «        }ddd¦  «         n# 1 swxY w Y   |s�ŒŽt          j!        r"t          j"        |d|t          j#        ¬¦  «        }t          j$        rt          j$        |z   }| 
                    d¦  «        sd|z   }t          j%        rtM          ||¦  «        \  }}| '                    |i ¦  «         |||         |	 (                    ¦   «         <   �ŒE|S )z: Iterate endpoints generating per method path operations. Nc                 ó&   — g | ]\  }}}}|j         ‘ŒS rK   r`   )rN   Ú_rr   s      r3   rO   z)SchemaGenerator.parse.<locals>.<listcomp>Õ   s"   € Ð)XÐ)XÐ)X¹]¸QÀÀ1Àd¨$¬.Ð)XÐ)XÐ)Xr5   é   c                 ó   — g | ]	\  }}}}|‘Œ
S rK   rK   )rN   r/   r™   s      r3   rO   z)SchemaGenerator.parse.<locals>.<listcomp>×   s    € Ð3XÐ3XÐ3X¹]¸TÀ1ÀaÈ°DÐ3XÐ3XÐ3Xr5   ú/ú^Ú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?r;   r   )r>   rl   rm   Úflags))r“   r–   r   ÚSCHEMA_PATH_PREFIXÚlenrV   Ú	posixpathÚ
commonpathrp   ÚescapeÚ
startswithr   r   r   ÚGET_MOCK_REQUESTr‰   Úhas_view_permissionsÚversioning_classr   rd   Údefault_versionr   rg   r*   r   r?   rt   r   r;   r
   r€   Úget_operationre   ÚSCHEMA_PATH_PREFIX_TRIMrq   Ú
IGNORECASEÚSCHEMA_PATH_PREFIX_INSERTÚCAMELIZE_NAMESr   Ú
setdefaultrƒ   )r)   Úinput_requestÚpublicÚresultr    Únon_trivial_prefixÚpath_prefixr/   r0   r1   rr   ÚwÚeÚversionÚ	operations                  r3   ÚparsezSchemaGenerator.parseÌ   s³  € àˆØ×"Ò"Ñ$Ô$Ð$Ø×1Ò1Ñ3Ô3ˆ	åÔ2Ð:õ "%¥SÐ)XÐ)XÈiÐ)XÑ)XÔ)XÑ%YÔ%YÑ!ZÔ!ZÐ]^Ò!^ÐØ!ð "Ý'Ô2Ð3XÐ3XÈiÐ3XÑ3XÔ3XÑYÔY�Ý œi¨Ñ4Ô4��à!��å.ÔAˆKØ×%Ò% cÑ*Ô*ð 	,Ø Ñ+ˆKà.7ð 7	5ñ 7	5Ñ*ˆD�*˜f då! $¨
°BÑ7Ô7ð ð �Ý�Q‘”��Ý! $¨°"Ñ5Ô5ð ð �Ý�a‘”��å/Ô@ÀÈÈtÐUbÑcÔcˆDŒLàð ˜d×7Ò7¸¸fÀdÑKÔKð ØàÔ$ð Õ-DÀTÔEZÑ-[Ô-[ð Ýð6¸4Ô;Pð 6ð 6ð 6ñô ð ð ð Ô&ð 	àÔ$ð =ØÔ,Ô<ð ð ð ØÝ,¨T¬^Ô-DÀfÈdÐTXÐZaÑbÔb�Ý0°°wÑ?Ô?ð Ùå˜dœk­:Ñ6Ô6ð ð ðG¸¼ð Gð Gð Gñô ð õ
 #¥7¨4°¸dÑ#CÔ#CÑDÔDð ð Ø œK×5Ò5Ø˜* k°6¸4¼=ñô �	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð Ùå#Ô;ð ^Ý”v k¸À4ÍrÌ}Ð]Ñ]Ô]�å#Ô=ð MÝ+ÔEÈÑL�à—?’? 3Ñ'Ô'ð "Ø˜T‘z�å#Ô2ð FÝ"4°T¸9Ñ"EÔ"E‘��ià×Ò˜d BÑ'Ô'Ð'Ø+4ˆF�4ŒL˜Ÿš™œÑ(Ñ(àˆs   È$I É I	ÉI	Fc           
      óŠ  — t          ¦   «          t          |                      ||¦  «        | j                             t
          j        ¦  «        t          t
          j        | j        ¦  «        | j	        pt          |dd¦  «        ¬¦  «        }t
          j        D ]} ||| ||¬¦  «        }Œt          t          |¦  «        ¦  «        S )z Generate a OpenAPI schema. r¸   N)ÚpathsÚ
componentsÚwebhooksr¸   )r³   Ú	generatorr‰   r²   )r   r   rº   re   Úbuildr   ÚAPPEND_COMPONENTSr   ÚWEBHOOKSrd   r€   ÚPOSTPROCESSING_HOOKSr   r   )r)   r‰   r²   r³   r-   s        r3   Ú
get_schemazSchemaGenerator.get_schema  s¼   € åÑÔÐÝ"Ø—*’*˜W fÑ-Ô-Ø”}×*Ò*Õ+?Ô+QÑRÔRÝ%Õ&:Ô&CÀTÄ]ÑSÔSØÔ$ÐI­°¸ÀDÑ(IÔ(Ið	
ñ 
ô 
ˆõ )Ô=ð 	Yð 	YˆDØ�T °4ÀÐQWÐXÑXÔXˆFˆFå%Õ&=¸fÑ&EÔ&EÑFÔFÐFr5   c                 ól   — t          j        |¦  «        |_        | j                             |¦  «         d S rv   )ÚweakrefÚproxyrt   rh   rB   )r)   rr   rt   s      r3   rˆ   z#SchemaGenerator._set_schema_to_view)  s2   € õ
 ”m FÑ+Ô+ˆŒØÔ×#Ò# FÑ+Ô+Ð+Ð+Ð+r5   rv   )NF)r\   r]   r^   r   r‘   ri   rn   r}   r“   r–   rº   rÄ   rˆ   r_   r`   s   @r3   rb   rb   g   sÑ   ø€ € € € € Ø/Ðð*ð *ð *ð *ð *ðð ð ð ð ð>ð >ð >ð >ð >ð >ð@@ð @ð @ð

ð 
ð 
ðMð Mð Mð^Gð Gð Gð Gð,ð ,ð ,ð ,ð ,ð ,ð ,r5   rb   )(r£   rp   rÆ   Údjango.urlsr   r   Úrest_frameworkr   r   Ú!rest_framework.schemas.generatorsr   r   ÚBaseEndpointEnumeratorÚrest_framework.settingsr	   Údrf_spectacular.drainager
   r   r   r   r   Údrf_spectacular.extensionsr   Údrf_spectacular.openapir   Údrf_spectacular.plumbingr   r   r   r   r   r   r   r   r   r   r   Údrf_spectacular.settingsr   rb   rK   r5   r3   ú<module>rÒ      sþ  ðØ Ð Ð Ð Ø 	€	€	€	Ø €€€à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø AÐ AÐ AÐ AÐ AÐ AØ ZÐ ZÐ ZÐ ZÐ ZÐ ZØ 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ø .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð
 :Ð 9Ð 9Ð 9Ð 9Ð 9ðL
ð L
ð L
ð L
ð L
Ð/ñ L
ô L
ð L
ð^H,ð H,ð H,ð H,ð H,Ð)ñ H,ô H,ð H,ð H,ð H,r5   