o
    2c                     @   sd   d 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ddZ	dd	 Z
dd
dZdd ZdS )z)DNS RRsets (an RRset is a named rdataset)    Nc                       s   e Zd ZdZddgZejjdf fdd	Z fddZ	d	d
 Z
dd Z fddZ fddZ	d fdd	Zd fdd	Zd fdd	Z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deletingNc                    s    t  ||| || _|| _dS )zCreate a new RRset.N)super__init__r   r   selfr   rdclassrdtypecoversr   	__class__ ?/var/www/html/gps/gps/lib/python3.10/site-packages/dns/rrset.pyr   (   s   
zRRset.__init__c                    s   t   }| j|_| j|_|S N)r   _cloner   r   )r   objr   r   r   r   0   s   
zRRset._clonec                 C   s   | j dkrd}ndtj| j  d }| jd ur"d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
   _rdata_repr)r   ctextdtextr   r   r   __repr__6   s.   

zRRset.__repr__c                 C   s   |   S r   )r   r   r   r   r   __str__D   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&   G   s   
zRRset.__eq__c                    s4   t |d tjjr| j|i |S t j|i |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   )r#   r   r   Name
full_matchr   match)r   argskwargsr   r   r   r*   O   s   zRRset.matchc                    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   r*   r   r   r   r   r   r   r)   `   s
   zRRset.full_matchTc                    s   t  j| j||| jfi |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   origin
relativizekwr   r   r   r   m   s
   zRRset.to_textc                    s    t  j| j|||| jfi |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   filecompressr-   r/   r   r   r   r0      s
   
zRRset.to_wirec                 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_rdatasetr   )NT)NN)__name__
__module____qualname____doc__	__slots__r   r   NONEr   r   r    r"   r&   r*   r)   r   r0   r6   __classcell__r   r   r   r   r      s     	r   Tc	              
   C   s   t | trtjj| d|d} tjj|}tjj	|}t
| ||}	|	| |D ]}
tj|	j|	j|
||||}|	| q)|	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
idna_codec)r#   r   r   r   	from_textr   
RdataClassmaker   	RdataTyper   
update_ttlrdatar	   r
   add)r   r4   r	   r
   text_rdatasr?   r-   r.   relativize_tortrdr   r   r   from_text_list   s   

rL   c                 G   s   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.
    )rL   )r   r4   r	   r
   rG   r   r   r   r@      s   r@   c                 C   sn   t | trtjj| d|d} t|dkrtdd}|D ]}|du r/t| |j|j	}|
| || q|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.

    Nr>   r   zrdata list must not be empty)r#   r   r   r   r@   len
ValueErrorr   r	   r
   rD   rF   )r   r4   rdatasr?   rI   rK   r   r   r   r3      s   

r3   c                 G   s   t | ||S )zCreate an RRset with the specified name and TTL, and with
    the specified rdata objects.

    Returns a ``dns.rrset.RRset`` object.
    )r3   )r   r4   rO   r   r   r   
from_rdata   s   rP   )NNTNr   )r:   dns.namer   dns.rdatasetdns.rdataclassdns.rendererr$   r%   r   rL   r@   r3   rP   r   r   r   r   <module>   s   ~
"

