Ë
    ûûà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	„Zd
„ Zd„ Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d „ d!e«      Z G d"„ d#e«      Zd$„ Z d%„ Z!y)'z¸
Handled exceptions raised by REST framework.

In addition, Django's built in 403 and 404 exceptions are handled.
(`django.http.Http404` and `django.core.exceptions.PermissionDenied`)
é    N)ÚJsonResponse)Ú	force_str)Úgettext_lazy)Úngettext©Ústatus)Ú
ReturnDictÚ
ReturnListc           	      óÜ  — t        | t        t        f«      rB| D �cg c]  }t        ||«      ‘Œ }}t        | t        «      rt	        || j
                  ¬«      S |S t        | t        «      rV| j                  «       D ��ci c]  \  }}|t        ||«      “Œ }}}t        | t        «      rt        || j
                  ¬«      S |S t        | «      }t        | d|«      }t        ||«      S c c}w c c}}w )zw
    Descend into a nested data structure, forcing any
    lazy translation strings or strings into `ErrorDetail`.
    )Ú
serializerÚcode)Ú
isinstanceÚlistÚtupleÚ_get_error_detailsr
   r   ÚdictÚitemsr	   r   ÚgetattrÚErrorDetail)ÚdataÚdefault_codeÚitemÚretÚkeyÚvalueÚtextr   s           úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/rest_framework/exceptions.pyr   r      sæ   € ô
 �$œœu˜Ô&à?Cö
Ø7;Ô˜t \Õ2ð
ˆð 
ô �dœJÔ'Ü˜c¨d¯o©oÔ>Ð>Øˆ
Ü	�Dœ$Ô	ð #Ÿj™j›l÷
á��Uð Ô# E¨<Ó8Ñ8ð
ˆñ 
ô �dœJÔ'Ü˜c¨d¯o©oÔ>Ð>Øˆ
ä�T‹?€DÜ�4˜ Ó.€DÜ�t˜TÓ"Ð"ùò#
ùó
s   ›C#Á<C(c                 óü   — t        | t        «      r| D �cg c]  }t        |«      ‘Œ c}S t        | t        «      r-| j	                  «       D ��ci c]  \  }}|t        |«      “Œ c}}S | j
                  S c c}w c c}}w ©N)r   r   Ú
_get_codesr   r   r   ©Údetailr   r   r   s       r   r    r    ,   sc   € Ü�&œ$ÔØ-3Ö4 T”
˜4Õ Ò4Ð4Ü	�FœDÔ	!Ø9?¿¹»×H©:¨3°�”Z Ó&Ñ&ÓHÐHØ�;‰;Ðùò 5ùãHs   •A3ÁA8c                 ó  — t        | t        «      r| D �cg c]  }t        |«      ‘Œ c}S t        | t        «      r-| j	                  «       D ��ci c]  \  }}|t        |«      “Œ c}}S | | j
                  dœS c c}w c c}}w )N)Úmessager   )r   r   Ú_get_full_detailsr   r   r   r!   s       r   r%   r%   4   so   € Ü�&œ$ÔØ4:Ö;¨DÔ! $Õ'Ò;Ð;Ü	�FœDÔ	!Ø@FÇÁÃ×O±*°#°u�Ô& uÓ-Ñ-ÓOÐOàØ—‘ñð ùò <ùãOs   •A6ÁA;c                   óD   ‡ — e Zd ZdZdZdˆ fd„	Zˆ fd„Zd„ Zd„ Zd„ Z	ˆ xZ
