Ë
    ¹ûàg#   ã                   óv   — d Z ddlmZmZmZ ddlmZ  G d„ de«      Zd„ Z	d„ Z
dd„Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zy)zCFunctions that help with dynamically creating decorators for views.é    )ÚpartialÚupdate_wrapperÚwraps)Úiscoroutinefunctionc                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )Úclassonlymethodc                 ó>   •— |�t        d«      ‚t        ‰| �	  ||«      S )Nz=This method is available only on the class, not on instances.)ÚAttributeErrorÚsuperÚ__get__)ÚselfÚinstanceÚclsÚ	__class__s      €úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/utils/decorators.pyr   zclassonlymethod.__get__	   s,   ø€ ØÐÜ ØOóð ô ‰w‰˜x¨Ó-Ð-ó    ©N)Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__)r   s   @r   r   r      s   ø„ ÷.ñ .r   r   c                 ó,   — |d„ «       }t        | |«       y )Nc                   ó   — y r   © )ÚargsÚkwargss     r   Údummyz%_update_method_wrapper.<locals>.dummy   s   € àr   )r   )Ú_wrapperÚ	decoratorr   s      r   Ú_update_method_wrapperr       s"   € ð ñó ðô �8˜UÕ#r   c                 ó„   ‡ ‡— t        ‰ d«      r	‰ ddd…   Š n‰ gŠ ˆ ˆfd„}‰ D ]  }t        ||«       Œ t        |‰«       |S )zŠ
    Decorate `method` with one or more function decorators. `decorators` can be
    a single decorator or an iterable of decorators.
    Ú__iter__Néÿÿÿÿc           
      ó˜   •—  t        ‰«      t        ‰j                  | t        | «      «      «      «      }‰D ]
  } ||«      }Œ  ||i |¤ŽS r   )r   r   r   Útype)r   r   r   Úbound_methodÚdecÚ
decoratorsÚmethods        €€r   r   z!_multi_decorate.<locals>._wrapper(   sR   ø€ ð
 %”u˜V“}¤W¨V¯^©^¸DÄ$ÀtÃ*Ó-MÓ%NÓOˆØò 	-ˆCÙ˜|Ó,‰Lð	-á˜TÐ, VÑ,Ð,r   )Úhasattrr    r   )r(   r)   r   r'   s   ``  r   Ú_multi_decorater+      sW   ù€ ô
 ˆz˜:Ô&ð  ¡ " Ñ%‰
à �\ˆ
õ-ð ò .ˆÜ˜x¨Õ-ð.ô �8˜VÔ$Ø€Or   c                 ó¢   ‡ ‡— ˆ ˆfd„}t        ‰ d«      st        |‰ «       t        ‰ d«      r‰ n‰ j                  }d|j                  z  |_        |S )z>
    Convert a function decorator into a method decorator
    c           	      ó
  •— t        | t        «      st        ‰| «      S ‰rt        | ‰«      st	        d| ›d‰›d�«      ‚t        | ‰«      }t        |«      st        d‰›d| ›d|›d�«      ‚t        ‰|«      }t        | ‰|«       | S )NzQThe keyword argument `name` must be the name of a method of the decorated class: z. Got 'z
