
    iA.                     b   d Z ddlZddlZddl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	 G d de	j        j                  Ze	j        j        Ze	j        j        Ze	j        j        Ze	j        j        Ze	j        j        Ze	j        j        Z G d de	j        j                  ZdS )zDNS Versioned Zones.    N)CallableDequeSetcastc                       e Zd ZdZdS )UseTransactionz-To alter a versioned zone, use a transaction.N)__name__
__module____qualname____doc__     ]/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/dns/versioned.pyr   r      s        7777r   r   c                        e Zd ZU g dZeZeg ej        j        f         e	d<   ej
        j        ddfdej        j        ez  dz  dej
        j        deded egedz  f         dz  f fd	Z	 d(d
edz  dedz  defdZd)dedefdZd Zd Zd Zdedz  ddfdZded egedz  f         dz  ddfdZd Zd Zd Zd Zd Z d Z!	 d)dej        j        ez  dedej        j        f fd Z"dej        j        ez  ddfd!Z#ej$        j%        dfdej        j        ez  d"ej$        j&        ez  d#ej$        j&        ez  dedej'        j(        f
 fd$Z)ej$        j%        dfdej        j        ez  d"ej$        j&        ez  d#ej$        j&        ez  dedej'        j(        dz  f
 fd%Z*ej$        j%        fdej        j        ez  d"ej$        j&        ez  d#ej$        j&        ez  ddfd&Z+dej        j        ez  dej'        j(        ddfd'Z, xZ-S )*Zone)	_versions_versions_lock
_write_txn_write_waiters_write_event_pruning_policy_readersnode_factoryTNoriginrdclass
relativizepruning_policyc                    t                                          |||           t          j                    | _        t          j                    | _        || j        | _	        n|| _	        d| _
        d| _        t          j                    | _        t                      | _        |                     dt!          | d          |           dS )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55)4):)<)<&^--!#'#?D  #1D .2486A6G6I6I*-%%%%/$D9996	
 	
 	
 	
 	
r   idserialreturnc                    ||t          d          | j        5  |:d }t          | j                  D ]}|j        |k    r|} n|t          d          n|| j        rt          j        j	        }n| j
        J | j
        }d }t          | j                  D ]}|j                            |          }|rm|                    | j        t          j        j                  }|Kt#          t          j        j        j        j        |d                   }|r|j        |k    r|} n|t          d          n| j        d         }t+          | d|          }	| j                            |	           |	cd d d            S # 1 swxY w Y   d S )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   rdtypesANYr.   Transactionr   add)
r+   r-   r.   versionvonamenrdssoatxns
             r   readerzZone.readerR   s    >f0@AAA  	  	~!$.11  Atrzz"# " ?"#6777 ##? (HNEE;222 KE!$.11 	" 	"AE**A "nnT\3=;LMM;$"3;?#6#:CFCC "3:#7#7&'G!E?"#5666 # .,dE733CMc"""A 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	s   EE==FFFr   c                    d }	 | j         5  | j        6|| j        k    r+t          | |d          | _        d | _        	 d d d            nYt	          j                    }| j                            |           d d d            n# 1 swxY w Y   |                                 | j        	                                 | j        S )NT)make_immutable)
r&   r   r   r?   r$   Eventr   appendwait_setup_version)r+   r   events      r   writerzZone.writery   s+   *	# 2 2
 ?*u8I/I/I '2k$' ' 'DO )-D%!2 2 2 2 2 2 2( "))#**5111+2 2 2 2 2 2 2 2 2 2 2 2 2 2 2R JJLLLU*	X 	&&(((s   2B	-BB	Bc                     t          | j                  dk    r9| j                                        | _        | j                                         d S d S )Nr   )lenr   popleftr   r(   )r+   s    r   !_maybe_wakeup_one_waiter_unlockedz&Zone._maybe_wakeup_one_waiter_unlocked   sR    t"##a'' $ 3 ; ; = =D!!##### ('r   c                     dS )NTr   )r+   zonerA   s      r   r'   zZone._default_pruning_policy   s    tr   c                    t          | j                  dk    sJ t          | j                  dk    rt          d | j        D                       }n| j        d         j        }| j        d         j        |k     rs|                     | | j        d                   rV| j                                         | j        d         j        |k     r%|                     | | j        d                   Pd S d S d S d S )Nr   c              3   .   K   | ]}|j         j        V  d S N)rA   r-   ).0rG   s     r   	<genexpr>z0Zone._prune_versions_unlocked.<locals>.<genexpr>   s&      EES[^EEEEEEr   r1   )rR   r   r   minr-   r   rS   )r+   
least_kepts     r   _prune_versions_unlockedzZone._prune_versions_unlocked   s    4>""Q&&&& t}!!EEt}EEEEEJJ+.JnQ"Z//D4H4H$.#5
 5
/ N""$$$ nQ"Z//D4H4H$.#5
 5