S )	r   zA
    A string-like object that can additionally have a code.
    Nc                 ó6   •— t         ‰| �  | |«      }||_        |S r   )ÚsuperÚ__new__r   )ÚclsÚstringr   ÚselfÚ	__class__s       €r   r)   zErrorDetail.__new__E   s   ø€ Ü‰w‰˜s FÓ+ˆØˆŒ	Øˆó    c                 óœ   •— t         ‰| �  |«      }|t        u rt        S 	 |xr | j                  |j                  k(  S # t        $ r |cY S w xY wr   )r(   Ú__eq__ÚNotImplementedr   ÚAttributeError)r,   ÚotherÚresultr-   s      €r   r0   zErrorDetail.__eq__J   sP   ø€ Ü‘‘ Ó&ˆØ”^Ñ#Ü!Ð!ð	ØÒ5˜dŸi™i¨5¯:©:Ñ5Ð5øÜò 	ØŠMð	ús    = ½AÁ
Ac                 óF   — | j                  |«      }|t        u rt        S | S r   )r0   r1   )r,   r3   r4   s      r   Ú__ne__zErrorDetail.__ne__S   s&   € Ø—‘˜UÓ#ˆØ”^Ñ#Ü!Ð!ØˆzÐr.   c                 ó:   — dt        | «      ›d| j                  ›d�S )NzErrorDetail(string=z, code=ú))Ústrr   ©r,   s    r   Ú__repr__zErrorDetail.__repr__Y   s   � ä��IØ�I‹Ið
ð 	
r.   c                 ó*   — t        t        | «      «      S r   )Úhashr9   r:   s    r   Ú__hash__zErrorDetail.__hash___   s   € Ü”C˜“I‹Ðr.   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   r0   r6   r;   r>   Ú__classcell__©r-   s   @r   r   r   ?   s(   ø„ ñð €Dõô
òò
ör.   r   c                   óV   — e Zd ZdZej
                  Z ed«      ZdZ	d	d„Z
d„ Zd„ Zd„ Zy)
ÚAPIExceptionz‚
    Base class for REST framework exceptions.
    Subclasses should provide `.status_code` and `.default_detail` properties.
    zA server error occurred.ÚerrorNc                 ó^   — |€| j                   }|€| j                  }t        ||«      | _        y r   )Údefault_detailr   r   r"   ©r,   r"   r   s      r   Ú__init__zAPIException.__init__l   s0   € Øˆ>Ø×(Ñ(ˆFØˆ<Ø×$Ñ$ˆDä(¨°Ó6ˆ�r.   c                 ó,   — t        | j                  «      S r   )r9   r"   r:   s    r   Ú__str__zAPIException.__str__t   s   € Ü�4—;‘;ÓÐr.   c                 ó,   — t        | j                  «      S )ze
        Return only the code part of the error details.

        Eg. {"name": ["required"]}
        )r    r"   r:   s    r   Ú	get_codeszAPIException.get_codesw   s   € ô ˜$Ÿ+™+Ó&Ð&r.   c                 ó,   — t        | j                  «      S )z 
        Return both the message & code parts of the error details.

        Eg. {"name": [{"message": "This field is required.", "code": "required"}]}
        )r%   r"   r:   s    r   Úget_full_detailszAPIException.get_full_details   s   € ô ! §¡Ó-Ð-r.   ©NN)r?   r@   rA   rB   r   ÚHTTP_500_INTERNAL_SERVER_ERRORÚstatus_codeÚ_rI   r   rK   rM   rO   rQ   © r.   r   rF   rF   c   s8   „ ñð ×7Ñ7€KÙÐ1Ó2€NØ€Ló7ò ò'ó.r.   rF   c                   ó@   — e Zd Zej                  Z ed«      ZdZdd„Z	y)ÚValidationErrorzInvalid input.ÚinvalidNc                 óÜ   — |€| j                   }|€| j                  }t        |t        «      rt	        |«      }n#t        |t
        «      st        |t        «      s|g}t        ||«      | _        y r   )rI   r   r   r   r   r   r   r"   rJ   s      r   rK   zValidationError.__init__”   s_   € Øˆ>Ø×(Ñ(ˆFØˆ<Ø×$Ñ$ˆDô �fœeÔ$Ü˜&“\‰FÜ˜F¤DÔ)´*¸VÄTÔ2JØ�XˆFä(¨°Ó6ˆ�r.   rR   )
