U
    <{f#                     @   sN  d Z ddlmZmZmZmZmZmZ ddlZ	ddl
Z	ddlZ	ddlZ	G dd de	jjZdee	jjef eee	jjef ee	jjef ee ee	jj ee	jj eee	jj ed
dd	Zee	jjef eee	jjef ee	jjef eed
ddZdee	jjef eee	jj ee	jj edddZee	jjef eeedddZdS )z)DNS RRsets (an RRset is a named rdataset)    )Any
CollectionDictOptionalUnioncastNc                       s<  e Zd ZdZddgZejjdfejj	ej
jejjejjeej
j d fddZ fdd	Zd
d Zdd Z fddZeeed fddZd ejj	ej
jejjejjeej
j ed fddZd!eejj	 eeeef ed fddZd"eeejj eejj	 eeef ed fddZejjdddZ  Z S )#RRseta6  A DNS RRset (named rdataset).

    RRset inherits from Rdataset, and RRsets can be treated as
    Rdatasets in most cases.  There are, however, a few notable
    exceptions.  RRsets have different to_wire() and to_text() method
    arguments, reflecting the fact that RRsets always have an owner
    name.
    namedeletingN)r	   rdclassrdtypecoversr
   c                    s    t  ||| || _|| _dS )zCreate a new RRset.N)super__init__r	   r
   selfr	   r   r   r   r
   	__class__ H/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/dns/rrset.pyr   (   s    
zRRset.__init__c                    s   t   }| j|_| j|_|S N)r   _cloner	   r
   )r   objr   r   r   r   6   s    
zRRset._clonec                 C   s   | j dkrd}ndtj| j  d }| jd k	rDdtj| j }nd}dt| j d tj| j d tj| j	 | | d | 
  d	 S )
Nr    ()z delete=z<DNS  z RRset: >)r   dns	rdatatypeto_textr
   
rdataclassstrr	   r   r   Z_rdata_repr)r   ZctextZdtextr   r   r   __repr__<   s8    

	
zRRset.__repr__c                 C   s   |   S r   )r    r   r   r   r   __str__S   s    zRRset.__str__c                    s:   t |tr| j|jkr.dS nt |tjjs.dS t |S )NF)
isinstancer   r	   r   rdatasetRdatasetr   __eq__)r   otherr   r   r   r)   V   s    
zRRset.__eq__)argskwargsreturnc                    s0   t |d tjjr| j||S t j||S dS )a  Does this rrset match the specified attributes?

        Behaves as :py:func:`full_match()` if the first argument is a
        ``dns.name.Name``, and as :py:func:`dns.rdataset.Rdataset.match()`
        otherwise.

        (This behavior fixes a design mistake where the signature of this
        method became incompatible with that of its superclass.  The fix
        makes RRsets matchable as Rdatasets while preserving backwards
        compatibility.)
        r   N)r&   r   r	   Name
full_matchr   match)r   r+   r,   r   r   r   r0   ^   s    zRRset.match)r	   r   r   r   r
   r-   c                    s0   t  |||sdS | j|ks(| j|kr,dS dS )ztReturns ``True`` if this rrset matches the specified name, class,
        type, covers, and deletion state.
        FT)r   r0   r	   r
   r   r   r   r   r/   o   s
    zRRset.full_matchT)origin
