§
    ¥”jß  ã                   óÎ  — 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!dS )'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¦  «        r;ˆfd„| D ¦   «         }t          | t          ¦  «        rt          || j        ¬¦  «        S |S t          | t
          ¦  «        rMˆfd„|                      ¦   «         D ¦   «         }t          | t          ¦  «        rt          || j        ¬¦  «        S |S t          | ¦  «        }t          | d‰¦  «        }t          ||¦  «        S )zw
    Descend into a nested data structure, forcing any
    lazy translation strings or strings into `ErrorDetail`.
    c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS © ©Ú_get_error_details)Ú.0ÚitemÚdefault_codes     €úh/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/rest_framework/exceptions.pyú
<listcomp>z&_get_error_details.<locals>.<listcomp>   s1   ø€ ð 
ð 
ð 
Ø7;Õ˜t \Ñ2Ô2ð
ð 
ð 
ó    )Ú
serializerc                 ó8   •— i | ]\  }}|t          |‰¦  «        “ŒS r   r   )r   ÚkeyÚvaluer   s      €r   ú
<dictcomp>z&_get_error_details.<locals>.<dictcomp>   s:   ø€ ð 
ð 
ð 
á��Uð Õ# E¨<Ñ8Ô8ð
ð 
ð 
r   Úcode)Ú
isinstanceÚlistÚtupler
   r   ÚdictÚitemsr	   r   ÚgetattrÚErrorDetail)Údatar   ÚretÚtextr   s    `   r   r   r      s  ø€ õ
 �$��u˜Ñ&Ô&ð ð
ð 
ð 
ð 
Ø?Cð
ñ 
ô 
ˆõ �d�JÑ'Ô'ð 	?Ý˜c¨d¬oÐ>Ñ>Ô>Ð>Øˆ
Ý	�D�$Ñ	Ô	ð ð
ð 
ð 
ð 
à"Ÿjšj™lœlð
ñ 
ô 
ˆõ �d�JÑ'Ô'ð 	?Ý˜c¨d¬oÐ>Ñ>Ô>Ð>Øˆ
å�T‰?Œ?€DÝ�4˜ Ñ.Ô.€DÝ�t˜TÑ"Ô"Ð"r   c                 ó¸   — t          | t          ¦  «        rd„ | D ¦   «         S t          | t          ¦  «        rd„ |                      ¦   «         D ¦   «         S | j        S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©Ú
_get_codes©r   r   s     r   r   z_get_codes.<locals>.<listcomp>.   s    € Ð4Ð4Ð4 T•
˜4Ñ Ô Ð4Ð4Ð4r   c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r   r(   ©r   r   r   s      r   r   z_get_codes.<locals>.<dictcomp>0   s&   € ÐHÐHÐH©:¨3°�•Z Ñ&Ô&ÐHÐHÐHr   ©r   r   r   r    r   ©Údetails    r   r)   r)   ,   s`   € Ý�&�$ÑÔð IØ4Ð4¨VÐ4Ñ4Ô4Ð4Ý	�F�DÑ	!Ô	!ð IØHÐH¸¿º¹¼ÐHÑHÔHÐHØŒ;Ðr   c                 ó¾   — t          | t          ¦  «        rd„ | D ¦   «         S t          | t          ¦  «        rd„ |                      ¦   «         D ¦   «         S | | j        dœS )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©Ú_get_full_detailsr*   s     r   r   z%_get_full_details.<locals>.<listcomp>6   s!   € Ð;Ð;Ð;¨DÕ! $Ñ'Ô'Ð;Ð;Ð;r   c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r   r2   r,   s      r   r   z%_get_full_details.<locals>.<dictcomp>8   s'   € ÐOÐOÐO±*°#°u�Õ& uÑ-Ô-ÐOÐOÐOr   )Úmessager   r-   r.   s    r   r3   r3   4   so   € Ý�&�$ÑÔð PØ;Ð;°FÐ;Ñ;Ô;Ð;Ý	�F�DÑ	!Ô	!ð PØOÐOÀÇÂÁÄÐOÑOÔOÐOàØ”ðð ð r   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                 óZ   •— t          ¦   «                              | |¦  «        }||_        |S ©N)ÚsuperÚ__new__r   )ÚclsÚstringr   ÚselfÚ	__class__s       €r   r:   zErrorDetail.__new__E   s&   ø€ Ý‰wŒw�Š˜s FÑ+Ô+ˆØˆŒ	Øˆr   c                 ó°   •— t          ¦   «                              |¦  «        }|t          u rt          S 	 |o| j        |j        k    S # t          $ r |cY S w xY wr8   )r9   Ú__eq__ÚNotImplementedr   ÚAttributeError)r=   ÚotherÚresultr>   s      €r   r@   zErrorDetail.__eq__J   sf   ø€ Ý‘”—’ Ñ&Ô&ˆØ•^Ð#Ð#Ý!Ð!ð	ØÐ5˜dœi¨5¬:Ò5Ð5øÝð 	ð 	ð 	ØˆMˆMˆMð	øøøs   ´A ÁAÁAc                 óR   — |                       |¦  «        }|t          u rt          S | S r8   )r@   rA   )r=   rC   rD   s      r   Ú__ne__zErrorDetail.__ne__S   s,   € Ø—’˜UÑ#Ô#ˆØ•^Ð#Ð#Ý!Ð!ØˆzÐr   c                 ó8   — dt          | ¦  «        ›d| j        ›d�S )NzErrorDetail(string=z, code=ú))Ústrr   ©r=   s    r   Ú__repr__zErrorDetail.__repr__Y   s$   € € å�‰IŒIˆIˆIØŒIˆIˆIð
ð 	
r   c                 ó:   — t          t          | ¦  «        ¦  «        S r8   )ÚhashrI   rJ   s    r   Ú__hash__zErrorDetail.__hash___   s   € Ý•C˜‘I”I‰ŒÐr   r8   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r:   r@   rF   rK   rN   Ú__classcell__©r>   s   @r   r"   r"   ?   s”   ø€ € € € € ðð ð €Dðð ð ð ð ð ð
ð ð ð ð ðð ð ð
ð 
ð 
ðð ð ð ð ð ð r   r"   c                   óT   — e Zd ZdZej        Z ed¦  «        ZdZ	d	d„Z
d„ Zd„ Zd„ ZdS )
ÚAPIExceptionz‚
    Base class for REST framework exceptions.
    Subclasses should provide `.status_code` and `.default_detail` properties.
    zA server error occurred.ÚerrorNc                 óT   — |€| j         }|€| j        }t          ||¦  «        | _        d S r8   )Údefault_detailr   r   r/   ©r=   r/   r   s      r   Ú__init__zAPIException.__init__l   s1   € Øˆ>ØÔ(ˆFØˆ<ØÔ$ˆDå(¨°Ñ6Ô6ˆŒˆˆr   c                 ó*   — t          | j        ¦  «        S r8   )rI   r/   rJ   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/   rJ   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"}]}
        )r3   r/   rJ   s    r   Úget_full_detailszAPIException.get_full_details   s   € õ ! ¤Ñ-Ô-Ð-r   ©NN)rO   rP   rQ   rR   r   ÚHTTP_500_INTERNAL_SERVER_ERRORÚstatus_codeÚ_rY   r   r[   r]   r_   ra   r   r   r   rV   rV   c   s~   € € € € € ðð ð Ô7€KØ�QÐ1Ñ2Ô2€NØ€Lð7ð 7ð 7ð 7ð ð  ð  ð'ð 'ð 'ð.ð .ð .ð .ð .r   rV   c                   ó>   — e Zd Zej        Z ed¦  «        ZdZdd„Z	dS )ÚValidationErrorzInvalid input.ÚinvalidNc                 óø   — |€| j         }|€| j        }t          |t          ¦  «        rt	          |¦  «        }n-t          |t
          ¦  «        st          |t          ¦  «        s|g}t          ||¦  «        | _        d S r8   )rY   r   r   r   r   r   r   r/   rZ   s      r   r[   zValidationError.__init__”   s|   € Øˆ>ØÔ(ˆFØˆ<ØÔ$ˆDõ �f�eÑ$Ô$ð 	Ý˜&‘\”\ˆFˆFÝ˜F¥DÑ)Ô)ð 	µ*¸VÅTÑ2JÔ2Jð 	Ø�XˆFå(¨°Ñ6Ô6ˆŒˆˆr   rb   )
