ó
    |ch;  ã                   óê   • S r SSKrSSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJrJr  SS	KJr  SS
KJr  SSKJr  SSKJr  S rS rS r\R4                  " S5      r " S S5      r " S S5      rg)z]
generators.py   # Top-down schema generation

See schemas.__init__.py for package overview.
é    N)Úimport_module)Úsettings)Úsimplify_regex)ÚPermissionDenied)ÚHttp404)Ú
URLPatternÚURLResolver)Ú
exceptions)Úclone_request)Úapi_settings)Ú_get_pkc                 ól   • U R                   R                  R                   n[        U5      R                  $ ©N)Ú_metaÚconcrete_modelr   Úname)ÚmodelÚmetas     Új/var/www/djangovue.mamus.xyz/django/venv/lib/python3.13/site-packages/rest_framework/schemas/generators.pyÚget_pk_namer      s'   € Ø�;‰;×%Ñ%×+Ñ+€DÜ�4‹=×ÑÐó    c                 óT   • SSK Jn  [        U SS5      nUSL=(       a    [        X!5      $ )zL
Return `True` if the given view callback is a REST framework view/viewset.
r   )ÚAPIViewÚclsN)Úrest_framework.viewsr   ÚgetattrÚ
issubclass)Úcallbackr   r   s      r   Úis_api_viewr      s)   € õ
 -Ü
