ó
    |ch‘  ã                   óâ   • 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  S SKJr   " S	 S
5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)é    N)Úgettext_lazy)Ú
exceptions)Úunicode_http_header©Ú_reverse)Úapi_settings)Úreplace_query_param)Ú
_MediaTypec                   ór   • \ rS rSr\R
                  r\R                  r\R                  r
S rSS jrS rSrg)ÚBaseVersioningé   c                 ó^   • Sn[        UR                  U R                  R                  S95      e)Nz.{cls}.determine_version() must be implemented.)Úcls)ÚNotImplementedErrorÚformatÚ	__class__Ú__name__)ÚselfÚrequestÚargsÚkwargsÚmsgs        Úb/var/www/djangovue.mamus.xyz/django/venv/lib/python3.13/site-packages/rest_framework/versioning.pyÚdetermine_versionÚ BaseVersioning.determine_version   s1   € Ø>ˆÜ! #§*¡*Ø—‘×'Ñ'ð #-ð #
ó ð 	ó    Nc                 ó   • [        XX4U40 UD6$ ©Nr   )r   Úviewnamer   r   r   r   Úextras          r   ÚreverseÚBaseVersioning.reverse   s   € Ü˜¨¸ÑIÀ5ÑIÐIr   c                 ó‚   • U R                   (       d  gUS L=(       a    XR                  :H  =(       d    XR                   ;   $ )NT)Úallowed_versionsÚdefault_version)r   Úversions     r   Úis_allowed_versionÚ!BaseVersioning.is_allowed_version   s:   € Ø×$×$ØØ Ð$×H¨×4HÑ4HÑ)H÷ 3Ø×1Ñ1Ñ1ð	4r   © ©NNNN)r   Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚDEFAULT_VERSIONr%   ÚALLOWED_VERSIONSr$   ÚVERSION_PARAMÚversion_paramr   r!   r'   Ú__static_attributes__r)   r   r   r   r      s4   † Ø"×2Ñ2€OØ#×4Ñ4ÐØ ×.Ñ.€MòôJõ4r   r   c                   ó.   • \ rS rSrSr\" S5      rS rSrg)ÚAcceptHeaderVersioningé"   zR
GET /something/ HTTP/1.1
Host: example.com
Accept: application/json; version=1.0
z#Invalid version in "Accept" header.c                 ó  • [        UR                  5      nUR                  R                  U R                  U R
                  5      n[        U5      nU R                  U5      (       d   [        R                  " U R                  5      eU$ r   )r
   Úaccepted_media_typeÚparamsÚgetr1   r%   r   r'   r   ÚNotAcceptableÚinvalid_version_message)r   r   r   r   Ú
media_typer&   s         r   r   Ú(AcceptHeaderVersioning.determine_version*   sm   € Ü × ;Ñ ;Ó<ˆ
Ø×#Ñ#×'Ñ'¨×(:Ñ(:¸D×<PÑ<PÓQˆÜ% gÓ.ˆØ×&Ñ& w×/Ñ/Ü×*Ò*¨4×+GÑ+GÓHÐHØˆr   r)   N)	r   r+   r,   r-   Ú__doc__Ú_r;   r   r2   r)   r   r   r4   r4   "   s   † ññ
  Ð EÓFÐõr   r4   c                   óF   ^ • \ rS rSrSr\" S5      rS rSU 4S jjrSr	U =r
$ )ÚURLPathVersioningé6   a  
To the client this is the same style as `NamespaceVersioning`.
The difference is in the backend - this implementation uses
Django's URL keyword arguments to determine the version.

An example URL conf for two views that accept two different versions.

urlpatterns = [
    re_path(r'^(?P<version>[v1|v2]+)/users/$', users_list, name='users-list'),
    re_path(r'^(?P<version>[v1|v2]+)/users/(?P<pk>[0-9]+)/$', users_detail, name='users-detail')
]

GET /1.0/something/ HTTP/1.1
Host: example.com
Accept: application/json
zInvalid version in URL path.c                 óÜ   • UR                  U R                  U R                  5      nUc  U R                  nU R                  U5      (       d   [        R
                  " U R                  5      eU$ r   )r9   r1   r%   r'   r   ÚNotFoundr;   ©r   r   r   r   r&   s        r   r   Ú#URLPathVersioning.determine_versionI   s[   € Ø—*‘*˜T×/Ñ/°×1EÑ1EÓFˆØ‰?Ø×*Ñ*ˆGà×&Ñ& w×/Ñ/Ü×%Ò% d×&BÑ&BÓCÐCØˆr   c                 óŠ   >• UR                   b#  U R                  UR                   0U=(       d    0 En[        TU ]  " XX4U40 UD6$ r   )r&   r1   Úsuperr!   ©r   r   r   r   r   r   r    r   s          €r   r!   ÚURLPathVersioning.reverseR   sQ   ø€ Ø�?‰?Ñ&à×"Ñ" G§O¡Oðà—<˜RðˆFô
 ‰wŠØ˜F¨Vñ
Ø7<ñ
ð 	
r   r)   r*   ©r   r+   r,   r-   r>   r?   r;   r   r!   r2   Ú__classcell__©r   s   @r   rA   rA   6   s%   ø† ññ   Ð >Ó?Ðò÷	
õ 	
r   rA   c                   óL   ^ • \ rS rSrSr\" S5      rS rSU 4S jjrS r	Sr
U =r$ )	ÚNamespaceVersioningé^   a[  
To the client this is the same style as `URLPathVersioning`.
The difference is in the backend - this implementation uses
Django's URL namespaces to determine the version.

An example URL conf that is namespaced into two separate versions

# users/urls.py
urlpatterns = [
    path('/users/', users_list, name='users-list'),
    path('/users/<int:pk>/', users_detail, name='users-detail')
]

# urls.py
urlpatterns = [
    path('v1/', include('users.urls', namespace='v1')),
    path('v2/', include('users.urls', namespace='v2'))
]

GET /1.0/something/ HTTP/1.1
Host: example.com
Accept: application/json
zBInvalid version in URL path. Does not match any version namespace.c                 ó  • [        USS 5      nUb  UR                  (       d  U R                  $ UR                  R                  S5      nU H  nU R	                  U5      (       d  M  Us  $    [
        R                  " U R                  5      e)NÚresolver_matchÚ:)ÚgetattrÚ	namespacer%   Úsplitr'   r   rD   r;   )r   r   r   r   rR   Úpossible_versionsr&   s          r   r   Ú%NamespaceVersioning.determine_versionx   s}   € Ü  Ð*:¸DÓAˆØÑ!¨×)A×)AØ×'Ñ'Ð'ð +×4Ñ4×:Ñ:¸3Ó?ÐÛ(ˆGØ×&Ñ& w×/Ó/Ø’ñ )ô ×!Ò! $×">Ñ">Ó?Ð?r   c                 óf   >• UR                   b  U R                  X5      n[        TU ]  " XX4U40 UD6$ r   )r&   Úget_versioned_viewnamerH   r!   rI   s          €r   r!   ÚNamespaceVersioning.reverse„   s=   ø€ Ø�?‰?Ñ&Ø×2Ñ2°8ÓEˆHÜ‰wŠØ˜F¨Vñ
Ø7<ñ
ð 	
r   c                 ó&   • UR                   S-   U-   $ )NrS   )r&   )r   r   r   s      r   rZ   Ú*NamespaceVersioning.get_versioned_viewname‹   s   € Ø�‰ Ñ$ xÑ/Ð/r   r)   r*   )r   r+   r,   r-   r>   r?   r;   r   r!   rZ   r2   rL   rM   s   @r   rO   rO   ^   s+   ø† ññ.  Ð dÓeÐò
@÷
÷0ð 0r   rO   c                   óR   • \ rS rSrSr\R                  " S5      r\" S5      r	S r
Srg)ÚHostNameVersioningé�   zH
GET /something/ HTTP/1.1
Host: v1.example.com
Accept: application/json
z,^([a-zA-Z0-9]+)\.[a-zA-Z0-9]+\.[a-zA-Z0-9]+$zInvalid version in hostname.c                 ó4  • UR                  5       R                  S5      u  pEnU R                  R                  U5      nU(       d  U R                  $ UR                  S5      nU R                  U5      (       d   [        R                  " U R                  5      eU$ )NrS   é   )
Úget_hostÚ	partitionÚhostname_regexÚmatchr%   Úgroupr'   r   rD   r;   )	r   r   r   r   ÚhostnameÚ	separatorÚportrf   r&   s	            r   r   Ú$HostNameVersioning.determine_version˜   s   € Ø$+×$4Ñ$4Ó$6×$@Ñ$@ÀÓ$EÑ!ˆ˜TØ×#Ñ#×)Ñ)¨(Ó3ˆÞØ×'Ñ'Ð'Ø—+‘+˜a“.ˆØ×&Ñ& w×/Ñ/Ü×%Ò% d×&BÑ&BÓCÐCØˆr   r)   N)r   r+   r,   r-   r>   ÚreÚcompilere   r?   r;   r   r2   r)   r   r   r_   r_   �   s)   † ñð
 —Z’ZÐ OÓP€NÙÐ >Ó?Ðõr   r_   c                   óF   ^ • \ rS rSrSr\" S5      rS rSU 4S jjrSr	U =r
