grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a àMÒeõ-ã@sÔdZddlZddlZddlmZmZmZmZmZddl Z ddl Z ddl Z ddl Z ddlZ ddlZ ddlZ ddlZ ddlZ Gdd„de jjƒZe jjZe jjZe jjZe jjZe jjZe jjZGdd„de jjƒZdS)zDNS Versioned Zones.éN)ÚCallableÚDequeÚOptionalÚSetÚUnionc@seZdZdZdS)ÚUseTransactionz-To alter a versioned zone, use a transaction.N)Ú__name__Ú __module__Ú __qualname__Ú__doc__©r r ú1/usr/lib/python3.9/site-packages/dns/versioned.pyrsrc sXeZdZgd¢ZeZejjddfe e ej j e fejjee edege efdœ‡fdd„ Zd7e ee eedœdd „Zd8eed œd d „Zdd„Zdd„Zdd„Ze eddœdd„Ze edege efddœdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Z d$d%„Z!d9e ej j e feej"jd&œ‡fd'd(„ Z#e ej j e fdd)œd*d+„Z$ej%j&d fe ej j e fe ej%j'e fe ej%j'e feej(j)d,œ‡fd-d.„ Z*ej%j&d fe ej j e fe ej%j'e fe ej%j'e fee ej(j)d,œ‡fd/d0„ Z+ej%j&fe ej j e fe ej%j'e fe ej%j'e fdd1œd2d3„Z,e ej j e fej(j)dd4œd5d6„Z-‡Z.S):ÚZone)Ú _versionsZ_versions_lockÚ _write_txnÚ_write_waitersÚ _write_eventÚ_pruning_policyÚ_readersTN)ÚoriginÚrdclassÚ relativizeÚpruning_policycsttƒ |||¡t ¡|_t ¡|_|dur6|j|_ n||_ d|_ d|_ t ¡|_ t ƒ|_| dt|dd�|¡dS)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_policyrrrrÚsetrÚ_commit_version_unlockedÚWritableVersion)Úselfrrrr©Ú __class__r r r.s    ÿz Zone.__init__)ÚidÚserialÚreturnc Cs,|dur|durtdƒ‚|j��ö|durbd}t|jƒD]}|j|kr8|}qPq8|durìtdƒ‚nŠ|durâ|jrztjj }n|j }d}t|jƒD]@}|j   |¡}|rŽ|  |jtjj¡}|rŽ|dj|krŽ|}qÐqŽ|durìtdƒ‚n |jd}t|d|ƒ}|j |¡|WdƒS1�s0YdS)Nz!cannot specify both id and serialzversion not foundrzserial not foundéÿÿÿÿF)Ú ValueErrorr Úreversedrr(ÚKeyErrorrÚdnsÚnameÚemptyrÚnodesÚgetÚ get_rdatasetrÚ rdatatypeZSOAr)Ú TransactionrÚadd) r%r(r)ÚversionÚvZonameÚnZrdsÚtxnr r r ÚreaderSs:         z Zone.readerF)rr*cCs�d}|j�\|jdurD||jkrDt||dd�|_d|_Wdƒq€t ¡}|j |¡Wdƒn1sl0Y| ¡q|j  ¡|jS)NT)Zmake_immutable) r rrr6rÚEventrÚappendÚwaitZ_setup_version)r%rZeventr r r Úwriterwsÿ*  z Zone.writercCs(t|jƒdkr$|j ¡|_|j ¡dS)Nr)ÚlenrÚpopleftrr")r%r r r Ú!_maybe_wakeup_one_waiter_unlocked¨s z&Zone._maybe_wakeup_one_waiter_unlockedcCsdS)NTr )r%Úzoner8r r r r!®szZone._default_pruning_policycCsbt|jƒdkr$tdd„|jDƒƒ}n |jdj}|jdj|kr^| ||jd¡r^|j ¡q0dS)Nrcss|]}|jjVqdS©N)r8r()Ú.0r;r r r Ú ½óz0Zone._prune_versions_unlocked..r+)rArÚminrr(rrB)r%Z least_keptr r r Ú_prune_versions_unlocked³s   ÿzZone._prune_versions_unlocked)Ú max_versionsr*csDˆdurˆdkrtdƒ‚ˆdur*dd„}n ‡fdd„}| |¡dS)zYSet a pruning policy that retains up to the specified number of versions Nézmax versions must be at least 1cSsdS)NFr ©rDÚ_r r r ÚpolicyÍsz%Zone.set_max_versions..policycst|jƒˆkSrE)rArrM©rKr r rOÒs)r,Úset_pruning_policy)r%rKrOr rPr Úset_max_versionsÅs   zZone.set_max_versions)rOr*cCsF|dur|j}|j�||_| ¡Wdƒn1s80YdS)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 rrJ)r%rOr r r rQ×s zZone.set_pruning_policycCs>|j�$|j |¡| ¡Wdƒn1s00YdSrE)r rÚremoverJ©r%r;r r r Ú _end_readës zZone._end_readcCsd|_| ¡dSrE)rrCrTr r r Ú_end_write_unlockedðszZone._end_write_unlockedcCs4|j�| |¡Wdƒn1s&0YdSrE)r rVrTr r r Ú _end_writeõszZone._end_writecCsB|j |¡| ¡|j|_|jdur,||_|dur>| |¡dSrE)rr>rJr2rrV©r%r;r8rr r r r#ùs  zZone._commit_version_unlockedcCs8|j�| |||¡Wdƒn1s*0YdSrE)r r#rXr r r Ú_commit_versionszZone._commit_versioncCs(t|jƒdkr |jdjd}nd}|S)Nrr+rL)rArr()r%r(r r r Ú_get_next_version_idszZone._get_next_version_id)r0Úcreater*cs|rt‚tƒ |¡SrE)rrÚ find_node)r%r0r[r&r r r\szZone.find_node)r0r*cCst‚dSrE©r)r%r0r r r Ú delete_nodeszZone.delete_node)r0ÚrdtypeÚcoversr[r*cs$|rt‚tƒ |||¡}tj |¡SrE)rrÚ find_rdatasetr/ÚrdatasetÚImmutableRdataset©r%r0r_r`r[rbr&r r raszZone.find_rdatasetcs4|rt‚tƒ |||¡}|dur,tj |¡SdSdSrE)rrr4r/rbrcrdr&r r r4$s  zZone.get_rdataset)r0r_r`r*cCst‚dSrEr])r%r0r_r`r r r Údelete_rdataset3szZone.delete_rdataset)r0rr*cCst‚dSrEr])r%r0rr r r Úreplace_rdataset;szZone.replace_rdataset)NN)F)F)/rr r Ú __slots__ÚNodeZ node_factoryr/Z rdataclassÚINrrr0ÚNameÚstrZ RdataClassÚboolrÚVersionrÚintr6r<r@rCr!rJrRrQrUrVrWr#rYrZZnoder\r^r5ZNONEZ RdataTyperbZRdatasetrar4rerfÚ __classcell__r r r&r r!s€ ûû&ÿ þ $1þ  ÿþûúû úüû þr) r rrÚtypingrrrrrZ dns.exceptionr/Z dns.immutableZdns.nameZdns.nodeZdns.rdataclassZ dns.rdatasetZ dns.rdatatypeZdns.rdtypes.ANY.SOAZdns.zoneÚ exceptionZ DNSExceptionrrDZ VersionedNoderhZImmutableVersionedNodeZ ImmutableNodermr$ZImmutableVersionr6rr r r r Ús(