o
    2³c‡  ã                   @   sv   d 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``.
c                       sR   e Zd ZdZdZeƒ ZdZ‡ 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.
    Nc                    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ÚstrÚmsgÚdictÚ__doc__ÚsuperÚ__init__©ÚselfÚargsr   ©Ú	__class__r   úC/var/www/html/gps/gps/lib/python3.10/site-packages/dns/exception.pyr   3   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   B   s
   ÿÿzDNSException._check_paramsc                 K   s(   |rt | ¡ ƒ| jksJ d| j ƒ‚|S )Nz-following set of keyword args is required: %s)ÚsetÚkeysÚsupp_kwargs)r   r   r   r   r   r   J   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_kwargsQ   s   €
zDNSException._fmt_kwargsc                    s:   | j r| jr| jdi | j ¤Ž}| jjdi |¤ŽS tƒ  ¡ S r   )r   Úfmtr!   Úformatr   Ú__str__)r   r   r   r   r   r$   c   s   
zDNSException.__str__)Ú__name__Ú
__module__Ú__qualname__r
   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*   m   ó    r*   c                   @   r)   )ÚSyntaxErrorzText input is malformed.Nr+   r   r   r   r   r-   q   r,   r-   c                   @   r)   )ÚUnexpectedEndzText input ended unexpectedly.Nr+   r   r   r   r   r.   u   r,   r.   c                   @   r)   )ÚTooBigzThe DNS message is too big.Nr+   r   r   r   r   r/   y   r,   r/   c                   @   s   e Zd ZdZdhZdZdS )ÚTimeoutzThe DNS operation timed out.Útimeoutz3The DNS operation timed out after {timeout} secondsN)r%   r&   r'   r
   r   r"   r   r   r   r   r0   }   s    r0   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚExceptionWrapperc                 C   s
   || _ d S ©N)Úexception_class)r   r4   r   r   r   r   „   s   
zExceptionWrapper.__init__c                 C   s   | S r3   r   )r   r   r   r   Ú	__enter__‡   s   zExceptionWrapper.__enter__c                 C   s(   |d urt || jƒs|  t|ƒ¡|‚dS )NF)r   r4   r   )r   Úexc_typeÚexc_valÚexc_tbr   r   r   Ú__exit__Š   s
   ÿzExceptionWrapper.__exit__N)r%   r&   r'   r   r5   r9   r   r   r   r   r2   ƒ   s    r2   N)	r
   Ú	Exceptionr   r*   r-   r.   r/   r0   r2   r   r   r   r   Ú<module>   s   U