ó
    |chc6  ã                   ó2  • S r SSKrSSKJr  SSKJr  SSKJr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S
KJr  SSKJr  SSKJr  \" S/ SQ5      r\" S/ SQ5      rS rS r " S S5      r " S S\5      r " S S\R<                  5      r " S S\5      r g)aÜ  
Routers provide a convenient and consistent way of automatically
determining the URL conf for your API.

They are used by simply instantiating a Router class, and then registering
all the required ViewSets with that router.

For example, you might have a `urls.py` that looks something like this:

    router = routers.DefaultRouter()
    router.register('users', UserViewSet, 'user')
    router.register('accounts', AccountViewSet, 'account')

    urlpatterns = router.urls
é    N)Ú
namedtuple)ÚImproperlyConfigured)ÚNoReverseMatchÚpathÚre_path)Úviews)ÚResponse)Úreverse)ÚSchemaGenerator)Ú
SchemaView)Úapi_settings)Úformat_suffix_patternsÚRoute©ÚurlÚmappingÚnameÚdetailÚ
initkwargsÚDynamicRoute©r   r   r   r   c                 óF   • U R                  SS5      R                  SS5      $ )zC
Double brackets in regex of url_path for escape string formatting
Ú{z{{Ú}z}})Úreplace)Úurl_paths    Ú_/var/www/djangovue.mamus.xyz/django/venv/lib/python3.13/site-packages/rest_framework/routers.pyÚescape_curly_bracketsr   "   s$   € ð ×Ñ˜C Ó&×.Ñ.¨s°DÓ9Ð9ó    c                 ó(   • [         R                  " U 6 $ )zP
Takes an iterable of iterables, returns a single iterable containing all items
)Ú	itertoolsÚchain)Úlist_of_listss    r   Úflattenr$   )   s   € ô �?Š?˜MÐ*Ð*r   c                   óF   • \ rS rSrS rS
S jrS rS rS r\	S 5       r
S	rg)Ú
BaseRouteré0   c                 ó   • / U l         g ©N)Úregistry©Úselfs    r   Ú__init__ÚBaseRouter.__init__1   s	   € Øˆ�r   Nc                 óâ   • Uc  U R                  U5      nU R                  U5      (       a  SU SU S3n[        U5      eU R                  R	                  XU45        [        U S5      (       a  U ?g g )NzRouter with basename "zG" is already registered. Please provide a unique basename for viewset "Ú"Ú_urls)Úget_default_basenameÚis_already_registeredr   r*   ÚappendÚhasattrr1   )r,   ÚprefixÚviewsetÚbasenameÚmsgs        r   ÚregisterÚBaseRouter.register4   s€   € ØÑØ×0Ñ0°Ó9ˆHà×%Ñ% h×/Ñ/Ø+¨H¨:ð 6DØDKÀ9ÈAðOˆCä& sÓ+Ð+à�‰×Ñ˜f¨xÐ8Ô9ô �4˜×!Ñ!Ø‘
ð "r   c                 óB   ^• [        U4S jU R                   5       5      $ )z+
Check if `basename` is already registered
c              3   ó2   >#   • U  H  u  po3T:H  v •  M     g 7fr)   © )Ú.0Ú_prefixÚ_viewsetr8   Únew_basenames       €r   Ú	<genexpr>Ú3BaseRouter.is_already_registered.<locals>.<genexpr>G   s   øé € Ð]Ê}Ñ0K°À8˜|Ö+Ê}ùs   ƒ)Úanyr*   )r,   rB   s    `r   r3   Ú BaseRouter.is_already_registeredC   s   ø€ ô Ô]ÈtÏ}Ê}Ó]Ó]Ð]r   c                 ó   • [        S5      e)úY
If `basename` is not specified, attempt to automatically determine
it from the viewset.
z'get_default_basename must be overridden©ÚNotImplementedError)r,   r7   s     r   r2   ÚBaseRouter.get_default_basenameI   s   € ô
 "Ð"KÓLÐLr   c                 ó   • [        S5      e)z?
Return a list of URL patterns, given the registered viewsets.
zget_urls must be overriddenrI   r+   s    r   Úget_urlsÚBaseRouter.get_urlsP   s   € ô "Ð"?Ó@Ð@r   c                 óf   • [        U S5      (       d  U R                  5       U l        U R                  $ )Nr1   )r5   rM   r1   r+   s    r   ÚurlsÚBaseRouter.urlsV   s&   € ä�t˜W×%Ñ%ØŸ™›ˆDŒJØ�z‰zÐr   )r1   r*   r)   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r-   r:   r3   r2   rM   ÚpropertyrP   Ú__static_attributes__r>   r   r   r&   r&   0   s2   † òôò^òMòAð ñó ór   r&   c            
       ó´   ^ • \ rS rSr\" SSSS.SSSS	0S
