HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/dns/__pycache__/versioned.cpython-310.pyc
o

!we�-�@s�dZddlZddlZddlmZmZmZmZmZddl	Z
ddlZ
ddlZ
ddl
Z
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
Gdd�de
jj�Ze
jjZe
jjZe
jjZe
jjZe
jjZe
jjZGdd�de
jj�ZdS)zDNS Versioned Zones.�N)�Callable�Deque�Optional�Set�Unionc@seZdZdZdS)�UseTransactionz-To alter a versioned zone, use a transaction.N)�__name__�
__module__�__qualname__�__doc__�rr�F/home/arjun/projects/env/lib/python3.10/site-packages/dns/versioned.pyrsrc
s�eZdZgd�ZeZejjddfde	e
ejje
fdejjdede	edege	eff�fdd	�
Z	d;d
e	ede	edefd
d�Zd<dedefdd�Zdd�Zdd�Zdd�Zde	eddfdd�Zde	edege	efddfdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Z d)d*�Z!	d<d+e
ejje
fd,edej"jf�fd-d.�
Z#d+e
ejje
fddfd/d0�Z$ej%j&dfd+e
ejje
fd1e
ej%j'e
fd2e
ej%j'e
fd,edej(j)f
�fd3d4�
Z*ej%j&dfd+e
ejje
fd1e
ej%j'e
fd2e
ej%j'e
fd,ede	ej(j)f
�fd5d6�
Z+ej%j&fd+e
ejje
fd1e
ej%j'e
fd2e
ej%j'e
fddfd7d8�Z,d+e
ejje
fdej(j)ddfd9d:�Z-�Z.S)=�Zone)�	_versions�_versions_lock�
_write_txn�_write_waiters�_write_event�_pruning_policy�_readersTN�origin�rdclass�
relativize�pruning_policycstt��|||�t��|_t��|_|dur|j|_	n||_	d|_
d|_t��|_t
�|_|�dt|dd�|�dS)a�Initialize a versioned zone object.

        *origin* is the origin of the zone.  It may be a ``dns.name.Name``,
        a ``str``, or ``None``.  If ``None``, then the zone's origin will
        be set by the first ``$ORIGIN`` line in a zone file.

        *rdclass*, an ``int``, the zone's rdata class; the default is class IN.

        *relativize*, a ``bool``, determine's whether domain names are
        relativized to the zone's origin.  The default is ``True``.

        *pruning policy*, a function taking a ``Zone`` and a ``Version`` and returning
        a ``bool``, or ``None``.  Should the version be pruned?  If ``None``,
        the default policy, which retains one version is used.
        NT)�replacement)�super�__init__�collections�dequer�	threading�Lock�
_version_lock�_default_pruning_policyrrrr�setr�_commit_version_unlocked�WritableVersion)�selfrrrr��	__class__rr
r.s



�z
Zone.__init__�id�serial�returnc	Cs6|dur|durtd��|j��|dur0d}t|j�D]}|j|kr&|}nq|dur/td��nL|durw|jr<tjj	}n
|j
dusCJ�|j
}d}t|j�D] }|j�|�}|rm|�
|jtjj�}|rm|dj|krm|}nqM|durvtd��n|jd}t|d|�}|j�|�|Wd�S1s�wYdS)Nz!cannot specify both id and serialzversion not foundrzserial not found���F)�
ValueErrorr!�reversedrr)�KeyErrorr�dns�name�emptyr�nodes�get�get_rdatasetr�	rdatatype�SOAr*�Transactionr�add)	r&r)r*�version�v�oname�n�rds�txnrrr
�readerSsF
��
��
$�zZone.readerFrcCs�d}	|j�/|jdur$||jkr$t||dd�|_d|_	Wd�nt��}|j�|�Wd�n1s8wY|��q|j�	�|jS)NT)�make_immutable)
r!rrr8r�Eventr�append�wait�_setup_version)r&r�eventrrr
�writerws"���)�
,zZone.writercCs,t|j�dkr|j��|_|j��dSdS)Nr)�lenr�popleftrr#)r&rrr
�!_maybe_wakeup_one_waiter_unlocked�s�z&Zone._maybe_wakeup_one_waiter_unlockedcC�dS)NTr)r&�zoner:rrr
r"��zZone._default_pruning_policycCs�t|j�dks	J�t|j�dkrtdd�|jD��}n|jdj}|jdj|krJ|�||jd�rN|j��|jdj|krL|�||jd�s2dSdSdSdS)Nrcss�|]}|jjVqdS�N)r:r))�.0r?rrr
�	<genexpr>�s�z0Zone._prune_versions_unlocked.<locals>.<genexpr>r,)rHrr�minr)rrI)r&�
least_keptrrr
�_prune_versions_unlocked�s
�
�
�zZone._prune_versions_unlocked�max_versionscsD�dur�dkrtd���durdd�}n�fdd�}|�|�dS)zYSet a pruning policy that retains up to the specified number
        of versions
        N�zmax versions must be at least 1cSrK)NFr�rL�_rrr
