Ë
    ¢S9i©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'y)é    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   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
             úm/home/cursorai/projects/telegram-earn/backend/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ð 3@ô Ð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      €r2   r8   z&EndpointEnumerator.get_path_from_regex-   s'   ø€ Ü‰wÑ*¨:Ó6ˆà�|‰|˜E 3Ó'ˆØˆr4   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   r8   r1   Úshould_include_endpointÚget_allowed_methodsÚappendr   r!   Úurl_patternsÚextend)r(   r)   r*   r+   r=   r/   r.   r1   r0   ÚendpointÚnested_endpointss              r2   r!   z%EndpointEnumerator._get_api_endpoints3   sã   € ð
 ÐØ—}‘}ˆHàˆãˆGØ¤# g§o¡oÓ"6Ñ6ˆJÜ˜'¤:Ô.Ø×/Ñ/°
Ó;�Ø"×+Ñ+�Ø×/Ñ/°°hÕ?Ø"&×":Ñ":¸8Ö"D˜Ø$(¨*°f¸hÐ#G˜Ø%×,Ñ,¨XÕ6ñ #Eô ˜G¤[Õ1Ø#'×#:Ñ#:Ø$×1Ñ1Ø%ð $;ó $Ð ð ×$Ñ$Ð%5Õ6ð  ð" Ðr4   c                 óÊ  — t        |d«      r|t        |j                  «      }d|j                  v rt        |j                  d   «      }nt        |j                  j
                  «      }||z  D �cg c]  }|j                  «       ‘Œ }}n>i }d|j                  v r|j                  d   |d<    |j                  di |¤Žj                  }|D �cg c]  }|dvr|‘Œ
 c}S c c}w c c}w )NÚactionsÚhttp_method_names)ÚOPTIONSÚHEADÚTRACEÚCONNECT© )ÚhasattrÚsetrG   Ú
initkwargsÚclsrH   ÚupperÚallowed_methods)r(   r1   rG   rH   r0   ÚmethodsÚkwargss          r2   r@   z&EndpointEnumerator.get_allowed_methodsP   sò   € Ü�8˜YÔ'Ü˜(×*Ñ*Ó+ˆGØ" h×&9Ñ&9Ñ9Ü$'¨×(;Ñ(;Ð<OÑ(PÓ$QÑ!ä$'¨¯©×(FÑ(FÓ$GÐ!à4;Ð>OÒ4OÓPÑ4O¨&�v—|‘|•~Ð4OˆGÑPð ˆFØ" h×&9Ñ&9Ñ9Ø.6×.AÑ.AÐBUÑ.V�Ð*Ñ+à"�h—l‘lÑ, VÑ,×<Ñ<ˆGñ ")ó
Ù!(�vØÐDÑDò  ñ
ð 	
ùò Qùò
s   Á/CÃC )NÚ )Ú__name__Ú
__module__Ú__qualname__r3   r8   r!   r@   Ú__classcell__©r:   s   @r2   r   r      s   ø„ ó!ô(òö:
r4   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        «       | _        |j                  dd «      | _        d | _        g | _        t        ‰| �  |i |¤Ž y )NÚapi_version)r   ÚregistryÚpopr_   Ú	inspectorÚschemas_storager7   Ú__init__)r(   ÚargsrU   r:   s      €r2   rd   zSchemaGenerator.__init__j   sA   ø€ Ü)Ó+ˆŒØ!Ÿ:™: m°TÓ:ˆÔØˆŒØ!ˆÔÜ‰Ñ˜$Ð) &Ó)r4   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)r7   Úcoerce_pathr   ÚSCHEMA_COERCE_PATH_PK_SUFFIXÚreÚsub)r(   r.   r0   Úviewr:   s       €r2   ri   zSchemaGenerator.coerce_pathq   s8   ø€ ô
 ‰wÑ" 4¨°Ó6ˆÜ×<Ò<Ü—6‘6 -°jÈÔNˆDØˆr4   c                 óè  •— t        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 «      }	| j/                  | |	«       «       |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.rU   Úschemac              3   óX   K  — | ]"  }|t         j                  j                  vr|–— Œ$ y ­w©N)r	   ÚDEFAULT_SCHEMA_CLASSÚ__mro__)Ú.0rQ   s     r2   Ú	<genexpr>z.SchemaGenerator.create_view.<locals>.<genexpr>²   s,   è ø€ ð Ù:˜Øœl×?Ñ?×GÑGÑGô Ñ:ùs   ‚(*ÚExtendedRearrangedSchema)r   Ú	get_matchrQ   Úview_replacementr7   Úcreate_viewÚswagger_fake_viewr>   r   ÚViewSetMixinÚgetattrÚactionr   ÚAPIViewÚlowerr   Úgetr   ro   Ú