r?   r@   rA   r   ÚHTTP_400_BAD_REQUESTrT   rU   rI   r   rK   rV   r.   r   rX   rX   �   s"   „ Ø×-Ñ-€KÙÐ'Ó(€NØ€Lô7r.   rX   c                   ó8   — e Zd Zej                  Z ed«      ZdZy)Ú
ParseErrorzMalformed request.Úparse_errorN)	r?   r@   rA   r   r[   rT   rU   rI   r   rV   r.   r   r]   r]   ¤   s   „ Ø×-Ñ-€KÙÐ+Ó,€NØ �Lr.   r]   c                   ó8   — e Zd Zej                  Z ed«      ZdZy)ÚAuthenticationFailedz%Incorrect authentication credentials.Úauthentication_failedN©	r?   r@   rA   r   ÚHTTP_401_UNAUTHORIZEDrT   rU   rI   r   rV   r.   r   r`   r`   ª   s   „ Ø×.Ñ.€KÙÐ>Ó?€NØ*�Lr.   r`   c                   ó8   — e Zd Zej                  Z ed«      ZdZy)ÚNotAuthenticatedz-Authentication credentials were not provided.Únot_authenticatedNrb   rV   r.   r   re   re   °   s   „ Ø×.Ñ.€KÙÐFÓG€NØ&�Lr.   re   c                   ó8   — e Zd Zej                  Z ed«      ZdZy)ÚPermissionDeniedz2You do not have permission to perform this action.Úpermission_deniedN)	r?   r@   rA   r   ÚHTTP_403_FORBIDDENrT   rU   rI   r   rV   r.   r   rh   rh   ¶   s   „ Ø×+Ñ+€KÙÐKÓL€NØ&�Lr.   rh   c                   ó8   — e Zd Zej                  Z ed«      ZdZy)ÚNotFoundz
Not found.Ú	not_foundN)	r?   r@   rA   r   ÚHTTP_404_NOT_FOUNDrT   rU   rI   r   rV   r.   r   rl   rl   ¼   s   „ Ø×+Ñ+€KÙ�|“_€NØ�Lr.   rl   c                   óL   ‡ — e Zd Zej                  Z ed«      ZdZdˆ fd„	Z	ˆ xZ
S )ÚMethodNotAllowedzMethod "{method}" not allowed.Úmethod_not_allowedc                 ót   •— |€%t        | j                  «      j                  |¬«      }t        ‰| �  ||«       y )N)Úmethod©r   rI   Úformatr(   rK   )r,   rs   r"   r   r-   s       €r   rK   zMethodNotAllowed.__init__Ç   s5   ø€ Øˆ>Ü˜t×2Ñ2Ó3×:Ñ:À&Ð:ÓIˆFÜ‰Ñ˜ Õ&r.   rR   )r?   r@   rA   r   ÚHTTP_405_METHOD_NOT_ALLOWEDrT   rU   rI   r   rK   rC   rD   s   @r   rp   rp   Â   s(   ø„ Ø×4Ñ4€KÙÐ7Ó8€NØ'€L÷'ñ 'r.   rp   c                   óL   ‡ — e Zd Zej                  Z ed«      ZdZdˆ fd„	Z	ˆ xZ
S )ÚNotAcceptablez,Could not satisfy the request Accept header.Únot_acceptablec                 ó4   •— || _         t        ‰| �	  ||«       y r   )Úavailable_renderersr(   rK   )r,   r"   r   r{   r-   s       €r   rK   zNotAcceptable.__init__Ò   s   ø€ Ø#6ˆÔ Ü‰Ñ˜ Õ&r.   ©NNN)r?   r@   rA   r   ÚHTTP_406_NOT_ACCEPTABLErT   rU   rI   r   rK   rC   rD   s   @r   rx   rx   Í   s(   ø„ Ø×0Ñ0€KÙÐEÓF€NØ#€L÷'ñ 'r.   rx   c                   óL   ‡ — e Zd Zej                  Z ed«      ZdZdˆ fd„	Z	ˆ xZ
S )ÚUnsupportedMediaTypez1Unsupported media type "{media_type}" in request.Úunsupported_media_typec                 ót   •— |€%t        | j                  «      j                  |¬«      }t        ‰| �  ||«       y )N)Ú
media_typert   )r,   r‚   r"   r   r-   s       €r   rK   zUnsupportedMediaType.__init__Ü   s5   ø€ Øˆ>Ü˜t×2Ñ2Ó3×:Ñ:ÀjÐ:ÓQˆFÜ‰Ñ˜ Õ&r.   rR   )r?   r@   rA   r   ÚHTTP_415_UNSUPPORTED_MEDIA_TYPErT   rU   rI   r   rK   rC   rD   s   @r   r   r   ×   s(   ø„ Ø×8Ñ8€KÙÐJÓK€NØ+€L÷'ñ 'r.   r   c                   ól   ‡ — e Zd Zej                  Z ed«      Z ed«      Z ed«      Z	dZ
dˆ fd„	Zˆ xZS )Ú	ThrottledzRequest was throttled.z$Expected available in {wait} second.z%Expected available in {wait} seconds.Ú	throttledc                 óF  •— |€t        | j                  «      }|�pt        j                  |«      }dj	                  |t        t        | j                  j                  |¬«      | j                  j                  |¬«      |«      «      f«      }|| _	        t        ‰| �-  ||«       y )Nú )Úwait)r   rI   ÚmathÚceilÚjoinr   Úextra_detail_singularru   Úextra_detail_pluralr‰   r(   rK   )r,   r‰   r"   r   r-   s       €r   rK   zThrottled.__init__é   s˜   ø€ Øˆ>Ü˜t×2Ñ2Ó3ˆFØÐÜ—9‘9˜T“?ˆDØ—X‘XØÜœ( 4×#=Ñ#=×#DÑ#DÈ$Ð#DÓ#OØ#'×#;Ñ#;×#BÑ#BÈÐ#BÓ#MØ#'ó)ó *ð+ó ,ˆFð
 ˆŒ	Ü‰Ñ˜ Õ&r.   r|   )r?   r@   rA   r   ÚHTTP_429_TOO_MANY_REQUESTSrT   rU   rI   r�   rŽ   r   rK   rC   rD   s   @r   r…   r…   â   s@   ø„ Ø×3Ñ3€KÙÐ/Ó0€NÙÐDÓEÐÙÐCÓDÐØ€L÷'ñ 'r.   r…   c                 ó@   — ddi}t        |t        j                  ¬«      S )z$
    Generic 500 error handler.
    rG   zServer Error (500)r   )r   r   rS   )ÚrequestÚargsÚkwargsr   s       r   Úserver_errorr”   ÷   s&   € ð
 	Ð%ð€Dô ˜¤V×%JÑ%JÔKÐKr.   c                 ó@   — ddi}t        |t        j                  ¬«      S )z$
    Generic 400 error handler.
    rG   zBad Request (400)r   )r   r   r[   )r‘   Ú	exceptionr’   r“   r   s        r   Úbad_requestr—     s&   € ð
 	Ð$ð€Dô ˜¤V×%@Ñ%@ÔAÐAr.   r   )"rB   rŠ   Údjango.httpr   Údjango.utils.encodingr   Údjango.utils.translationr   rU   r   Úrest_frameworkr   Ú'rest_framework.utils.serializer_helpersr	   r
   r   r    r%   r9   r   Ú	ExceptionrF   rX   r]   r`   re   rh   rl   rp   rx   r   r…   r”   r—   rV   r.   r   ú<module>rž      sÎ   ðñó å $Ý +Ý 6Ý -å !ß Jó#ò4òô!�#ô !ôH".�9ô ".ôX7�lô 7ô*!�ô !ô+˜<ô +ô'�|ô 'ô'�|ô 'ôˆ|ô ô'�|ô 'ô'�Lô 'ô'˜<ô 'ô'�ô 'ò*LóBr.   