Ë
    RPfõ-  ã                   ó   — 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__© ó    úG/var/www/fastapitest/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Õ à#1ˆDÔ Ø15ˆŒØ7;ˆÔÜ6A×6GÑ6GÓ6IˆÔÜ*-«%ˆŒØ×%Ñ%Ø”/ $°DÔ9¸6õ	
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 foundéÿÿÿÿF)Ú
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   sa  € ð ˆ>˜fÐ0ÜÐ@ÓAÐAØ×Ññ 	Øˆ~Ø�Ü! $§.¡.Ó1ò �AØ—t‘t˜r“zØ"#˜Ùðð �?Ü"Ð#6Ó7Ð7ØÐ#Ø—?’?ÜŸH™HŸN™N‘EàŸ;™;Ð2Ð2Ð2Ø ŸK™K�EØ�Ü! $§.¡.Ó1ò "�AØŸ™Ÿ™ EÓ*�AÚØŸn™n¨T¯\©\¼3¿=¹=×;LÑ;LÓM˜Ú 3 q¡6§=¡=°FÓ#:Ø&'˜GÙ!ð"ð �?Ü"Ð#5Ó6Ð6àŸ.™.¨Ñ,�Ü˜d E¨7Ó3ˆCØ�M‰M×Ñ˜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¸×8IÑ8IÒ/Iô '2Ø˜k¸$ô'�D”Oð )-�DÔ%Ø÷!2ð 2ô( "Ÿ™Ó)�Ø×#Ñ#×*Ñ*¨5Ô1÷+2ðR �J‰JŒLðU ðX 	�‰×&Ñ&Ô(Ø�‰Ð÷Y2ð 2ús   �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Ÿ[™[Ÿ^�^ÑEùs   ‚ "r1   )rO   r   r   Úminr-   r   rP   )r+   Ú
least_kepts     r   Ú_prune_versions_unlockedzZone._prune_versions_unlocked³   s×   € Ü�4—>‘>Ó" QÒ&Ð&Ð&ô ˆt�}‰}Ó Ò!ÜÑE°t·}±}ÔEÓE‰JàŸ™¨Ñ+×.Ñ.ˆJØ�n‰n˜QÑ×"Ñ" ZÒ/°D×4HÑ4HØ�$—.‘. Ñ#ô5
ð �N‰N×"Ñ"Ô$ð �n‰n˜QÑ×"Ñ" ZÒ/°D×4HÑ4HØ�$—.‘. Ñ#ö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Ñ1ˆFØ×Ññ 	,Ø#)ˆ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>   € Ø×Ññ 	,Ø�M‰M× Ñ  Ô%Ø×)Ñ)Ô+÷	,÷ 	,ñ 	,ú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Ô&Ø×%Ñ%Ô'Ø—]‘]ˆŒ
Ø�;‰;ÐØ ˆDŒKàˆ?Ø×$Ñ$ 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Ñ(¨¨v°vÓ>ˆÜ�|‰|×-Ñ-¨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Ñ'¨¨f°fÓ=ˆØÐÜ—<‘<×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ñ#
à˜˜sŸx™xŸ}™}¨cÐ1Ñ2Ñ3ð#
ð —‘×*Ñ*ð#
ð ð	#
ð
 ! ¨6°7Ð*;¸XÀd¹^Ð*KÑ!LÑMõ#
ðL AEñ"Ø˜3‘-ð"Ø08¸±ð"à	ó"ñH/ $ð /°;ó /òb$òò
%ð$(¨X°c©]ð (¸tó (ð$,Ø˜x¨°Ð(9¸8ÀD¹>Ð(IÑJÑKð,à	ó,ò(,ò
1ò
*ò*ò@òð ?Dñ'Ø˜#Ÿ(™(Ÿ-™-¨Ð,Ñ-ð'Ø7;ð'à	�‰�‰õ'ð  c§h¡h§m¡m°SÐ&8Ñ 9ð ¸dó ð 7:·m±m×6HÑ6HØñ
8à�C—H‘H—M‘M 3Ð&Ñ'ð
8ð �c—m‘m×-Ñ-¨sÐ2Ñ3ð
8ð �c—m‘m×-Ñ-¨sÐ2Ñ3ð	
8ð
 ð
8ð 
�‰×	Ñ	õ
8ð  7:·m±m×6HÑ6HØñà�C—H‘H—M‘M 3Ð&Ñ'ðð �c—m‘m×-Ñ-¨sÐ2Ñ3ðð �c—m‘m×-Ñ-¨sÐ2Ñ3ð	ð
 ðð 
�#—,‘,×'Ñ'Ñ	(õð& 7:·m±m×6HÑ6Hñ	à�C—H‘H—M‘M 3Ð&Ñ'ðð �c—m‘m×-Ñ-¨sÐ2Ñ3ðð �c—m‘m×-Ñ-¨sÐ2Ñ3ð	ð
 
óðØ˜#Ÿ(™(Ÿ-™-¨Ð,Ñ-ðØ<?¿L¹L×<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ã Û Û Û Û Û Û Û Û ô8�S—]‘]×/Ñ/ô 8ð
 ‡x�x×Ñ€Ø—‘×/Ñ/€Ø
�(‰(×
Ñ
€Ø—(‘(×*Ñ*€Ø—8‘8×,Ñ,Ð Ø�h‰h×"Ñ"€ô]ˆ3�8‰8�=‰=õ ]r   