rO   rP   rQ   r   ÚHTTP_400_BAD_REQUESTrd   re   rY   r   r[   r   r   r   rg   rg   �   sE   € € € € € ØÔ-€KØ�QÐ'Ñ(Ô(€NØ€Lð7ð 7ð 7ð 7ð 7ð 7r   rg   c                   ó6   — e Zd Zej        Z ed¦  «        ZdZdS )Ú
ParseErrorzMalformed request.Úparse_errorN)	rO   rP   rQ   r   rj   rd   re   rY   r   r   r   r   rl   rl   ¤   s+   € € € € € ØÔ-€KØ�QÐ+Ñ,Ô,€NØ €L€L€Lr   rl   c                   ó6   — e Zd Zej        Z ed¦  «        ZdZdS )ÚAuthenticationFailedz%Incorrect authentication credentials.Úauthentication_failedN©	rO   rP   rQ   r   ÚHTTP_401_UNAUTHORIZEDrd   re   rY   r   r   r   r   ro   ro   ª   s+   € € € € € ØÔ.€KØ�QÐ>Ñ?Ô?€NØ*€L€L€Lr   ro   c                   ó6   — e Zd Zej        Z ed¦  «        ZdZdS )ÚNotAuthenticatedz-Authentication credentials were not provided.Únot_authenticatedNrq   r   r   r   rt   rt   °   s+   € € € € € ØÔ.€KØ�QÐFÑGÔG€NØ&€L€L€Lr   rt   c                   ó6   — e Zd Zej        Z ed¦  «        ZdZdS )ÚPermissionDeniedz2You do not have permission to perform this action.Úpermission_deniedN)	rO   rP   rQ   r   ÚHTTP_403_FORBIDDENrd   re   rY   r   r   r   r   rw   rw   ¶   s+   € € € € € ØÔ+€KØ�QÐKÑLÔL€NØ&€L€L€Lr   rw   c                   ó6   — e Zd Zej        Z ed¦  «        ZdZdS )ÚNotFoundz
Not found.Ú	not_foundN)	rO   rP   rQ   r   ÚHTTP_404_NOT_FOUNDrd   re   rY   r   r   r   r   r{   r{   ¼   s(   € € € € € ØÔ+€KØ�Q�|‘_”_€NØ€L€L€Lr   r{   c                   óH   ‡ — 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_allowedNc                 ó    •— |€(t          | j        ¦  «                             |¬¦  «        }t          ¦   «                              ||¦  «         d S )N)Úmethod©r   rY   Úformatr9   r[   )r=   r‚   r/   r   r>   s       €r   r[   zMethodNotAllowed.__init__Ç   sI   ø€ Øˆ>Ý˜tÔ2Ñ3Ô3×:Ò:À&Ð:ÑIÔIˆFÝ‰Œ×Ò˜ Ñ&Ô&Ð&Ð&Ð&r   rb   )rO   rP   rQ   r   ÚHTTP_405_METHOD_NOT_ALLOWEDrd   re   rY   r   r[   rS   rT   s   @r   r   r   Â   sZ   ø€ € € € € ØÔ4€KØ�QÐ7Ñ8Ô8€NØ'€Lð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   r   c                   óH   ‡ — 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_acceptableNc                 óZ   •— || _         t          ¦   «                              ||¦  «         d S r8   )Úavailable_renderersr9   r[   )r=   r/   r   rŠ   r>   s       €r   r[   zNotAcceptable.__init__Ò   s+   ø€ Ø#6ˆÔ Ý‰Œ×Ò˜ Ñ&Ô&Ð&Ð&Ð&r   ©NNN)rO   rP   rQ   r   ÚHTTP_406_NOT_ACCEPTABLErd   re   rY   r   r[   rS   rT   s   @r   r‡   r‡   Í   sZ   ø€ € € € € ØÔ0€KØ�QÐEÑFÔF€NØ#€Lð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   r‡   c                   óH   ‡ — 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_typeNc                 ó    •— |€(t          | j        ¦  «                             |¬¦  «        }t          ¦   «                              ||¦  «         d S )N)Ú
media_typerƒ   )r=   r‘   r/   r   r>   s       €r   r[   zUnsupportedMediaType.__init__Ü   sI   ø€ Øˆ>Ý˜tÔ2Ñ3Ô3×:Ò:ÀjÐ:ÑQÔQˆFÝ‰Œ×Ò˜ Ñ&Ô&Ð&Ð&Ð&r   rb   )rO   rP   rQ   r   ÚHTTP_415_UNSUPPORTED_MEDIA_TYPErd   re   rY   r   r[   rS   rT   s   @r   rŽ   rŽ   ×   sZ   ø€ € € € € ØÔ8€KØ�QÐJÑKÔK€NØ+€Lð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   rŽ   c                   ót   ‡ — 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.Ú	throttledNc                 ó|  •— |€t          | j        ¦  «        }|�yt          j        |¦  «        }d                     |t          t          | j                             |¬¦  «        | j                             |¬¦  «        |¦  «        ¦  «        f¦  «        }|| _	        t          ¦   «                              ||¦  «         d S )Nú )Úwait)r   rY   ÚmathÚceilÚjoinr   Úextra_detail_singularr„   Úextra_detail_pluralr˜   r9   r[   )r=   r˜   r/   r   r>   s       €r   r[   zThrottled.__init__é   s¸   ø€ Øˆ>Ý˜tÔ2Ñ3Ô3ˆFØÐÝ”9˜T‘?”?ˆDØ—X’XØÝ�( 4Ô#=×#DÒ#DÈ$Ð#DÑ#OÔ#OØ#'Ô#;×#BÒ#BÈÐ#BÑ#MÔ#MØ#'ñ)ô )ñ *ô *ð+ñ ,ô ,ˆFð
 ˆŒ	Ý‰Œ×Ò˜ Ñ&Ô&Ð&Ð&Ð&r   r‹   )rO   rP   rQ   r   ÚHTTP_429_TOO_MANY_REQUESTSrd   re   rY   rœ   r�   r   r[   rS   rT   s   @r   r”   r”   â   s|   ø€ € € € € ØÔ3€KØ�QÐ/Ñ0Ô0€NØ˜AÐDÑEÔEÐØ˜!ÐCÑDÔDÐØ€Lð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   r”   c                 ó@   — ddi}t          |t          j        ¬¦  «        S )z$
    Generic 500 error handler.
    rW   zServer Error (500)r   )r   r   rc   )ÚrequestÚargsÚkwargsr#   s       r   Úserver_errorr£   ÷   s)   € ð
 	Ð%ð€Dõ ˜¥VÔ%JÐKÑKÔKÐKr   c                 ó@   — ddi}t          |t          j        ¬¦  «        S )z$
    Generic 400 error handler.
    rW   zBad Request (400)r   )r   r   rj   )r    Ú	exceptionr¡   r¢   r#   s        r   Úbad_requestr¦     s)   € ð
 	Ð$ð€Dõ ˜¥VÔ%@ÐAÑAÔAÐAr   r8   )"rR   r™   Údjango.httpr   Údjango.utils.encodingr   Údjango.utils.translationr   re   r   Úrest_frameworkr   Ú'rest_framework.utils.serializer_helpersr	   r
   r   r)   r3   rI   r"   Ú	ExceptionrV   rg   rl   ro   rt   rw   r{   r   r‡   rŽ   r”   r£   r¦   r   r   r   ú<module>r­      sè  ððð ð €€€à $Ð $Ð $Ð $Ð $Ð $Ø +Ð +Ð +Ð +Ð +Ð +Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø -Ð -Ð -Ð -Ð -Ð -à !Ð !Ð !Ð !Ð !Ð !Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jð#ð #ð #ð #ð4ð ð ðð ð ð!ð !ð !ð !ð !�#ñ !ô !ð !ðH".ð ".ð ".ð ".ð ".�9ñ ".ô ".ð ".ðX7ð 7ð 7ð 7ð 7�lñ 7ô 7ð 7ð*!ð !ð !ð !ð !�ñ !ô !ð !ð+ð +ð +ð +ð +˜<ñ +ô +ð +ð'ð 'ð 'ð 'ð '�|ñ 'ô 'ð 'ð'ð 'ð 'ð 'ð '�|ñ 'ô 'ð 'ðð ð ð ð ˆ|ñ ô ð ð'ð 'ð 'ð 'ð '�|ñ 'ô 'ð 'ð'ð 'ð 'ð 'ð '�Lñ 'ô 'ð 'ð'ð 'ð 'ð 'ð '˜<ñ 'ô 'ð 'ð'ð 'ð 'ð 'ð '�ñ 'ô 'ð 'ð*Lð Lð LðBð Bð Bð Bð Br   