
    ,h-                         d Z ddlZddlZddlmZmZmZmZmZ ddl	Z
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
 G d de
j&                  j(                        Ze
j,                  j.                  Ze
j,                  j2                  Ze
j,                  j6                  Ze
j,                  j8                  Ze
j,                  j:                  Ze
j,                  j<                  Z G d de
j,                  j>                        Zy)zDNS Versioned Zones.    N)CallableDequeOptionalSetUnionc                       e Zd ZdZy)UseTransactionz-To alter a versioned zone, use a transaction.N)__name__
__module____qualname____doc__     O/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/dns/versioned.pyr	   r	      s    7r   r	   c                       e Zd Zg dZeZej                  j                  ddfde	e
ej                  j                  ef      dej                  j                  dede	ed ege	e   f      f fdZ	 d'd	e	e   d
e	e   defdZd(dedefdZd Zd Zd Zde	e   ddfdZde	ed ege	e   f      ddfdZd Zd Zd Zd Zd Z d Z!	 d(de
ej                  j                  ef   dedejD                  j                  f fdZ#de
ej                  j                  ef   ddfd Z$ejJ                  jL                  dfde
ej                  j                  ef   d!e
ejJ                  jN                  ef   d"e
ejJ                  jN                  ef   dedejP                  jR                  f
 fd#Z*ejJ                  jL                  dfde
ej                  j                  ef   d!e
ejJ                  jN                  ef   d"e
ejJ                  jN                  ef   dede	ejP                  jR                     f
 fd$Z+ejJ                  jL                  fde
ej                  j                  ef   d!e
ejJ                  jN                  ef   d"e
ejJ                  jN                  ef   ddfd%Z,de
ej                  j                  ef   dejP                  jR                  ddfd&Z- xZ.S ))Zone)	_versions_versions_lock
_write_txn_write_waiters_write_event_pruning_policy_readersTNoriginrdclass
relativizepruning_policyc                 j   t         |   |||       t        j                         | _        t        j                         | _        || j                  | _	        n|| _	        d| _
        d| _        t        j                         | _        t               | _        | j                  dt!        | d      |       y)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_policyr   r   r   r   setr   _commit_version_unlockedWritableVersion)selfr   r   r   r   	__class__s        r   r!   zZone.__init__.   s    , 	*5)4):):)<&^^-!#'#?#?D #1D 157;6A6G6G6I*-%%%/$D96	
r   idserialreturnc                     ||t        d      | j                  5  |<d }t        | j                        D ]  }|j                  |k(  s|} n |t        d      || j                  rt        j                  j                  }n| j                  J | j                  }d }t        | j                        D ]m  }|j                  j                  |      }|s!|j                  | j                  t        j                  j                         }|sX|d   j"                  |k(  sk|} n |t        d      | j                  d   }t%        | d|      }| j&                  j)                  |       |cd d d        S # 1 sw Y   y xY w)Nz!cannot specify both id and serialzversion not foundr   zserial not foundF)
ValueErrorr&   reversedr   r-   KeyErrorr   dnsnameemptyr   nodesgetget_rdatasetr   	rdatatypeSOAr.   Transactionr   add)	r+   r-   r.   versionvonamenrdstxns	            r   readerzZone.readerS   s^    >f0@AA 	~!$..1 Attrz"# ?"#677#??HHNNE;;22 KKE!$..1 "AE*AnnT\\3==;L;LM3q6==F#:&'G!" ?"#566..,dE73CMMc";	 	 	s%   ,E4	BE46E4E4 A
E44E=Fr   c                    d }	 | j                   5  | j                  3|| j                  k(  r$t        | |d      | _        d | _        	 d d d        nHt	        j
                         }| j                  j                  |       d d d        |j                          | j                  j                          | j                  S # 1 sw Y   @xY w)NT)make_immutable)
r&   r   r   r=   r$   Eventr   appendwait_setup_version)r+   r   events      r   writerzZone.writerw   s    ## 2
 ??*u8I8I/I '2k$'DO )-D%!2 2( ")##**51+2R JJLU X 	&&(Y2 2s   7B>/B>>Cc                     t        | j                        dkD  r:| j                  j                         | _        | j                  j	                          y y )Nr   )lenr   popleftr   r(   )r+   s    r   !_maybe_wakeup_one_waiter_unlockedz&Zone._maybe_wakeup_one_waiter_unlocked   sC    t""#a' $ 3 3 ; ; =D!!# (r   c                      y)NTr   )r+   zoner?   s      r   r'   zZone._default_pruning_policy   s    r   c                    t        | j                        dkD  sJ t        | j                        dkD  rt        d | j                  D              }n| j                  d   j                  }| j                  d   j                  |k  rx| j                  | | j                  d         rX| j                  j                          | j                  d   j                  |k  r!| j                  | | j                  d         rVy y y y )Nr   c              3   H   K   | ]  }|j                   j                    y wN)r?   r-   ).0rD   s     r   	<genexpr>z0Zone._prune_versions_unlocked.<locals>.<genexpr>   s     ES[[^^Es    "r1   )rO   r   r   minr-   r   rP   )r+   