/////////r   max_versionsc                 v    dk     rt          d          d }nfd}|                     |           dS )zYSet a pruning policy that retains up to the specified number
        of versions
        N   zmax versions must be at least 1c                     dS )NFr   )rV   _s     r   policyz%Zone.set_max_versions.<locals>.policy   s    ur   c                 4    t          | j                  k    S rY   )rR   r   )rV   rc   r_   s     r   rd   z%Zone.set_max_versions.<locals>.policy   s    4>**\99r   )r2   set_pruning_policy)r+   r_   rd   s    ` r   set_max_versionszZone.set_max_versions   ss     #q(8(8>???   
: : : : : 	'''''r   rd   c                     || j         }| j        5  || _        |                                  ddd           dS # 1 swxY w Y   dS )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+   rd   s     r   rf   zZone.set_pruning_policy   s     >1F 	, 	,#)D ))+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   :>>c                     | j         5  | j                            |           |                                  d d d            d S # 1 swxY w Y   d S rY   )r&   r   remover^   r+   rG   s     r   	_end_readzZone._end_read   s     	, 	,M  %%%))+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   /AAAc                 V    | j         |k    sJ d | _         |                                  d S rY   )r   rT   rk   s     r   _end_write_unlockedzZone._end_write_unlocked   s4    #%%%%..00000r   c                 p    | j         5  |                     |           d d d            d S # 1 swxY w Y   d S rY   )r&   rn   rk   s     r   
_end_writezZone._end_write   s     	* 	*$$S)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   +//c                     | j                             |           |                                  |j        | _        | j        || _        ||                     |           d S d S rY   )r   rL   r^   r8   r   rn   r+   rG   rA   r   s       r   r)   zZone._commit_version_unlocked   sh    g&&&%%''']
; DK?$$S))))) ?r   c                 t    | j         5  |                     |||           d d d            d S # 1 swxY w Y   d S rY   )r&   r)   rr   s       r   _commit_versionzZone._commit_version  s     	@ 	@))#w???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   -11c                 f    t          | j                  dk    r| j        d         j        dz   }nd}|S )Nr   r1   ra   )rR   r   r-   )r+   r-   s     r   _get_next_version_idzZone._get_next_version_id	  s7    t~""#&*BBB	r   r6   createc                 X    |rt           t                                          |          S rY   )r   r    	find_node)r+   r6   rw   r,   s      r   ry   zZone.find_node  s+      	!  ww  &&&r   c                     t           rY   r   )r+   r6   s     r   delete_nodezZone.delete_node  s    r   rdtypecoversc                     |rt           t                                          |||          }t          j                            |          S rY   )r   r    find_rdatasetr5   rdatasetImmutableRdatasetr+   r6   r}   r~   rw   r   r,   s         r   r   zZone.find_rdataset  sD      	!  77((vv>>|--h777r   c                     |rt           t                                          |||          }|t          j                            |          S d S rY   )r   r    r:   r5   r   r   r   s         r   r:   zZone.get_rdataset&  sO      	!  77''ff==<11(;;;4r   c                     t           rY   r{   )r+   r6   r}   r~   s       r   delete_rdatasetzZone.delete_rdataset5  s
     r   c                     t           rY   r{   )r+   r6   r   s      r   replace_rdatasetzZone.replace_rdataset=  s
     r   )NN)F).r	   r
   r   	__slots__Noder   r   r5   node__annotations__
rdataclassINr6   Namestr
RdataClassboolVersionr!   intr?   rH   rP   rT   r'   r^   rg   rf   rl   rn   rp   r)   rt   rv   ry   r|   r;   NONE	RdataTyper   Rdatasetr   r:   r   r   __classcell__)r,   s   @r   r   r       sK          I 15L(2sx},-444
 .1^->JN#
 #
#d*#
 *#
 	#

 !&'!2D4K!?@4G#
 #
 #
 #
 #
 #
L ;?% %*%-04Z%	% % % %N/ /$ /; / / / /b$ $ $  
% % %$(S4Z (D ( ( ( ($,0$+=>E,	, , , ,(, , ,
1 1 1
* * ** * *@ @ @   9>' 'HMC''15'	' ' ' ' ' ' 3      140B
8 
8hmc!
8 '#-
8 '#-	
8
 
8 
	
8 
8 
8 
8 
8 
8  140B hmc! '#- '#-	
  
		%     & 140B	 hmc! '#- '#-	
 
   HMC'69l6K	       r   r   )r   r"   r$   typingr   r   r   r   dns.exceptionr5   dns.namedns.nodedns.rdataclassdns.rdatasetdns.rdatatypedns.rdtypes.ANY.SOAdns.zone	exceptionDNSExceptionr   rV   VersionedNoder   ImmutableVersionedNodeImmutableNoder   r*   ImmutableVersionr?   r   r   r   r   <module>r      sP             - - - - - - - - - - - -                       8 8 8 8 8S]/ 8 8 8
 x/
(
(*8, h"` ` ` ` `38= ` ` ` ` `r   