' instead.zCannot decorate 'z&' as it isn't a callable attribute of z (z).)	Ú
isinstancer%   r+   r*   Ú
ValueErrorÚgetattrÚcallableÚ	TypeErrorÚsetattr)Úobjr)   r   r   Únames      €€r   Ú_deczmethod_decorator.<locals>._decC   sŒ   ø€ Ü˜#œtÔ$Ü" 9¨cÓ2Ð2Ùœ  dÔ+ÝâCFÊðNóð ô ˜˜dÓ#ˆÜ˜ÔÝâ"¢Cªð1óð ô # 9¨fÓ5ˆÜ��T˜8Ô$Øˆ
r   r"   r   zmethod_decorator(%s))r*   r   r   r   )r   r5   r6   r4   s   ``  r   Úmethod_decoratorr7   :   sI   ù€ õô( �9˜jÔ)Ü�t˜YÔ'ä˜y¨*Ô5‰)¸9×;NÑ;N€CØ*¨S¯\©\Ñ9€D„MØ€Kr   c                 ó   — t        | «      S )a<  
    Like decorator_from_middleware, but return a function
    that accepts the arguments to be passed to the middleware_class.
    Use like::

         cache_page = decorator_from_middleware_with_args(CacheMiddleware)
         # ...

         @cache_page(3600)
         def my_view(request):
             # ...
    ©Úmake_middleware_decorator©Úmiddleware_classs    r   Ú#decorator_from_middleware_with_argsr=   _   s   € ô %Ð%5Ó6Ð6r   c                 ó"   —  t        | «      «       S )zÇ
    Given a middleware class (not an instance), return a view decorator. This
    lets you use middleware functionality on a per-view basis. The middleware
    is created with no params passed.
    r9   r;   s    r   Údecorator_from_middlewarer?   o   s   € ð 7Ô$Ð%5Ó6Ó8Ð8r   c                 ó   ‡ — ˆ fd„}|S )Nc                  ó   •‡ ‡— ˆ ˆˆfd„}|S )Nc                 ó    •‡ ‡‡‡‡—  ‰‰ g‰¢­i ‰¤ŽŠˆˆ fd„Šˆfd„Šˆfd„Št        ‰ «      r	ˆˆˆˆ fd„}nˆˆˆˆ fd„} t        ‰ «      |«      S )Nc                 ó�   •— t        ‰d«      r‰j                  | «      }|�|S t        ‰d«      r‰j                  | ‰||«      }|�|S y )NÚprocess_requestÚprocess_view)r*   rD   rE   )Úrequestr   r   ÚresultÚ
middlewareÚ	view_funcs       €€r   Ú_pre_process_requestzdmake_middleware_decorator.<locals>._make_decorator.<locals>._decorator.<locals>._pre_process_request}   sW   ø€ Ü˜:Ð'8Ô9Ø'×7Ñ7¸Ó@�FØÐ)Ø%˜Ü˜: ~Ô6Ø'×4Ñ4°W¸iÈÈvÓV�FØÐ)Ø%˜Ør   c                 óJ   •— t        ‰d«      r‰j                  | |«      }|�|S ‚ )NÚprocess_exception)r*   rL   )rF   Ú	exceptionrG   rH   s      €r   Ú_process_exceptionzbmake_middleware_decorator.<locals>._make_decorator.<locals>._decorator.<locals>._process_exceptionˆ   s.   ø€ Ü˜:Ð':Ô;Ø'×9Ñ9¸'À9ÓM�FØÐ)Ø%˜Ør   c                 ó  •‡ — t        |d«      rXt        |j                  «      rCt        ‰d«      r‰j                  ‰ |«      }t        ‰d«      rˆˆ fd„}|j	                  |«       |S t        ‰d«      r‰j                  ‰ |«      S |S )NÚrenderÚprocess_template_responseÚprocess_responsec                 ó(   •— ‰j                  ‰| «      S r   )rR   )ÚresponserH   rF   s    €€r   Úcallbackzwmake_middleware_decorator.<locals>._make_decorator.<locals>._decorator.<locals>._post_process_request.<locals>.callback™   s   ø€ Ø#-×#>Ñ#>¸wÈÓ#QÐQr   )r*   r1   rP   rQ   Úadd_post_render_callbackrR   )rF   rT   rU   rH   s   `  €r   Ú_post_process_requestzemake_middleware_decorator.<locals>._make_decorator.<locals>._decorator.<locals>._post_process_request�   s‡   ù€ Ü˜8 XÔ.´8¸H¿O¹OÔ3LÜ˜zÐ+FÔGØ#-×#GÑ#GØ# Xó$˜ô
 ˜zÐ+=Ô>õRð !×9Ñ9¸(ÔCð  �ô ˜zÐ+=Ô>Ø)×:Ñ:¸7ÀHÓMÐMØ�r   c              Ÿ   ó¼   •K  —  ‰| g|¢­i |¤Ž}|�|S 	  ‰	| g|¢­i |¤Žƒ d {  –—† } ‰| «      S 7 Œ# t         $ r} ‰| |«      }|�|cY d }~S Y d }~Œ+d }~ww xY w­wr   ©Ú	Exception©