relativizekwr-   c                    s   t  j| j||| jf|S )a  Convert the RRset into DNS zone file format.

        See ``dns.name.Name.choose_relativity`` for more information
        on how *origin* and *relativize* determine the way names
        are emitted.

        Any additional keyword arguments are passed on to the rdata
        ``to_text()`` method.

        *origin*, a ``dns.name.Name`` or ``None``, the origin for relative
        names.

        *relativize*, a ``bool``.  If ``True``, names will be relativized
        to *origin*.
        )r   r    r	   r
   )r   r1   r2   r3   r   r   r   r       s       zRRset.to_text)filecompressr1   r3   r-   c                    s   t  j| j|||| jf|S )zConvert the RRset to wire format.

        All keyword arguments are passed to ``dns.rdataset.to_wire()``; see
        that function for details.

        Returns an ``int``, the number of records emitted.
        )r   to_wirer	   r
   )r   r4   r5   r1   r3   r   r   r   r6      s        zRRset.to_wire)r-   c                 C   s   t j| jt| S )zYConvert an RRset into an Rdataset.

        Returns a ``dns.rdataset.Rdataset``.
        )r   r'   from_rdata_listttllistr$   r   r   r   to_rdataset   s    zRRset.to_rdataset)N)NT)NN)!__name__
__module____qualname____doc__	__slots__r   r   NONEr	   r.   r!   
RdataClass	RdataTyper   r   r   r#   r%   r)   r   boolr0   r/   r   r"   r    ZCompressTypeintr6   r'   r(   r:   __classcell__r   r   r   r   r      sV   	
 
  

  


r   T)
r	   r8   r   r   text_rdatas
idna_codecr1   r2   relativize_tor-   c	              
   C   s   t | trtjj| d|d} tjj|}tjj	|}t
| ||}	|	| |D ]*}
tj|	j|	j|
||||}|	| qR|	S )ay  Create an RRset with the specified name, TTL, class, and type, and with
    the specified list of rdatas in text format.

    *idna_codec*, a ``dns.name.IDNACodec``, specifies the IDNA
    encoder/decoder to use; if ``None``, the default IDNA 2003
    encoder/decoder is used.

    *origin*, a ``dns.name.Name`` (or ``None``), the
    origin to use for relative names.

    *relativize*, a ``bool``.  If true, name will be relativized.

    *relativize_to*, a ``dns.name.Name`` (or ``None``), the origin to use
    when relativizing names.  If not set, the *origin* value will be used.

    Returns a ``dns.rrset.RRset`` object.
    NrG   )r&   r"   r   r	   	from_textr!   rA   maker   rB   r   
update_ttlrdatar   r   add)r	   r8   r   r   rF   rG   r1   r2   rH   rtrdr   r   r   from_text_list   s$    

      rR   )r	   r8   r   r   rF   r-   c                 G   s   t | |||ttt |S )zCreate an RRset with the specified name, TTL, class, and type and with
    the specified rdatas in text format.

    Returns a ``dns.rrset.RRset`` object.
    )rR   r   r   r"   )r	   r8   r   r   rF   r   r   r   rJ      s        rJ   )r	   r8   rdatasrG   r-   c                 C   sz   t | trtjj| d|d} t|dkr0tdd}|D ]0}|dkr^t| |j|j	}|
| || q8|dk	svt|S )a/  Create an RRset with the specified name and TTL, and with
    the specified list of rdata objects.

    *idna_codec*, a ``dns.name.IDNACodec``, specifies the IDNA
    encoder/decoder to use; if ``None``, the default IDNA 2003
    encoder/decoder is used.

    Returns a ``dns.rrset.RRset`` object.

    NrI   r   zrdata list must not be empty)r&   r"   r   r	   rJ   len
ValueErrorr   r   r   rL   rN   AssertionError)r	   r8   rS   rG   rO   rQ   r   r   r   r7      s    

r7   )r	   r8   rS   r-   c                 G   s   t | |tttjj |S )zCreate an RRset with the specified name and TTL, and with
    the specified rdata objects.

    Returns a ``dns.rrset.RRset`` object.
    )r7   r   r   r   rM   Rdata)r	   r8   rS   r   r   r   
from_rdata  s    rX   )NNTN)N) r>   typingr   r   r   r   r   r   Zdns.namer   Zdns.rdataclassZdns.rdatasetZdns.rendererr'   r(   r   r	   r.   r"   rD   r!   rA   r   rB   Z	IDNACodecrC   rR   rJ   rM   rW   r7   rX   r   r   r   r   <module>   sN     $    


, 

 