least_kepts     r   _prune_versions_unlockedzZone._prune_versions_unlocked   s    4>>"Q&& t}}!Et}}EEJ+..JnnQ""Z/D4H4H$..#5
 NN""$ nnQ""Z/D4H4H$..#5
/ 5
/r   max_versionsc                 b    dk  rt        d      d }nfd}| j                  |       y)zYSet a pruning policy that retains up to the specified number
        of versions
        N   zmax versions must be at least 1c                      y)NFr   )rS   _s     r   policyz%Zone.set_max_versions.<locals>.policy   s    r   c                 4    t        | j                        kD  S rV   )rO   r   )rS   r`   r\   s     r   ra   z%Zone.set_max_versions.<locals>.policy   s    4>>*\99r   )r2   set_pruning_policy)r+   r\   ra   s    ` r   set_max_versionszZone.set_max_versions   s>     #q(8>??
: 	'r   ra   c                     || j                   }| j                  5  || _        | j                          ddd       y# 1 sw Y   yxY w)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   r[   )r+   ra   s     r   rc   zZone.set_pruning_policy   sF     >11F 	,#)D ))+	, 	, 	,s	   <Ac                     | j                   5  | j                  j                  |       | j                          d d d        y # 1 sw Y   y xY wrV   )r&   r   remover[   r+   rD   s     r   	_end_readzZone._end_read   s>     	,MM  %))+	, 	, 	,s   ,AAc                 T    | j                   |k(  sJ d | _         | j                          y rV   )r   rQ   rh   s     r   _end_write_unlockedzZone._end_write_unlocked   s$    #%%..0r   c                 h    | j                   5  | j                  |       d d d        y # 1 sw Y   y xY wrV   )r&   rk   rh   s     r   
_end_writezZone._end_write   s.     	*$$S)	* 	* 	*s   (1c                     | j                   j                  |       | j                          |j                  | _        | j                  || _        || j                  |       y y rV   )r   rI   r[   r8   r   rk   r+   rD   r?   r   s       r   r)   zZone._commit_version_unlocked   sT    g&%%']]
;; DK?$$S) r   c                 l    | j                   5  | j                  |||       d d d        y # 1 sw Y   y xY wrV   )r&   r)   ro   s       r   _commit_versionzZone._commit_version  s6     	@))#w?	@ 	@ 	@s   *3c                 v    t        | j                        dkD  r| j                  d   j                  dz   }|S d}|S )Nr   r1   r^   )rO   r   r-   )r+   r-   s     r   _get_next_version_idzZone._get_next_version_id  s?    t~~"#&&*B 	 B	r   r6   createc                 2    |rt         t        | 	  |      S rV   )r	   r    	find_node)r+   r6   rt   r,   s      r   rv   zZone.find_node  s       w &&r   c                     t         rV   r	   )r+   r6   s     r   delete_nodezZone.delete_node  s    r   rdtypecoversc                 t    |rt         t        | 	  |||      }t        j                  j                  |      S rV   )r	   r    find_rdatasetr5   rdatasetImmutableRdatasetr+   r6   rz   r{   rt   r~   r,   s         r   r}   zZone.find_rdataset  s6       7(vv>||--h77r   c                 z    |rt         t        | 	  |||      }|t        j                  j                  |      S y rV   )r	   r    r:   r5   r~   r   r   s         r   r:   zZone.get_rdataset$  s?       7'ff=<<11(;;r   c                     t         rV   rx   )r+   r6   rz   r{   s       r   delete_rdatasetzZone.delete_rdataset3  s
     r   c                     t         rV   rx   )r+   r6   r   s      r   replace_rdatasetzZone.replace_rdataset;  s
     r   )NN)F)/r
   r   r   	__slots__Nodenode_factoryr5   
rdataclassINr   r   r6   Namestr
RdataClassboolr   Versionr!   intr=   rE   rM   rQ   r'   r[   rd   rc   ri   rk   rm   r)   rq   rs   noderv   ry   r;   NONE	RdataTyper~   Rdatasetr}   r:   r   r   __classcell__)r,   s   @r   r   r   !   sh   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  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.exceptionr5   dns.immutabledns.namedns.nodedns.rdataclassdns.rdatasetdns.rdatatypedns.rdtypes.ANY.SOAdns.zone	exceptionDNSExceptionr	   rS   VersionedNoder   ImmutableVersionedNodeImmutableNoder   r*   ImmutableVersionr=   r   r   r   r   <module>r      s       8 8         8S]]// 8
 xx//
((

((**88,, hh""]388== ]r   