rF   r   r   rG   rT   ÚerW   rJ   rN   rI   s
         €€€€r   Ú_view_wrapperz]make_middleware_decorator.<locals>._make_decorator.<locals>._decorator.<locals>._view_wrapper¤   s‚   øè ø€ Ù1°'ÐK¸DÒKÀFÑK�FØÐ)Ø%˜ð*Ù)2°7Ð)L¸TÒ)LÀVÑ)L×#L˜ñ 1°¸(ÓCÐCð $MùÜ$ò *Ù!3°G¸QÓ!?˜Ø!Ð-Ø#)�Mô .ûð*üs<   ƒA•4 ¤2¥4 ©	A²4 ´	A½AÁ	AÁ

AÁAÁAc                 ó    •—  ‰| g|¢­i |¤Ž}|�|S 	  ‰	| g|¢­i |¤Ž} ‰| «      S # t         $ r} ‰| |«      }|�|cY d }~S Y d }~Œ)d }~ww xY wr   rY   r[   s
         €€€€r   r]   z]make_middleware_decorator.<locals>._make_decorator.<locals>._decorator.<locals>._view_wrapper´   sx   ø€ Ù1°'ÐK¸DÒKÀFÑK�FØÐ)Ø%˜ð*Ù#,¨WÐ#F°tÒ#F¸vÑ#F˜ñ 1°¸(ÓCÐCøô %ò *Ù!3°G¸QÓ!?˜Ø!Ð-Ø#)�Mô .ûð*ús   “( ¨	A±A½AÁA)r   r   )	rI   r]   rW   rJ   rN   rH   Úm_argsÚm_kwargsr<   s	   ` @@@@€€€r   Ú
_decoratorzFmake_middleware_decorator.<locals>._make_decorator.<locals>._decoratorz   sV   ý€ Ù)¨)ÐI°fÒIÀÑIˆJõ	ôô ô& # 9Ô-÷Dð D÷ Dð $”5˜Ó# MÓ2Ð2r   r   )r_   r`   ra   r<   s   `` €r   Ú_make_decoratorz2make_middleware_decorator.<locals>._make_decoratory   s   ú€ öH	3ðT Ðr   r   )r<   rb   s   ` r   r:   r:   x   s   ø€ ôKðZ Ðr   c                 ó"   — d| _         d| _        | S )zj
    Mark a middleware factory as returning a hybrid middleware supporting both
    types of request.
    T©Úsync_capableÚasync_capable©Úfuncs    r   Úsync_and_async_middlewareri   É   s   € ð
 €DÔØ€DÔØ€Kr   c                 ó"   — d| _         d| _        | S )z\
    Mark a middleware factory as returning a sync middleware.
    This is the default.
    TFrd   rg   s    r   Úsync_only_middlewarerk   Ó   s   € ð
 €DÔØ€DÔØ€Kr   c                 ó"   — d| _         d| _        | S )z;Mark a middleware factory as returning an async middleware.FTrd   rg   s    r   Úasync_only_middlewarerm   Ý   s   € à€DÔØ€DÔØ€Kr   N)Ú )Ú__doc__Ú	functoolsr   r   r   Úasgiref.syncr   Úclassmethodr   r    r+   r7   r=   r?   r:   ri   rk   rm   r   r   r   ú<module>rs      sM   ðÙ Eç 4Ñ 4å ,ô.�kô .ò$òó>"òJ7ò 9òNòbòór   