o
    'èhA  ã                   @   sÆ   d Z ddlmZmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZ	G dd„ deƒZ
G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZdS )z…Common DNS Exceptions.

Dnspython modules may also define their own exceptions, which will
always be subclasses of ``DNSException``.
é    )ÚOptionalÚSetc                       sx   e Zd ZU dZdZee ed< eƒ Z	e
e ed< dZee ed< ‡ fdd„Zdd	„ Zd
d„ Zdd„ Z‡ fdd„Z‡  ZS )ÚDNSExceptionaõ  Abstract base class shared by all dnspython exceptions.

    It supports two basic modes of operation:

    a) Old/compatible mode is used if ``__init__`` was called with
    empty *kwargs*.  In compatible mode all *args* are passed
    to the standard Python Exception class as before and all *args* are
    printed by the standard ``__str__`` implementation.  Class variable
    ``msg`` (or doc string if ``msg`` is ``None``) is returned from ``str()``
    if *args* is empty.

    b) New/parametrized mode is used if ``__init__`` was called with
    non-empty *kwargs*.
    In the new mode *args* must be empty and all kwargs must match
    those set in class variable ``supp_kwargs``. All kwargs are stored inside
    ``self.kwargs`` and used in a new ``__str__`` implementation to construct
    a formatted message based on the ``fmt`` class variable, a ``string``.

    In the simplest case it is enough to override the ``supp_kwargs``
    and ``fmt`` class variables to get nice parametrized messages.
    NÚmsgÚsupp_kwargsÚfmtc                    sr   | j |i |¤Ž |r| jdi |¤Ž| _t| ƒ| _ntƒ | _| jd u r&| j| _|r0tƒ j|Ž  d S tƒ  | j¡ d S ©N© )	Ú_check_paramsÚ_check_kwargsÚkwargsÚstrr   ÚdictÚ__doc__ÚsuperÚ__init__©ÚselfÚargsr   ©Ú	__class__r	   úI/var/www/html/olx_land/venv/lib/python3.10/site-packages/dns/exception.pyr   7   s   
zDNSException.__init__c                 O   s(   |s|rt |ƒt |ƒksJ dƒ‚dS dS )zsOld exceptions supported only args and not kwargs.

        For sanity we do not allow to mix old and new behavior.z=keyword arguments are mutually exclusive with positional argsN)Úboolr   r	   r	   r   r
   G   s   ÿþÿzDNSException._check_paramsc                 K   s*   |rt | ¡ ƒ| jksJ d| j› ƒ‚|S )Nz+following set of keyword args is required: )ÚsetÚkeysr   )r   r   r	   r	   r   r   P   s
   
ÿzDNSException._check_kwargsc                 K   sd   i }|  ¡ D ])\}}t|ttfƒr+ttt|ƒƒ||< t|| ƒdkr*||  ¡ ||< q|||< q|S )z˜Format kwargs before printing them.

        Resulting dictionary has to have keys necessary for str.format call
        on fmt class variable.
        é   )ÚitemsÚ
isinstanceÚlistr   Úmapr   ÚlenÚpop)r   r   ÚfmtargsÚkwÚdatar	   r	   r   Ú_fmt_kwargsW   s   €
zDNSException._fmt_kwargsc                    s:   | j r| jr| jdi | j ¤Ž}| jjdi |¤ŽS tƒ  ¡ S r   )r   r   r%   Úformatr   Ú__str__)r   r"   r   r	   r   r'   i   s   
zDNSException.__str__)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Ú__annotations__r   r   r   r   r   r
   r   r%   r'   Ú__classcell__r	   r	   r   r   r      s   
 	r   c                   @   ó   e Zd ZdZdS )Ú	FormErrorzDNS message is malformed.N©r(   r)   r*   r   r	   r	   r	   r   r.   s   ó    r.   c                   @   r-   )ÚSyntaxErrorzText input is malformed.Nr/   r	   r	   r	   r   r1   w   r0   r1   c                   @   r-   )ÚUnexpectedEndzText input ended unexpectedly.Nr/   r	   r	   r	   r   r2   {   r0   r2   c                   @   r-   )ÚTooBigzThe DNS message is too big.Nr/   r	   r	   r	   r   r3      r0   r3   c                       s*   e Zd ZdZdhZdZ‡ fdd„Z‡  ZS )ÚTimeoutzThe DNS operation timed out.Útimeoutz7The DNS operation timed out after {timeout:.3f} secondsc                    s   t ƒ j|i |¤Ž d S ©N)r   r   r   r   r	   r   r   ‹   s   zTimeout.__init__)r(   r)   r*   r   r   r   r   r,   r	   r	   r   r   r4   ƒ   s
    r4   c                   @   r-   )ÚUnsupportedAlgorithmz&The DNSSEC algorithm is not supported.Nr/   r	   r	   r	   r   r7      r0   r7   c                   @   r-   )ÚAlgorithmKeyMismatchz=The DNSSEC algorithm is not supported for the given key type.Nr/   r	   r	   r	   r   r8   “   r0   r8   c                   @   r-   )ÚValidationFailurez The DNSSEC signature is invalid.Nr/   r	   r	   r	   r   r9   —   r0   r9   c                   @   r-   )ÚDeniedByPolicyzDenied by DNSSEC policy.Nr/   r	   r	   r	   r   r:   ›   r0   r:   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚExceptionWrapperc                 C   s
   || _ d S r6   )Úexception_class)r   r<   r	   r	   r   r       s   
zExceptionWrapper.__init__c                 C   s   | S r6   r	   )r   r	   r	   r   Ú	__enter__£   s   zExceptionWrapper.__enter__c                 C   s(   |d urt || jƒs|  t|ƒ¡|‚dS )NF)r   r<   r   )r   Úexc_typeÚexc_valÚexc_tbr	   r	   r   Ú__exit__¦   s   zExceptionWrapper.__exit__N)r(   r)   r*   r   r=   rA   r	   r	   r	   r   r;   Ÿ   s    r;   N)r   Útypingr   r   Ú	Exceptionr   r.   r1   r2   r3   r4   r7   r8   r9   r:   r;   r	   r	   r	   r   Ú<module>   s   W