HEX
Server: LiteSpeed
System: Linux srv146.niagahoster.com 4.18.0-553.30.1.lve.el8.x86_64 #1 SMP Tue Dec 3 01:21:19 UTC 2024 x86_64
User: kodi1989 (1633)
PHP: 8.1.34
Disabled: symlink,shell_exec,exec,popen,system,dl,passthru,escapeshellarg,escapeshellcmd,show_source,pcntl_exec
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/dns/__pycache__/versioned.cpython-37.pyc
B

��f.�@s�dZddlmZmZmZmZmZddlZddlZddl	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.�)�Callable�Deque�Optional�Set�UnionNc@seZdZdZdS)�UseTransactionz-To alter a versioned zone, use a transaction.N)�__name__�
__module__�__qualname__�__doc__�rr�>/opt/alt/python37/lib/python3.7/site-packages/dns/versioned.pyrsrc	sbeZdZdddddddgZeZejjdd	fe	e
ejje
fejjee	edege	efd
��fdd�
Zd=e	ee	eed
�dd�Zd>eed�dd�Zdd�Zdd�Zdd�Ze	ed	d�dd�Ze	edege	efd	d�dd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Z d*d+�Z!d?e
ejje
feej"jd,��fd-d.�
Z#e
ejje
fd	d/�d0d1�Z$ej%j&dfe
ejje
fe
ej%j'e
fe
ej%j'e
feej(j)d2��fd3d4�
Z*ej%j&dfe
ejje
fe
ej%j'e
fe
ej%j'e
fee	ej(j)d2��fd5d6�
Z+ej%j&fe
ejje
fe
ej%j'e
fe
ej%j'e
fd	d7�d8d9�Z,e
ejje
fej(j)d	d:�d;d<�Z-�Z.S)@�Zone�	_versionsZ_versions_lock�
_write_txn�_write_waiters�_write_event�_pruning_policy�_readersTN)�origin�rdclass�
relativize�pruning_policycstt��|||�t��|_t��|_|dkr6|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
r0s



z
Zone.__init__)�id�serial�returnc		Cs"|dk	r|dk	rtd��|j��|dk	rbd}x"t|j�D]}|j|kr8|}Pq8W|dkr�td��n�|dk	r�|jrztjj	}n|j
dk	s�t�|j
}d}xLt|j�D]>}|j�
|�}|r�|�|jtjj�}|r�|dj|kr�|}Pq�W|dkr�td��n
|jd}t|d|�}|j�|�|SQRXdS)Nz!cannot specify both id and serialzversion not foundrzserial not found���F)�
ValueErrorr �reversedrr'�KeyErrorr�dns�name�emptyr�AssertionError�nodes�get�get_rdatasetr�	rdatatypeZSOAr(�Transactionr�add)	r%r'r(�version�vZoname�nZrds�txnrrr
�readerUs<




zZone.readerF)rr)c	Cstd}x^|j�F|jdkr:||jkr:t||dd�|_d|_Pt��}|j�|�WdQRX|��qW|j�	�|jS)NT)Zmake_immutable)
r rrr6r�Eventr�append�waitZ_setup_version)r%r�eventrrr
�writerys
zZone.writercCs(t|j�dkr$|j��|_|j��dS)Nr)�lenr�popleftrr")r%rrr
�!_maybe_wakeup_one_waiter_unlocked�sz&Zone._maybe_wakeup_one_waiter_unlockedcCsdS)NTr)r%�zoner8rrr
r!�szZone._default_pruning_policycCsxt|j�dkst�t|j�dkr6tdd�|jD��}n|jdj}x0|jdj|krr|�||jd�rr|j��qDWdS)Nrcss|]}|jjVqdS)N)r8r')�.0r;rrr
�	<genexpr>�sz0Zone._prune_versions_unlocked.<locals>.<genexpr>r*)rBrr1r�minr'rrC)r%Z
least_keptrrr
�_prune_versions_unlocked�szZone._prune_versions_unlocked)�max_versionsr)csD�dk	r�dkrtd���dkr*dd�}n�fdd�}|�|�dS)zYSet a pruning policy that retains up to the specified number
        of versions
        N�zmax versions must be at least 1cSsdS)NFr)rE�_rrr
�policy�sz%Zone.set_max_versions.<locals>.policycst|j��kS)N)rBr)rErL)rJrr
rM�s)r+�set_pruning_policy)r%rJrMr)rJr
�set_max_versions�s
zZone.set_max_versions)rMr)c	Cs2|dkr|j}|j�||_|��WdQRXdS)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 rrI)r%rMrrr
rN�s
zZone.set_pruning_policyc	Cs*|j�|j�|�|��WdQRXdS)N)r r�removerI)r%r;rrr
�	_end_read�szZone._end_readcCs |j|kst�d|_|��dS)N)rr1rD)r%r;rrr
�_end_write_unlocked�szZone._end_write_unlockedc	Cs |j�|�|�WdQRXdS)N)r rR)r%r;rrr
�
_end_write�szZone._end_writecCsB|j�|�|��|j|_|jdkr,||_|dk	r>|�|�dS)N)rr>rIr2rrR)r%r;r8rrrr
r#�s
zZone._commit_version_unlockedc	Cs$|j�|�|||�WdQRXdS)N)r r#)r%r;r8rrrr
�_commit_versionszZone._commit_versioncCs(t|j�dkr |jdjd}nd}|S)Nrr*rK)rBrr')r%r'rrr
�_get_next_version_id	szZone._get_next_version_id)r/�creater)cs|rt�t��|�S)N)rr�	find_node)r%r/rV)r&rr
rWszZone.find_node)r/r)cCst�dS)N)r)r%r/rrr
�delete_nodeszZone.delete_node)r/�rdtype�coversrVr)cs$|rt�t��|||�}tj�|�S)N)rr�
find_rdatasetr.�rdataset�ImmutableRdataset)r%r/rYrZrVr\)r&rr
r[szZone.find_rdatasetcs4|rt�t��|||�}|dk	r,tj�|�SdSdS)N)rrr4r.r\r])r%r/rYrZrVr\)r&rr
r4&szZone.get_rdataset)r/rYrZr)cCst�dS)N)r)r%r/rYrZrrr
�delete_rdataset5szZone.delete_rdataset)r/rr)cCst�dS)N)r)r%r/rrrr
�replace_rdataset=szZone.replace_rdataset)NN)F)F)/rr	r
�	__slots__�NodeZnode_factoryr.Z
rdataclass�INrrr/�Name�strZ
RdataClass�boolr�Versionr�intr6r<rArDr!rIrOrNrQrRrSr#rTrU�noderWrXr5�NONEZ	RdataTyper\ZRdatasetr[r4r^r_�
__classcell__rr)r&r
r"sND!"1
0
0
2r) r�typingrrrrrrrZ
dns.exceptionr.Z
dns.immutableZdns.nameZdns.nodeZdns.rdataclassZdns.rdatasetZ
dns.rdatatypeZdns.rdtypes.ANY.SOAZdns.zone�	exceptionZDNSExceptionrrEZ
VersionedNoderaZImmutableVersionedNodeZ
ImmutableNoderfr$ZImmutableVersionr6rrrrr
�<module>s(