Ë
    ûûàg;  ã                   óê   — d Z ddlZddlmZ ddlmZ ddlmZ ddlm	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 ddlmZ d„ Zd„ Zd„ Z ej4                  d«      Z G d„ d«      Z G d„ d«      Zy)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   — | j                   j                  j                   }t        |«      j                  S ©N)Ú_metaÚconcrete_modelr   Úname)ÚmodelÚmetas     ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/rest_framework/schemas/generators.pyÚget_pk_namer      s'   € Ø�;‰;×%Ñ%×+Ñ+€DÜ�4‹=×ÑÐó    c                 óL   — ddl m} t        | dd«      }|duxr t        ||«      S )zT
    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                 óD   — | \  }}}ddddddœj                  |d«      }|fS )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                   ó2   — e Zd ZdZdd„Zd	d„Zd„ Zd„ Zd„ Zy)
ÚEndpointEnumeratorzR
    A class to determine the available API endpoints that a project exposes.
    Nc                 óŽ   — |€<|€t         j                  }t        |t        «      rt	        |«      }n|}|j
                  }|| _        y r   )r   ÚROOT_URLCONFÚ
isinstanceÚstrr   ÚurlpatternsÚpatterns)Úselfr8   ÚurlconfÚurlss       r   Ú__init__zEndpointEnumerator.__init__9   sE   € ØÐØˆä"×/Ñ/�ô ˜'¤3Ô'Ü$ WÓ-‘à�Ø×'Ñ'ˆHà ˆ�r   c                 óÚ  — |€| j                   }g }|D ]Æ  }|t        |j                  «      z   }t        |t        «      r]| j                  |«      }|j                  }| j                  ||«      sŒ[| j                  |«      D ]  }|||f}	|j                  |	«       Œ Œˆt        |t        «      sŒ™| j                  |j                  |¬«      }
|j                  |
«       ŒÈ t        |t        ¬«      S )zZ
        Return a list of all available API endpoints by inspecting the URL conf.
        )r8   Úprefix)Úkey)r8   r6   Úpatternr5   r   Úget_path_from_regexr   Úshould_include_endpointÚget_allowed_methodsÚappendr	   Úget_api_endpointsÚurl_patternsÚextendÚsortedr0   )r9   r8   r>   Úapi_endpointsr@   Ú
path_regexr-   r   r.   r,   Únested_endpointss              r   rE   z$EndpointEnumerator.get_api_endpointsH   sò   € ð ÐØ—}‘}ˆHàˆàò 	7ˆGØ¤# g§o¡oÓ"6Ñ6ˆJÜ˜'¤:Ô.Ø×/Ñ/°
Ó;�Ø"×+Ñ+�Ø×/Ñ/°°hÕ?Ø"&×":Ñ":¸8Ó"Dò 7˜Ø$(¨&°(Ð#;˜Ø%×,Ñ,¨XÕ6ñ7ô ˜G¤[Õ1Ø#'×#9Ñ#9Ø$×1Ñ1Ø%ð $:ó $Ð ð ×$Ñ$Ð%5Õ6ð	7ô" �mÔ):Ô;Ð;r   c                 óN   — t        |«      }t        j                  t        d|«      S )zG
        Given a URL conf regex, return a URI template string.
        z{\g<parameter>})r   ÚreÚsubÚ_PATH_PARAMETER_COMPONENT_RE)r9   rJ   r-   s      r   rA   z&EndpointEnumerator.get_path_from_regexd   s%   € ô ˜jÓ)ˆô �v‰vÔ2Ð4FÈÓMÐMr   c                 óÌ   — t        |«      sy|j                  j                  €yd|j                  v r|j                  d   €y|j	                  d«      s|j	                  d«      ryy)zI
        Return `True` if the given endpoint should be included.
        FÚschemaz	.{format}z
.{format}/T)r   r   rQ   Ú
initkwargsÚendswith)r9   r-   r   s      r   rB   z*EndpointEnumerator.should_include_endpointq   sa   € ô ˜8Ô$Øà�<‰<×ÑÐ&Øà�x×*Ñ*Ñ*Ø×"Ñ" 8Ñ,Ð4Øà�=‰=˜Ô%¨¯©°|Ô)DØàr   c                 ó6  — t        |d«      rUt        |j                  «      }t        |j                  j                  «      }||z  D �cg c]  }|j                  «       ‘Œ }}n|j                  «       j                  }|D �cg c]	  }|dvsŒ|‘Œ c}S c c}w c c}w )zL
        Return a list of the valid HTTP methods for this endpoint.
        Úactions)ÚOPTIONSÚHEAD)ÚhasattrÚsetrU   r   Úhttp_method_namesÚupperÚallowed_methods)r9   r   rU   rZ   r.   Úmethodss         r   rC   z&EndpointEnumerator.get_allowed_methods„   sˆ   € ô �8˜YÔ'Ü˜(×*Ñ*Ó+ˆGÜ # H§L¡L×$BÑ$BÓ CÐØ4;Ð>OÑ4OÖP¨&�v—|‘|•~ÐPˆGÑPà—l‘l“n×4Ñ4ˆGà%,ÖR˜6°Ð>QÒ0Q’ÒRÐRùò	 Qùò Ss   ÁBÂ 	BÂ