9\" SSS0 S9\" SSSSSS.SSSS0S
9\" SSS0 S9/rS U 4S jjrS rS r	S r
S rS!S jrS rSrU =r$ )"ÚSimpleRouteré]   z^{prefix}{trailing_slash}$ÚlistÚcreate)ÚgetÚpostz{basename}-listFÚsuffixÚListr   z%^{prefix}/{url_path}{trailing_slash}$z{basename}-{url_name}r   z#^{prefix}/{lookup}{trailing_slash}$ÚretrieveÚupdateÚpartial_updateÚdestroy)r]   ÚputÚpatchÚdeletez{basename}-detailTÚInstancez.^{prefix}/{lookup}/{url_path}{trailing_slash}$c                 ó„  >• U(       a  SOSU l         X l        U(       a  SU l        SU l        [        U l        OzSU l        SU l        [        U l        / nU R                   HI  nUR                  nUS   S:X  a  US	S  nUS
   S:X  a  US S
 nUR                  UR                  US95        MK     X0l        [        TU ]1  5         g )NÚ/Ú z5(?P<{lookup_prefix}{lookup_url_kwarg}>{lookup_value})z[^/.]+z2<{lookup_value}:{lookup_prefix}{lookup_url_kwarg}>Ústrr   Ú^é   éÿÿÿÿÚ$)r   )Útrailing_slashÚ
_use_regexÚ_base_patternÚ_default_value_patternr   Ú	_url_confr   Úroutesr   r4   Ú_replaceÚsuperr-   )r,   rq   Úuse_regex_pathÚ_routesÚrouteÚ	url_paramÚ	__class__s         €r   r-   ÚSimpleRouter.__init__Š   s¸   ø€ Þ%3™c¸ˆÔØ(ŒÞØ!XˆDÔØ*2ˆDÔ'Ü$ˆD�Nà!UˆDÔØ*/ˆDÔ'Ü!ˆDŒNàˆGØŸœ�Ø!ŸI™I�	Ø˜Q‘< 3Ó&Ø )¨!¨" �IØ˜R‘= CÓ'Ø )¨#¨2 �Ià—‘˜uŸ~™~°)˜~Ð<Ö=ñ %ð "ŒKä‰ÑÕr   c                 óŒ   • [        USS5      nUc   S5       eUR                  R                  R                  R	                  5       $ )rH   ÚquerysetNz�`basename` argument not specified, and could not automatically determine the name from the viewset, as it does not have a `.queryset` attribute.)ÚgetattrÚmodelÚ_metaÚobject_nameÚlower)r,   r7   r€   s      r   r2   Ú!SimpleRouter.get_default_basename£   sK   € ô
 ˜7 J°Ó5ˆàÑ#ð 	8ð &8ó 	8Ð#ð �~‰~×#Ñ#×/Ñ/×5Ñ5Ó7Ð7r   c                 óÎ  • [        [        U R                   Vs/ s H4  n[        U[        5      (       d  M  UR
                  R                  5       PM6     sn5      5      nUR                  5       nU Vs/ s H!  nUR                  U;   d  M  UR                  PM#     nnU(       a  Sn[        USR                  U5      -  5      eU Vs/ s H  oUR                  (       d  M  UPM     nnU Vs/ s H  oUR                  (       a  M  UPM     n	n/ n
