a
Me- @ s d Z ddlZddlZddlmZmZmZmZmZ ddl Z
ddlZ
ddlZ
ddl
Z
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
G dd de
jjZe
jjZe
jjZe
jjZe
jjZe
jjZe
jjZG dd de
jjZdS )zDNS Versioned Zones. N)CallableDequeOptionalSetUnionc @ s e Zd ZdZdS )UseTransactionz-To alter a versioned zone, use a transaction.N)__name__
__module____qualname____doc__ r r 1/usr/lib/python3.9/site-packages/dns/versioned.pyr s r c sX e Zd Zg dZeZejjddfe e
ejje
f ejjee ed ege e f d fdd
Zd7e e e e eddd Zd8eeddd
Zdd Zdd Zdd Ze e ddddZe ed ege e f ddddZdd Zdd Zdd Zd d! Zd"d# Z d$d% Z!d9e
ejje
f eej"jd& fd'd(
Z#e
ejje
f dd)d*d+Z$ej%j&d
fe
ejje
f e
ej%j'e
f e
ej%j'e
f eej(j)d, fd-d.
Z*ej%j&d
fe
ejje
f e
ej%j'e
f e
ej%j'e
f ee ej(j) d, fd/d0
Z+ej%j&fe
ejje
f e
ej%j'e
f e
ej%j'e
f dd1d2d3Z,e
ejje
f ej(j)dd4d5d6Z- Z.S ):Zone) _versionsZ_versions_lock
_write_txn_write_waiters_write_event_pruning_policy_readersTN)originrdclass
relativizepruning_policyc st t ||| t | _t | _|du r6| 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__collectionsdequer threadingLock
_version_lock_default_pruning_policyr r r r setr _commit_version_unlockedWritableVersion)selfr r r r __class__r r
r . s
z
Zone.__init__)idserialreturnc C s, |d ur|d urt d| j |d urbd }t| jD ]}|j|kr8|} qPq8|d u rtdn|d ur| jrztjj }n| j
}d }t| jD ]@}|j|}|r|
| jtjj}|r|d j|kr|} qq|d u rtdn
| jd }t| d|}| j| |W d S 1 s0 Y d S )Nz!cannot specify both id and serialzversion not foundr zserial not foundF)
ValueErrorr reversedr r( KeyErrorr dnsnameemptyr nodesgetget_rdatasetr rdatatypeZSOAr) Transactionr add) r% r( r) versionvZonamenZrdstxnr r r
readerS s:
zZone.readerF)r r* c C s d }| j \ | jd u rD|| jkrDt| |dd| _d | _W d qt }| j| W d n1 sl0 Y | q| j | jS )NT)Zmake_immutable)
r r r r6 r Eventr appendwaitZ_setup_version)r% r Zeventr r r
writerw s *
zZone.writerc C s( t | jdkr$| j | _| j d S )Nr )lenr popleftr r" )r% r r r
!_maybe_wakeup_one_waiter_unlocked s z&Zone._maybe_wakeup_one_waiter_unlockedc C s dS )NTr )r% zoner8 r r r
r! s zZone._default_pruning_policyc C sb t | jdkr$tdd | jD }n| jd j}| jd j|k r^| | | jd r^| j q0d S )Nr c s s | ]}|j jV qd S N)r8 r( ).0r; r r r