B)NN)NÚ )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   rE   rA   rB   rC   © r   r   r2   r2   5   s"   „ ñó!ó<ò8Nòó&Sr   r2   c                   óD   — e Zd ZeZdZd	d„Zd„ Zd„ Zd
d„Z	d„ Z
dd„Zd„ Zy)ÚBaseSchemaGeneratorNc                 óÀ   — |r|j                  d«      s|dz  }t        j                  | _        || _        || _        || _        || _        || _        || _	        d | _
        y )Nú/)rS   r   ÚSCHEMA_COERCE_PATH_PKÚcoerce_path_pkr8   r:   ÚtitleÚdescriptionÚversionÚurlÚ	endpoints)r9   rj   rm   rk   r8   r:   rl   s          r   r<   zBaseSchemaGenerator.__init__š   sY   € Ù�s—|‘| CÔ(Ø�3‰JˆCä*×@Ñ@ˆÔà ˆŒØˆŒØˆŒ
Ø&ˆÔØˆŒØˆŒØˆ�r   c                 ó”   — | j                   €<| j                  | j                  | j                  «      }|j	                  «       | _         y y r   )rn   Úendpoint_inspector_clsr8   r:   rE   )r9   Ú	inspectors     r   Ú_initialise_endpointsz)BaseSchemaGenerator._initialise_endpoints¨   s;   € Ø�>‰>Ð!Ø×3Ñ3°D·M±MÀ4Ç<Á<ÓPˆIØ&×8Ñ8Ó:ˆD�Nð "r   c                 óÒ   — g }g }| j                   D ]Q  \  }}}| j                  |||«      }| j                  |||«      }|j                  |«       |j                  |||f«       ŒS ||fS )zY
        Generate (path, method, view) given (path, method, callback) for paths.
        )rn   Úcreate_viewÚcoerce_pathrD   )r9   ÚrequestÚpathsÚview_endpointsr-   r.   r   Úviews           r   Ú_get_paths_and_endpointsz,BaseSchemaGenerator._get_paths_and_endpoints­   s~   € ð ˆØˆØ&*§n¡nò 	8Ñ"ˆD�&˜(Ø×#Ñ# H¨f°gÓ>ˆDØ×#Ñ# D¨&°$Ó7ˆDØ�L‰L˜ÔØ×!Ñ! 4¨°Ð"6Õ7ð		8ð �nÐ$Ð$r   c           	      óB  —  |j                   di t        |di «      ¤Ž}d|_        i |_        d|_        d|_        t        |dd«      |_        t        |dd«      }|�1|dk(  rd|_        n$|j                  |j                  «       «      |_        |�t        ||«      |_        |S )zC
        Given a callback, return an actual view instance.
        rR   rc   NrU   rV   Úmetadata)r   r   ÚargsÚkwargsÚformat_kwargrv   Ú
action_mapÚactionr+   Úlowerr   )r9   r   r.   rv   ry   rU   s         r   rt   zBaseSchemaGenerator.create_view»   sŸ   € ð ˆx�|‰|ÑBœg h°¸bÓAÑBˆØˆŒ	ØˆŒØ ˆÔØˆŒÜ! (¨I°tÓ<ˆŒä˜( I¨tÓ4ˆØÐØ˜Ò"Ø(�•à%Ÿk™k¨&¯,©,«.Ó9�”àÐÜ(¨°&Ó9ˆDŒLàˆr   c                 ó    — | j                   rd|vr|S t        t        |dd«      dd«      }|rt        |«      }nd}|j                  dd|z  «      S )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})ri   r   r   Úreplace)r9   r-   r.   ry   r   Ú
field_names         r   ru   zBaseSchemaGenerator.coerce_pathÒ   sX   € ð ×"Ò" f°DÑ&8ØˆKÜœ  j°$Ó7¸À$ÓGˆÙÜ$ UÓ+‰JàˆJØ�|‰|˜F F¨ZÑ$7Ó8Ð8r   c                 ó   — t        d«      ‚)Nz0.get_schema() must be implemented in subclasses.)ÚNotImplementedError)r9   rv   Úpublics      r   Ú
get_schemazBaseSchemaGenerator.get_schemaá   s   € Ü!Ð"TÓUÐUr   c                 óž   — |j                   €y	 |j                  |j                   «       y# t        j                  t        t
        f$ r Y yw xY w)zY
        Return `True` if the incoming request has the correct view permissions.
        TF)rv   Úcheck_permissionsr
   ÚAPIExceptionr   r   )r9   r-   r.   ry   s       r   Úhas_view_permissionsz(BaseSchemaGenerator.has_view_permissionsä   sO   € ð �<‰<ÐØð	Ø×"Ñ" 4§<¡<Ô0ð øô ×'Ñ'¬Ô2BÐCò 	Ùð	ús   �+ «AÁA)NNNNNNr   )NF)r_   r`   ra   r2   rp   ri   r<   rr   rz   rt   ru   r‹   r�   rc   r   r   re   re   ’   s3   „ Ø/Ðð
 €Nóò;ò
%óò.9óVór   re   )rb   rM   Ú	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   ÚcompilerO   r2   re   rc   r   r   ú<module>r›      sm   ðñó
 
Ý #å  Ý 9Ý 3Ý ß /å %Ý 0Ý 0Ý 3òò
:ò	ð  *˜rŸz™zØ6ó Ð ÷
ZSñ ZS÷z]ò ]r   