�policy�rMz%Zone.set_max_versions.<locals>.policycst|j��kSrN)rHrrV�rTrr
rX�s)r-�set_pruning_policy)r&rTrXrrYr
�set_max_versions�s
zZone.set_max_versionsrXcCsH|dur|j}|j�||_|��Wd�dS1swYdS)a�Set the pruning policy for the zone.

        The *policy* function takes a `Version` and returns `True` if
        the version should be pruned, and `False` otherwise.  `None`
        may also be specified for policy, in which case the default policy
        is used.

        Pruning checking proceeds from the least version and the first
        time the function returns `False`, the checking stops.  I.e. the
        retained versions are always a consecutive sequence.
        N)r"r!rrS)r&rXrrr
rZ�s
"�zZone.set_pruning_policycCs@|j�|j�|�|��Wd�dS1swYdSrN)r!r�removerS�r&r?rrr
�	_end_read�s
"�zZone._end_readcCs |j|ksJ�d|_|��dSrN)rrJr]rrr
�_end_write_unlocked�szZone._end_write_unlockedcCs6|j�|�|�Wd�dS1swYdSrN)r!r_r]rrr
�
_end_write�s"�zZone._end_writecCsF|j�|�|��|j|_|jdur||_|dur!|�|�dSdSrN)rrCrSr3rr_�r&r?r:rrrr
r$�s
�zZone._commit_version_unlockedcCs:|j�|�|||�Wd�dS1swYdSrN)r!r$rarrr
�_commit_versions"�zZone._commit_versioncCs*t|j�dkr|jdjd}|Sd}|S)Nrr,rU)rHrr))r&r)rrr
�_get_next_version_ids
�zZone._get_next_version_idr1�createcs|rt�t��|�SrN)rr�	find_node)r&r1rdr'rr
reszZone.find_nodecC�t�rN�r)r&r1rrr
�delete_noderMzZone.delete_node�rdtype�coverscs$|rt�t��|||�}tj�|�SrN)rr�
find_rdatasetr0�rdataset�ImmutableRdataset�r&r1rirjrdrlr'rr
rkszZone.find_rdatasetcs0|rt�t��|||�}|durtj�|�SdSrN)rrr5r0rlrmrnr'rr
r5$szZone.get_rdatasetcCrfrNrg)r&r1rirjrrr
�delete_rdataset3szZone.delete_rdatasetcCrfrNrg)r&r1rrrr
�replace_rdataset;szZone.replace_rdataset)NN)F)/rr	r
�	__slots__�Node�node_factoryr0�
rdataclass�INrrr1�Name�str�
RdataClass�boolr�Versionr�intr8r@rGrJr"rSr[rZr^r_r`r$rbrc�nodererhr6�NONE�	RdataTyperl�Rdatasetrkr5rorp�
__classcell__rrr'r
r!s�
�����&���
�$1�
�
���������������
�����
����r) rrr�typingrrrrr�
dns.exceptionr0�
dns.immutable�dns.name�dns.node�dns.rdataclass�dns.rdataset�
dns.rdatatype�dns.rdtypes.ANY.SOA�dns.zone�	exception�DNSExceptionrrL�
VersionedNoderr�ImmutableVersionedNode�
ImmutableNoderzr%�ImmutableVersionr8rrrrr
�<module>s*