U R                   Hª  n[        U[        5      (       a6  UR                  (       a%  X¨ Vs/ s H  oPR                  X%5      PM     sn-  n
MN  [        U[        5      (       a6  UR                  (       d%  X© Vs/ s H  oPR                  X%5      PM     sn-  n
M™  U
R                  U5        M¬     U
$ s  snf s  snf s  snf s  snf s  snf s  snf )zg
Augment `self.routes` with any dynamically generated routes.

Returns a list of the Route namedtuple.
zZCannot use the @action decorator on the following methods, as they are existing routes: %sz, )r[   r$   rv   Ú
isinstancer   r   ÚvaluesÚget_extra_actionsrR   r   Újoinr   r   Ú_get_dynamic_router4   )r,   r7   r{   Úknown_actionsÚextra_actionsÚactionÚnot_allowedr9   Údetail_actionsÚlist_actionsrv   s              r   Ú
get_routesÚSimpleRouter.get_routes°   s�  € ô œWÈ$Ï+Ê+Ó%rÊ+ÀÔYcÐdiÔkp×YqÓ&< e§m¡m×&:Ñ&:Ö&<É+Ñ%rÓsÓtˆØ×1Ñ1Ó3ˆñ +8ó
Ú*7 Ø�‰ -Ñ/ó ˆF�OŒO©-ð 	ð 
ö ð>ˆCä& s¨T¯Y©Y°{Ó-CÑ'CÓDÐDñ 0=ÓNª} VÇÅŸ&©}ˆÐNÙ-:ÓPª] 6Ç-Å-Ÿ©]ˆÐPàˆØ—[”[ˆEÜ˜%¤×.Ñ.°5·<·<ØÐP^Ó_ÒP^Àf×2Ñ2°5ÖAÑP^Ñ_Ñ_’Ü˜E¤<×0Ñ0¸¿¿ØÐP\Ó]ÒP\Àf×2Ñ2°5ÖAÑP\Ñ]Ñ]’à—‘˜eÖ$ñ !ð ˆùò5 &sùò
ùò OùÚPùò
 `ùâ]s:   ™G	¶G	Á3GÂGÃGÃGÃ+GÄGÅGÆG"c                 óT  • UR                   R                  5       nUR                  UR                  5        [	        UR
                  5      n[        UR                  R                  SU5      UR                  UR                  R                  SUR                  5      UR                  US9$ )Nz
{url_path}z
{url_name}r   )r   Úcopyrb   Úkwargsr   r   r   r   r   r   r   Úurl_namer   )r,   r{   r�   r   r   s        r   rŒ   ÚSimpleRouter._get_dynamic_routeÔ   s€   € Ø×%Ñ%×*Ñ*Ó,ˆ
Ø×Ñ˜&Ÿ-™-Ô(ä(¨¯©Ó9ˆäØ—	‘	×!Ñ! ,°Ó9Ø—N‘NØ—‘×#Ñ# L°&·/±/ÓBØ—<‘<Ø!ñ
ð 	
r   c                 óh   • 0 nUR                  5        H  u  pE[        X5      (       d  M  XSU'   M     U$ )z 
Given a viewset, and a mapping of http methods to actions,
return a new mapping which only includes any mappings that
are actually implemented by the viewset.
)Úitemsr5   )r,   r7   Ú
method_mapÚbound_methodsÚmethodr�   s         r   Úget_method_mapÚSimpleRouter.get_method_mapâ   s9   € ð ˆØ(×.Ñ.Ö0‰NˆFÜ�w×'Ó'Ø(.˜fÓ%ñ 1ð Ðr   c                 óò   • [        USS5      n[        USS5      =(       d    UnSnU R                  (       d  [        USS5      nUc  [        USU R                  5      nU R                  R	                  UUUS9$ )aI  
Given a viewset, return the portion of URL regex that is used
to match against a single instance.

Note that lookup_prefix is not used directly inside REST rest_framework
itself, but is required in order to nicely support nested router
implementations, such as drf-nested-routers.

https://github.com/alanjds/drf-nested-routers
Úlookup_fieldÚpkÚlookup_url_kwargNÚlookup_value_converterÚlookup_value_regex)Úlookup_prefixr¤   Úlookup_value)r�   rr   rt   rs   Úformat)r,   r7   r§   r¢   r¤   r¨   s         r   Úget_lookup_regexÚSimpleRouter.get_lookup_regexî   s„   € ô ˜w¨¸Ó=ˆÜ" 7Ð,>ÀÓE×UÈÐØˆØ��ä" 7Ð,DÀdÓKˆLØÑä" 7Ð,@À$×B]ÑB]Ó^ˆLØ×!Ñ!×(Ñ(Ø'Ø-Ø%ð )ð 
ð 	
r   c           
      ó   • / nU R                    GH:  u  p#nU R                  U5      nU R                  U5      nU GH
  nU R                  X7R                  5      nU(       d  M(  UR
                  R                  UUU R                  S9n	U(       d3  U R                  [        L a  U	S   S:X  a  U	SS n	OU	SS S:X  a  SU	SS -   n	UR                  R                  5       n
U
R                  UUR                  S	.5        UR                  " U40 U
D6nUR                  R                  US
9nUR!                  U R                  X›US95        GM     GM=     U$ )zA
Use the registered viewsets to generate a list of URL patterns.
)r6   Úlookuprq   r   rj   rn   Né   z^/rm   )r8   r   ©r8   ©r   )r*   rª   r“   rŸ   r   r   r©   rq   ru   r   r   r–   rb   r   Úas_viewr   r4   )r,   Úretr6   r7   r8   r­   rv   r{   r   Úregexr   Úviewr   s                r   rM   ÚSimpleRouter.get_urls
  sN  € ð ˆà)-¯­Ñ%ˆF˜XØ×*Ñ*¨7Ó3ˆFØ—_‘_ WÓ-ˆFä�ð ×-Ñ-¨g·}±}ÓE�ÞÙð Ÿ	™	×(Ñ(Ø!Ø!Ø#'×#6Ñ#6ð )ð �ö Ø—~‘~¬Ò-Ø  ™8 s›?Ø$)¨!¨" I˜EøØ˜r ˜ dÓ*Ø # e¨A¨B i¡˜à"×-Ñ-×2Ñ2Ó4�
Ø×!Ñ!Ø (Ø#Ÿl™lñ#ô ð
 —’ wÑ=°*Ñ=�Ø—z‘z×(Ñ(°(Ð(Ð;�Ø—
‘
˜4Ÿ>™>¨%¸D˜>ÐA×BôC  ñ	 *7ðN ˆ
r   )rs   rt   ru   rr   rv   rq   )TT)rk   )rR   rS   rT   rU   r   r   rv   r-   r2   r“   rŒ   rŸ   rª   rM   rW   Ú__classcell__©r}   s   @r   rY   rY   ]   s·   ø† ñ 	Ø-àØ ñð #ØØ  &Ð)ñ		
ñ 	Ø8Ø(ØØñ		
ñ 	Ø6à!ØØ)Ø#ñ	ð %ØØ  *Ð-ñ	
ñ 	ØAØ(ØØñ		
ðG)€F÷Vò28ò"òH
ò
ô
÷8-ð -r   rY   c                   ó*   • \ rS rSrSrSrSrSrS rSr	g)ÚAPIRootViewi:  z/
The default basic root view for DefaultRouter
TNc           
      ó  • 0 nUR                   R                  nU R                  R                  5        H3  u  pgU(       a  US-   U-   n [	        UUUUUR                  S5      S9XF'   M5     [        U5      $ ! [         a     MO  f = f)NÚ:r©   )Úargsr—   Úrequestr©   )Úresolver_matchÚ	namespaceÚapi_root_dictr›   r
   r]   r   r	   )r,   r½   r¼   r—   r²   r¿   Úkeyr˜   s           r   r]   ÚAPIRootView.getB  s�   € àˆØ×*Ñ*×4Ñ4ˆ	Ø!×/Ñ/×5Ñ5Ö7‰MˆCÞØ$ s™?¨XÑ5�ð
Ü"ØØØ!Ø#Ø!Ÿ:™: hÓ/ñ�“ñ	 8ô ˜‹}Ðøô	 "ó âðús   ÁA5Á5
BÂBr>   )
rR   rS   rT   rU   Ú__doc__Ú_ignore_model_permissionsÚschemarÀ   r]   rW   r>   r   r   r¹   r¹   :  s   † ñð !%ÐØ€FØ€Mõr   r¹   c                   ó^   ^ • \ rS rSrSrSrSrSrSr\	r	\
r\rU 4S jrS
S jrU 4S jrS	rU =r$ )ÚDefaultRouteriX  z…
The default router extends the SimpleRouter, but also adds in a default
API root view, and adds format suffix patterns to the URLs.
Tzapi-rootNc                 óœ   >• SU;   a  UR                  S5      U l        O[        [        R                  5      U l        [
        TU ]  " U0 UD6  g )NÚroot_renderers)ÚpoprÉ   r[   r   ÚDEFAULT_RENDERER_CLASSESrx   r-   )r,   r¼   r—   r}   s      €r   r-   ÚDefaultRouter.__init__e  sB   ø€ Ø˜vÓ%Ø"(§*¡*Ð-=Ó">ˆDÕä"&¤|×'LÑ'LÓ"MˆDÔÜ‰Ò˜$Ð) &Ó)r   c                 ó¸   • 0 nU R                   S   R                  nU R                   H  u  pEnUR                  US9X$'   M     U R                  R                  US9$ )z
Return a basic root view.
r   r¯   )rÀ   )rv   r   r*   r©   r¹   r±   )r,   Úapi_urlsrÀ   Ú	list_namer6   r7   r8   s          r   Úget_api_root_viewÚDefaultRouter.get_api_root_viewl  sa   € ð ˆØ—K‘K ‘N×'Ñ'ˆ	Ø)-¯¬Ñ%ˆF˜XØ$-×$4Ñ$4¸hÐ$4Ð$GˆMÓ!ñ *7ð ×Ñ×'Ñ'°mÐ'ÐDÐDr   c                 óæ   >• [         TU ]  5       nU R                  (       a4  U R                  US9n[	        SX R
                  S9nUR                  U5        U R                  (       a  [        U5      nU$ )z|
Generate the list of URL patterns, including a default root view
for the API, and appending `.json` style format suffixes.
)rÎ   rk   r°   )	rx   rM   Úinclude_root_viewrÐ   r   Úroot_view_namer4   Úinclude_format_suffixesr   )r,   rP   r´   Úroot_urlr}   s       €r   rM   ÚDefaultRouter.get_urlsw  sd   ø€ ô
 ‰wÑÓ!ˆà×!×!Ø×)Ñ)°4Ð)Ð8ˆDÜ˜B ×+>Ñ+>Ñ?ˆHØ�K‰K˜Ô!à×'×'Ü)¨$Ó/ˆDàˆr   )rÉ   r)   )rR   rS   rT   rU   rÃ   rÓ   rÕ   rÔ   Údefault_schema_renderersr¹   r   ÚAPISchemaViewr   r-   rÐ   rM   rW   r¶   r·   s   @r   rÇ   rÇ   X  sE   ø† ñð ÐØ"ÐØ€NØ#ÐØ€KØ€MØ%€Oõ*ô	E÷ó r   rÇ   )!rÃ   r!   Úcollectionsr   Údjango.core.exceptionsr   Údjango.urlsr   r   r   Úrest_frameworkr   Úrest_framework.responser	   Úrest_framework.reverser
   Úrest_framework.schemasr   Úrest_framework.schemas.viewsr   Úrest_framework.settingsr   Úrest_framework.urlpatternsr   r   r   r   r$   r&   rY   ÚAPIViewr¹   rÇ   r>   r   r   Ú<module>rå      sŠ   ðñó Ý "å 7ß 5Ñ 5å  Ý ,Ý *Ý 2Ý 3Ý 0Ý =á�7ÒNÓO€Ù˜.Ò*QÓR€ò:ò+÷*ñ *ôZZ�:ô Zôz�%—-‘-ô ô<.�Lõ .r   