�(˜E 4Ó
(€CØ�tˆO×9¤¨CÓ!9Ð9r   c                 óB   • U u  pnSSSSSS.R                  US5      nU4$ )Nr   é   é   é   é   )ÚGETÚPOSTÚPUTÚPATCHÚDELETEé   )Úget)ÚendpointÚpathÚmethodr   Úmethod_prioritys        r   Úendpoint_orderingr0   $   s=   € Ø%Ñ€D�(àØØØØñ÷ 
�cˆ&�!ƒnð ð ÐÐr   z/<(?:(?P<converter>[^>:]+):)?(?P<parameter>\w+)>c                   ó>   • \ rS rSrSrS
S jrSS jrS rS rS r	S	r
g)ÚEndpointEnumeratoré5   zJ
A class to determine the available API endpoints that a project exposes.
Nc                 óš   • UcB  Uc  [         R                  n[        U[        5      (       a  [	        U5      nOUnUR
                  nXl        g r   )r   ÚROOT_URLCONFÚ
isinstanceÚstrr   ÚurlpatternsÚpatterns)Úselfr9   ÚurlconfÚurlss       r   Ú__init__ÚEndpointEnumerator.__init__9   sF   € ØÑØ‰ä"×/Ñ/�ô ˜'¤3×'Ñ'Ü$ WÓ-‘à�Ø×'Ñ'ˆHà �r   c                 óø  • Uc  U R                   n/ nU HÖ  nU[        UR                  5      -   n[        U[        5      (       ad  U R                  U5      nUR                  nU R                  Xg5      (       a/  U R                  U5       H  nXhU4n	UR                  U	5        M     M’  M”  [        U[        5      (       d  M«  U R                  UR                  US9n
UR                  U
5        MØ     [        U[        S9$ )zJ
Return a list of all available API endpoints by inspecting the URL conf.
)r9   Úprefix)Úkey)r9   r7   Úpatternr6   r   Úget_path_from_regexr   Úshould_include_endpointÚget_allowed_methodsÚappendr	   Úget_api_endpointsÚurl_patternsÚextendÚsortedr0   )r:   r9   r@   Úapi_endpointsrB   Ú
path_regexr-   r   r.   r,   Únested_endpointss              r   rG   Ú$EndpointEnumerator.get_api_endpointsH   sô   € ð ÑØ—}‘}ˆHàˆãˆGØ¤# g§o¡oÓ"6Ñ6ˆJÜ˜'¤:×.Ñ.Ø×/Ñ/°
Ó;�Ø"×+Ñ+�Ø×/Ñ/°×?Ñ?Ø"&×":Ñ":¸8Ö"D˜Ø$(°(Ð#;˜Ø%×,Ñ,¨XÖ6ó #Eñ @ô
 ˜G¤[×1Ó1Ø#'×#9Ñ#9Ø$×1Ñ1Ø%ð $:ð $Ð ð ×$Ñ$Ð%5Ö6ñ  ô" �mÔ):Ñ;Ð;r   c                 óP   • [        U5      n[        R                  " [        SU5      $ )z7
Given a URL conf regex, return a URI template string.
z{\g<parameter>})r   ÚreÚsubÚ_PATH_PARAMETER_COMPONENT_RE)r:   rL   r-   s      r   rC   Ú&EndpointEnumerator.get_path_from_regexd   s%   € ô ˜jÓ)ˆô �vŠvÔ2Ð4FÈÓMÐMr   c                 óò   • [        U5      (       d  gUR                  R                  c  gSUR                  ;   a  UR                  S   c  gUR	                  S5      (       d  UR	                  S5      (       a  gg)z9
Return `True` if the given endpoint should be included.
FÚschemaz	.{format}z
.{format}/T)r   r   rU   Ú
initkwargsÚendswith)r:   r-   r   s      r   rD   Ú*EndpointEnumerator.should_include_endpointq   sj   € ô ˜8×$Ñ$Øà�<‰<×ÑÑ&Øà�x×*Ñ*Ó*Ø×"Ñ" 8Ñ,Ñ4Øà�=‰=˜×%Ñ%¨¯©°|×)DÑ)DØàr   c                 óL  • [        US5      (       aV  [        UR                  5      n[        UR                  R                  5      nX#-   Vs/ s H  oDR                  5       PM     nnOUR                  5       R                  nU Vs/ s H  oDS;  d  M
  UPM     sn$ s  snf s  snf )z<
Return a list of the valid HTTP methods for this endpoint.
Úactions)ÚOPTIONSÚHEAD)ÚhasattrÚsetrZ   r   Úhttp_method_namesÚupperÚallowed_methods)r:   r   rZ   r_   r.   Úmethodss         r   rE   Ú&EndpointEnumerator.get_allowed_methods„   s�   € ô �8˜Y×'Ñ'Ü˜(×*Ñ*Ó+ˆGÜ # H§L¡L×$BÑ$BÓ CÐØ4;Ò4OÓPÒ4O¨&—|‘|–~Ñ4OˆGÐPˆGà—l‘l“n×4Ñ4ˆGá%,ÓR¢W˜6Ð>QÑ0Q—¡WÑRÐRùò	 Qùò Ss   ÁBÂ	B!ÂB!)r9   )NN)NÚ )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r=   rG   rC   rD   rE   Ú__static_attributes__© r   r   r2   r2   5   s"   † ñô!ô<ò8Nòõ&Sr   r2   c                   óR   • \ rS rSr\rSrSS jrS rS r	SS jr
S rSS jrS	 rS
rg)ÚBaseSchemaGeneratoré’   Nc                 óÈ   • U(       a  UR                  S5      (       d  US-  n[        R                  U l        X@l        XPl        Xl        X0l        X`l        X l	        S U l
        g )NÚ/)rW   r   ÚSCHEMA_COERCE_PATH_PKÚcoerce_path_pkr9   r;   ÚtitleÚdescriptionÚversionÚurlÚ	endpoints)r:   rs   rv   rt   r9   r;   ru   s          r   r=   ÚBaseSchemaGenerator.__init__š   sP   € Þ�s—|‘| C×(Ñ(Ø�3‰JˆCä*×@Ñ@ˆÔà ŒØŒØŒ
Ø&ÔØŒØŒØˆ�r   c                 ó–   • U R                   c<  U R                  U R                  U R                  5      nUR	                  5       U l         g g r   )rw   Úendpoint_inspector_clsr9   r;   rG   )r:   Ú	inspectors     r   Ú_initialise_endpointsÚ)BaseSchemaGenerator._initialise_endpoints¨   s;   € Ø�>‰>Ñ!Ø×3Ñ3°D·M±MÀ4Ç<Á<ÓPˆIØ&×8Ñ8Ó:ˆD�Nð "r   c                 óÌ   • / n/ nU R                    HN  u  pEnU R                  XeU5      nU R                  XEU5      nUR                  U5        UR                  XEU45        MP     X#4$ )zI
Generate (path, method, view) given (path, method, callback) for paths.
)rw   Úcreate_viewÚcoerce_pathrF   )r:   ÚrequestÚpathsÚview_endpointsr-   r.   r   Úviews           r   Ú_get_paths_and_endpointsÚ,BaseSchemaGenerator._get_paths_and_endpoints­   so   € ð ˆØˆØ&*§n¤nÑ"ˆD˜(Ø×#Ñ# H°gÓ>ˆDØ×#Ñ# D°$Ó7ˆDØ�L‰L˜ÔØ×!Ñ! 4°Ð"6Ö7ñ	 '5ð Ð$Ð$r   c           	      óF  • UR                   " S0 [        US0 5      D6nSUl        0 Ul        SUl        SUl        [        USS5      Ul        [        USS5      nUb2  US:X  a  SUl        O$UR                  UR                  5       5      Ul        Ub  [        X25      Ul        U$ )z3
Given a callback, return an actual view instance.
rV   rk   NrZ   r[   Úmetadata)r   r   ÚargsÚkwargsÚformat_kwargr�   Ú
action_mapÚactionr+   Úlowerr   )r:   r   r.   r�   r„   rZ   s         r   r   ÚBaseSchemaGenerator.create_view»   s›   € ð �|Š|ÑBœg h°¸bÓAÑBˆØˆŒ	ØˆŒØ ˆÔØˆŒÜ! (¨I°tÓ<ˆŒä˜( I¨tÓ4ˆØÑØ˜Ó"Ø(�•à%Ÿk™k¨&¯,©,«.Ó9�”àÑÜ(¨Ó9ˆDŒLàˆr   c                 ó¸   • U R                   (       a  SU;  a  U$ [        [        USS5      SS5      nU(       a  [        U5      nOSnUR                  SSU-  5      $ )zÂ
Coerce {pk} path arguments into the name of the model field,
where possible. This is cleaner for an external representation.
(Ie. "this is an identifier", not "this is a database primary key")
z{pk}ÚquerysetNr   Úidz{%s})rr   r   r   Úreplace)r:   r-   r.   r„   r   Ú
field_names         r   r€   ÚBaseSchemaGenerator.coerce_pathÒ   sX   € ð ×"×" f°DÓ&8ØˆKÜœ  j°$Ó7¸À$ÓGˆÞÜ$ UÓ+‰JàˆJØ�|‰|˜F F¨ZÑ$7Ó8Ð8r   c                 ó   • [        S5      e)Nz0.get_schema() must be implemented in subclasses.)ÚNotImplementedError)r:   r�   Úpublics      r   Ú
get_schemaÚBaseSchemaGenerator.get_schemaá   s   € Ü!Ð"TÓUÐUr   c                 ó¢   • UR                   c  g UR                  UR                   5        g! [        R                  [        [
        4 a     gf = f)zI
Return `True` if the incoming request has the correct view permissions.
TF)r�   Úcheck_permissionsr
   ÚAPIExceptionr   r   )r:   r-   r.   r„   s       r   Úhas_view_permissionsÚ(BaseSchemaGenerator.has_view_permissionsä   sO   € ð �<‰<ÑØð	Ø×"Ñ" 4§<¡<Ô0ð øô ×'Ñ'¬Ô2BÐCó 	Ùð	ús   �, ¬AÁA)rr   rt   rw   r9   rs   rv   r;   ru   )NNNNNNr   )NF)re   rf   rg   rh   r2   rz   rr   r=   r|   r…   r   r€   r™   rž   rj   rk   r   r   rm   rm   ’   s3   † Ø/Ðð
 €Nôò;ò
%ôò.9ôVõr   rm   )ri   rP   Ú	importlibr   Údjango.confr   Údjango.contrib.admindocs.viewsr   Údjango.core.exceptionsr   Údjango.httpr   Údjango.urlsr   r	   Úrest_frameworkr
   Úrest_framework.requestr   Úrest_framework.settingsr   Úrest_framework.utils.model_metar   r   r   r0   ÚcompilerR   r2   rm   rk   r   r   Ú<module>r«      sk   ðñó
 
Ý #å  Ý 9Ý 3Ý ß /å %Ý 0Ý 0Ý 3òò
:ò	ð  "ŸzšzØ6ó Ð ÷
ZSñ ZS÷z]ò ]r   