$ )ÚQueryParameterVersioningé¦   zQ
GET /something/?version=0.1 HTTP/1.1
Host: example.com
Accept: application/json
z#Invalid version in query parameter.c                 óÒ   • UR                   R                  U R                  U R                  5      nU R	                  U5      (       d   [
        R                  " U R                  5      eU$ r   )Úquery_paramsr9   r1   r%   r'   r   rD   r;   rE   s        r   r   Ú*QueryParameterVersioning.determine_version®   sS   € Ø×&Ñ&×*Ñ*¨4×+=Ñ+=¸t×?SÑ?SÓTˆØ×&Ñ& w×/Ñ/Ü×%Ò% d×&BÑ&BÓCÐCØˆr   c                 óˆ   >• [         TU ]  " XX4U40 UD6nUR                  b   [        XpR                  UR                  5      $ U$ r   )rH   r!   r&   r	   r1   )	r   r   r   r   r   r   r    Úurlr   s	           €r   r!   Ú QueryParameterVersioning.reverse´   sH   ø€ Ü‰gŠoØ˜F¨Vñ
Ø7<ñ
ˆð �?‰?Ñ&Ü& s×,>Ñ,>ÀÇÁÓPÐPØˆ
r   r)   r*   rK   rM   s   @r   ro   ro   ¦   s%   ø† ññ
  Ð EÓFÐò÷õ r   ro   )rl   Údjango.utils.translationr   r?   Úrest_frameworkr   Úrest_framework.compatr   Úrest_framework.reverser   Úrest_framework.settingsr   Ú*rest_framework.templatetags.rest_frameworkr	   Úrest_framework.utils.mediatypesr
   r   r4   rA   rO   r_   ro   r)   r   r   Ú<module>r~      se   ðÛ 	å 6å %Ý 5Ý +Ý 0Ý JÝ 6÷4ñ 4ô*˜^ô ô(%
˜ô %
ôP.0˜.ô .0ôb˜ô ô.˜~õ r   