
    g-                         S r SSKrSSKrSSKJrJrJrJrJr  SSK	r
SSKr
SSKr
SSKr
SSKr
SSKr
SSKr
SSKr
SSKr
 " S S\
R&                  R(                  5      r\
R,                  R.                  r\
R,                  R2                  r\
R,                  R6                  r\
R,                  R8                  r\
R,                  R:                  r\
R,                  R<                  r " S S\
R,                  R>                  5      rg)zDNS Versioned Zones.    N)CallableDequeOptionalSetUnionc                       \ rS rSrSrSrg)UseTransaction   z-To alter a versioned zone, use a transaction. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       F/home/matz/Project1/venv/lib/python3.13/site-packages/dns/versioned.pyr	   r	      s    7r   r	   c                     ^  \ rS rSr/ SQr\r\R                  R                  SS4S\
\\R                  R                  \4      S\R                  R                  S\S\
\S \/\
\   4      4U 4S	 jjjr S)S
\
\   S\
\   S\4S jjrS*S\S\4S jjrS rS rS rS\
\   SS4S jrS\
\S \/\
\   4      SS4S jrS rS rS rS r S r!S r" S*S\\R                  R                  \4   S\S\RF                  R
                  4U 4S  jjjr$S\\R                  R                  \4   SS4S! jr%\RL                  RN                  S4S\\R                  R                  \4   S"\\RL                  RP                  \4   S#\\RL                  RP                  \4   S\S\RR                  RT                  4
