ó
    ÌÅLgõ-  ã                   ó   • 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   ó    Ú//usr/lib/python3/dist-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;ˆÔÜ6A×6GÒ6GÓ6IˆÔÜ*-«%ˆŒØ×%Ñ%Ø”/ $°DÑ9¸6õ	
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OþU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 foundéÿÿÿÿF)Ú
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Ø×ÓØ‰~Ø�Ü! $§.¡.Ö1�AØ—t‘t˜r•zØ"#˜Ùñ 2ð ‘?Ü"Ð#6Ó7Ð7ð #àÑ#Ø—?—?ÜŸH™HŸN™N‘EàŸ;™;Ñ2Ð2Ð2Ø ŸK™K�EØ�Ü! $§.¡.Ö1�AØŸ™Ÿ™ EÓ*�Aß�qØŸn™n¨T¯\©\¼3¿=¹=×;LÑ;LÓM˜ß˜3 3 q¡6§=¡=°FÕ#:Ø&'˜GÙ!ñ 2ð ‘?Ü"Ð#5Ó6Ð6ð #ð Ÿ.™.¨Ñ,�Ü˜d E¨7Ó3ˆCØ�M‰M×Ñ˜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²   € ØˆØØ×#Ó#ð
 —?‘?Ñ*¨u×8IÑ8IÓ/Iô '2Ø¸$ñ'�D”Oð )-�DÔ%Ø÷! $Ð#ô( "ŸšÓ)�Ø×#Ñ#×*Ñ*¨5Ô1÷+ $ðR �J‰JŒLñU ð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�}‰}Ó Ó!ÜÑE°t·}²}ÓEÓE‰JàŸ™¨Ñ+×.Ñ.ˆJØ�n‰n˜QÑ×"Ñ" ZÓ/°D×4HÑ4HØ—.‘. Ñ#÷5
ñ 5
ð �N‰N×"Ñ"Ô$ð �n‰n˜QÑ×"Ñ" ZÓ/°D×4HÑ4HØ—.‘. Ñ#÷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Ñ1ˆFØ×ÓØ#)Ô Ø×)Ñ)Ô+÷  ×Öú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   € Ø×ÓØ�M‰M× Ñ  Ô%Ø×)Ñ)Ô+÷  ×Öú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ñ#
à˜˜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ð 
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.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ã Û Û Û Û Û Û Û Û ô8�S—]‘]×/Ñ/ô 8ð
 ‡x�x×Ñ€Ø—‘×/Ñ/€Ø
�(‰(×
Ñ
€Ø—(‘(×*Ñ*€Ø—8‘8×,Ñ,Ð Ø�h‰h×"Ñ"€ô]ˆ3�8‰8�=‰=õ ]r   