issubclassÚtuplers   ÚtypeÚ_set_schema_to_view)r(   r1   r0   ÚrequestÚoverride_viewÚoriginal_clsrm   r}   Úaction_schemaÚaction_schema_classÚview_schema_classÚmror:   s               €r2   ry   zSchemaGenerator.create_view{   s\  ø€ ô -×6Ñ6°xÓ@ˆÙØ#Ÿ<™<ˆ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Ðà× Ñ  Ñ':Ó'<Ô=Øˆr4   c                 ó²   — | j                   €K| j                  | j                  | j                  «      | _        | j                  j                  «       | _         y y rq   )r   Úendpoint_inspector_clsr)   Úurlconfrb   r3   )r(   s    r2   Ú_initialise_endpointsz%SchemaGenerator._initialise_endpoints»   sA   € Ø�>‰>Ð!Ø!×8Ñ8¸¿¹ÈÏÉÓUˆDŒNØ!Ÿ^™^×=Ñ=Ó?ˆD�Nð "r4   c                 óª   — g }| j                   D ]A  \  }}}}| j                  ||«      }| j                  |||«      }|j                  ||||f«       ŒC |S )zY
        Generate (path, method, view) given (path, method, callback) for paths.
        )r   ry   ri   rA   )r(   Úview_endpointsr.   r/   r0   r1   rm   s          r2   Ú_get_paths_and_endpointsz(SchemaGenerator._get_paths_and_endpointsÀ   sf   € ð ˆØ26·.´.Ñ.ˆD�*˜f hØ×#Ñ# H¨fÓ5ˆDØ×#Ñ# D¨&°$Ó7ˆDØ×!Ñ! 4¨°V¸TÐ"BÕCð 3Að
 Ðr4   c                 ót  — i }| j                  «        | j                  «       }t        j                  €{t	        t        |D ��cg c]  \  }}}}|j                  ‘Œ c}}«      «      dkD  }|r@t        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-        | j.                  j0                  ||||«      }t3        ||«      s�Œt5        |j6                  t8        «      sJ d	|j                  › d
�«       ‚t;        t=        |d|«      «      5  |j6                  j?                  ||
|	|| j@                  «      }ddd«       s�Œ�t        jB                  r't        jD                  |	d|t        jF                  ¬«      }t        jH                  rt        jH                  |z   }|j                  d«      sd|z   }t        jJ                  rtM        ||«      \  }}|jO                  |i «       |||   |jQ                  «       <   �Œ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?r:   rV   )r=   rg   rh   Úflags))r�   r’   r   ÚSCHEMA_PATH_PREFIXÚlenrO   r:   Ú	posixpathÚ
commonpathrk   ÚescapeÚ
startswithr   r   r   ÚGET_MOCK_REQUESTr…   Úhas_view_permissionsÚversioning_classr   r_   Údefault_versionr   rb   r)   r   r>   ro   r   r
   r|   Úget_operationr`   ÚSCHEMA_PATH_PREFIX_TRIMrl   Ú
IGNORECASEÚSCHEMA_PATH_PREFIX_INSERTÚCAMELIZE_NAMESr   Ú
setdefaultr   )r(   Úinput_requestÚpublicÚresultr   Ú_rm   Únon_trivial_prefixr.   Úpath_prefixr/   r0   ÚwÚeÚversionÚ	operations                   r2   ÚparsezSchemaGenerator.parseÌ   só  € àˆØ×"Ñ"Ô$Ø×1Ñ1Ó3ˆ	ä×2Ñ2Ð:ô "%¤SÉiÔ)XÉi¹]¸QÀÀ1Àd¨$¯.«.ÈiÒ)XÓ%YÓ!ZÐ]^Ñ!^ÐÙ!Ü'×2Ñ2ÉiÔ3XÉi¹]¸TÀ1ÀaÈ²DÈiÒ3XÓY�Ü Ÿi™i¨Ó4‘à!‘ä.×AÑAˆKØ×%Ñ% cÔ*Ø Ñ+ˆKä.7Ñ*ˆD�*˜f dä! $¨
°BÖ7�Ü�Q•ð 8ä! $¨°"Ö5�Ü�a•ð 6ô 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¿=¹=ó�	÷ Eñ Ùä#×;Ò;Ü—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 /8ðr ˆùóI *Yùã3X÷T EÐDús   ÁL"Á?L(
È0*L.Ì.L7	c           
      ó‚  — t        «        t        | j                  ||«      | j                  j	                  t
        j                  «      t        t
        j                  | j                  «      | j                  xs 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´   r`   Úbuildr   ÚAPPEND_COMPONENTSr   ÚWEBHOOKSr_   r|   ÚPOSTPROCESSING_HOOKSr   r   )r(   r…   r«   r¬   r,   s        r2   Ú
get_schemazSchemaGenerator.get_schema  s›   € äÔÜ"Ø—*‘*˜W fÓ-Ø—}‘}×*Ñ*Ô+?×+QÑ+QÓRÜ%Ô&:×&CÑ&CÀTÇ]Á]ÓSØ×$Ñ$ÒI¬°¸ÀDÓ(Iô	
ˆô )×=Ô=ˆDÙ °4ÀÐQWÔX‰Fð >ô &Ô&=¸fÓ&EÓFÐFr4   c                 ón   — t        j                  |«      |_        | j                  j	                  |«       y rq   )ÚweakrefÚproxyro   rc   rA   )r(   rm   ro   s      r2   r„   z#SchemaGenerator._set_schema_to_view)  s(   € ô
 —m‘m FÓ+ˆŒØ×Ñ×#Ñ# FÕ+r4   rq   )NF)rW   rX   rY   r   r�   rd   ri   ry   r�   r’   r´   r¾   r„   rZ   r[   s   @r2   r]   r]   g   s6   ø„ Ø/Ðô*ôõ>ò@@ò

òMó^Gö,r4   r]   )(rœ   rk   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   r]   rM   r4   r2   Ú<module>rÌ      sg   ðÛ Û 	Û ç /ß *Ý AÝ ZÝ 0÷õ õ <Ý .÷÷ ÷ ñ õ
 :ôL
Ð/ô L
ô^H,Ð)õ H,r4   