U 4S$ jjjr+\RL                  RN                  S4S\\R                  R                  \4   S"\\RL                  RP                  \4   S#\\RL                  RP                  \4   S\S\
\RR                  RT                     4
U 4S% jjjr,\RL                  RN                  4S\\R                  R                  \4   S"\\RL                  RP                  \4   S#\\RL                  RP                  \4   SS4S& jjr-S\\R                  R                  \4   S\RR                  RT                  SS4S' jr.S(r/U =r0$ )+Zone!   )	_versions_versions_lock
_write_txn_write_waiters_write_event_pruning_policy_readersTNoriginrdclass
relativizepruning_policyc                 h  > [         TU ]  XU5        [        R                  " 5       U l        [
        R                  " 5       U l        Uc  U R                  U l	        OX@l	        SU l
        SU l        [        R                  " 5       U l        [        5       U l        U R                  S[!        U SS9U5        g)ar  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_policyr   r   r   r   setr   _commit_version_unlockedWritableVersion)selfr   r   r    r!   	__class__s        r   r%   Zone.__init__.   s    , 	*5)4):):)<&^^-!#'#?#?D #1 157;6A6G6G6I*-%%%/$D96	
r   idserialreturnc                 J   Ub  Ub  [        S5      eU R                     UbA  S n[        U R                  5       H  nUR                  U:X  d  M  Un  O   Uc  [        S5      eOUb  U R                  (       a  [        R                  R                  nOU R                  c   eU R                  nS n[        U R                  5       H{  nUR                  R                  U5      nU(       d  M'  UR                  U R                  [        R                  R                   5      nU(       d  Md  US   R"                  U:X  d  My  Un  O   Uc  [        S5      eOU R                  S   n[%        U SU5      nU R&                  R)                  U5        UsS S S 5        $ ! , (       d  f       g = f)Nz!cannot specify both id and serialzversion not foundr   zserial not foundF)
ValueErrorr*   reversedr   r2   KeyErrorr    dnsnameemptyr   nodesgetget_rdatasetr   	rdatatypeSOAr3   Transactionr   add)	r/   r2   r3   versionvonamenrdstxns	            r   readerZone.readerS   s^    >f0@AA~!$..1Attrz"# 2 ?"#677 ##??HHNNE;;222 KKE!$..1AE*AqnnT\\3==;L;LM33q6==F#:&'G! 2 ?"#566 # ..,dE73CMMc";  s%   ,FBF+9F(F=AF
F"Fr#   c                    S n U R                      U R                  c/  X R                  :X  a   [        XSS9U l        S U l         S S S 5        OJ[        R
                  " 5       nU R                  R                  U5        S S S 5        UR                  5         M  U R                  R                  5         U R                  $ ! , (       d  f       NF= f)NT)make_immutable)
r*   r   r   rB   r(   Eventr   appendwait_setup_version)r/   r#   events      r   writerZone.writerw   s    ##
 ??*u8I8I/I '2$'DO )-D%! $#( ")##**51+ $R JJLU X 	&&(Y $#s   4B=0B==
Cc                     [        U R                  5      S:  a:  U R                  R                  5       U l        U R                  R	                  5         g g )Nr   )lenr   popleftr   r,   )r/   s    r   !_maybe_wakeup_one_waiter_unlocked&Zone._maybe_wakeup_one_waiter_unlocked   sC    t""#a' $ 3 3 ; ; =D!!# (r   c                     g)NTr   )r/   zonerD   s      r   r+   Zone._default_pruning_policy   s    r   c                    [        U R                  5      S:  d   e[        U R                  5      S:  a  [        S U R                   5       5      nOU R                  S   R                  nU R                  S   R                  U:  a  U R                  X R                  S   5      (       a^  U R                  R                  5         U R                  S   R                  U:  a&  U R                  X R                  S   5      (       a  M\  g g g g )Nr   c              3   L   #    U  H  oR                   R                  v   M     g 7fN)rD   r2   ).0rI   s     r   	<genexpr>0Zone._prune_versions_unlocked.<locals>.<genexpr>   s     E}[[^^}s   "$r6   )rV   r   r   minr2   r   rW   )r/   
least_kepts     r   _prune_versions_unlockedZone._prune_versions_unlocked   s    4>>"Q&&& t}}!Et}}EEJ+..JnnQ""Z/D4H4H..#5
 5
 NN""$ nnQ""Z/D4H4H..#5
 5
/ 5
/r   max_versionsc                 j   ^ Tb  TS:  a  [        S5      eTc  S nOU4S jnU R                  U5        g)zISet a pruning policy that retains up to the specified number
of versions
N   zmax versions must be at least 1c                     g)NFr   )r[   _s     r   policy%Zone.set_max_versions.<locals>.policy   s    r   c                 4   > [        U R                  5      T:  $ r_   )rV   r   )r[   rk   rg   s     r   rl   rm      s    4>>*\99r   )r7   set_pruning_policy)r/   rg   rl   s    ` r   set_max_versionsZone.set_max_versions   s>     #q(8>??
: 	'r   rl   c                     Uc  U R                   nU R                     Xl        U R                  5         SSS5        g! , (       d  f       g= f)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*   r   re   )r/   rl   s     r   ro   Zone.set_pruning_policy   s;     >11F#) ))+  s	   <
A
c                     U R                      U R                  R                  U5        U R                  5         S S S 5        g ! , (       d  f       g = fr_   )r*   r   removere   r/   rI   s     r   	_end_readZone._end_read   s5    MM  %))+  s   ,A
Ac                 V    U R                   U:X  d   eS U l         U R                  5         g r_   )r   rX   rv   s     r   _end_write_unlockedZone._end_write_unlocked   s'    #%%%..0r   c                 r    U R                      U R                  U5        S S S 5        g ! , (       d  f       g = fr_   )r*   rz   rv   s     r   
_end_writeZone._end_write   s%    $$S)  s   (
6c                     U R                   R                  U5        U R                  5         UR                  U l        U R                  c  X0l        Ub  U R                  U5        g g r_   )r   rO   re   r=   r   rz   r/   rI   rD   r   s       r   r-   Zone._commit_version_unlocked   sR    g&%%']]
;; K?$$S) r   c                 t    U R                      U R                  XU5        S S S 5        g ! , (       d  f       g = fr_   )r*   r-   r   s       r   _commit_versionZone._commit_version  s'    ))#?  s   )
7c                 x    [        U R                  5      S:  a  U R                  S   R                  S-   nU$ SnU$ )Nr   r6   ri   )rV   r   r2   )r/   r2   s     r   _get_next_version_idZone._get_next_version_id  s?    t~~"#&&*B 	 B	r   r;   createc                 <   > U(       a  [         e[        TU ]	  U5      $ r_   )r	   r$   	find_node)r/   r;   r   r0   s      r   r   Zone.find_node  s       w &&r   c                     [         er_   r	   )r/   r;   s     r   delete_nodeZone.delete_node  s    r   rdtypecoversc                 |   > U(       a  [         e[        TU ]	  XU5      n[        R                  R                  U5      $ r_   )r	   r$   find_rdatasetr:   rdatasetImmutableRdatasetr/   r;   r   r   r   r   r0   s         r   r   Zone.find_rdataset  s4       7(v>||--h77r   c                    > U(       a  [         e[        TU ]	  XU5      nUb  [        R                  R                  U5      $ g r_   )r	   r$   r?   r:   r   r   r   s         r   r?   Zone.get_rdataset$  s=       7'f=<<11(;;r   c                     [         er_   r   )r/   r;   r   r   s       r   delete_rdatasetZone.delete_rdataset3  s
     r   c                     [         er_   r   )r/   r;   r#   s      r   replace_rdatasetZone.replace_rdataset;  s
     r   )	r   r   r*   r   r   r   r   r=   r   )NN)F)1r   r   r   r   	__slots__Nodenode_factoryr:   
rdataclassINr   r   r;   Namestr
RdataClassboolr   Versionr%   intrB   rJ   rS   rX   r+   re   rp   ro   rw   rz   r}   r-   r   r   noder   r   r@   NONE	RdataTyper   Rdatasetr   r?   r   r   r   __classcell__)r0   s   @r   r   r   !   s   I L
 .1^^->->PT#
sxx}}c123#
 **#
 	#

 !67*;Xd^*K!LM#
 #
L AE"3-"08"	"H/$ /; /b$
%$(Xc] (t ($,x(98D>(IJK,	,(,
1
**@ ?D'#((--,-'7;'	' 'chhmmS&8 9 d  7:mm6H6H
8CHHMM3&'
8 cmm--s23
8 cmm--s23	
8
 
8 
		
8 
8  7:mm6H6HCHHMM3&' cmm--s23 cmm--s23	
  
#,,''	( & 7:mm6H6H	CHHMM3&' cmm--s23 cmm--s23	
 
#((--,-<?LL<Q<Q	 r   r   ) r   r&   r(   typingr   r   r   r   r   dns.exceptionr:   dns.immutabledns.namedns.nodedns.rdataclassdns.rdatasetdns.rdatatypedns.rdtypes.ANY.SOAdns.zone	exceptionDNSExceptionr	   r[   VersionedNoder   ImmutableVersionedNodeImmutableNoder   r.   ImmutableVersionrB   r   r   r   r   <module>r      s       8 8         8S]]// 8
 xx//
((

((**88,, hh""]388== ]r   