Ë
    RPfÓ/  ã                   ó@  — d 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 G d„ dej$                  j&                  «      ZeZej,                  Zej.                  Zej0                  Zej2                  Zy)zDNS Dynamic Update Supporté    )ÚAnyÚListÚOptionalÚUnionNc                   ó0   — e Zd ZdZdZdZdZdZed„ «       Z	y)ÚUpdateSectionzUpdate sectionsr   é   é   é   c                  ó   — y)Nr   © )Úclss    úD/var/www/fastapitest/venv/lib/python3.12/site-packages/dns/update.pyÚ_maximumzUpdateSection._maximum(   s   € àó    N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚZONEÚPREREQÚUPDATEÚ
ADDITIONALÚclassmethodr   r   r   r   r   r       s+   „ Ùà€DØ€FØ€FØ€Jàñó ñr   r   c                   óR  ‡ — e Zd ZeZdej                  j                  ddej                  j                  dfde
eej                  j                  ef      dej                  j                  de
e   de
ej                  j                     deej                  j                  ef   de
e   fˆ fd„Zed	eej*                  j,                     fd
„«       Zej0                  d„ «       Zed	eej*                  j,                     fd„«       Zej0                  d„ «       Zed	eej*                  j,                     fd„«       Zej0                  d„ «       Zdd„Zd„ Zdeej                  j                  ef   ded	dfd„Zdeej                  j                  ef   ded	dfd„Zdeej                  j                  ef   ded	dfd„Zdeej                  j                  ef   ded	dfd„Z 	 ddeej                  j                  ef   de
eejB                  jD                  ef      d	dfd„Z#d„ Z$d„ Z%ˆ xZ&S )ÚUpdateMessageNÚzoneÚrdclassÚkeyringÚkeynameÚkeyalgorithmÚidc                 óR  •— t         ‰| �  |¬«       | xj                  t        j                  j                  t        j                  j                  «      z  c_        t        |t        «      rt        j                  j                  |«      }|| _        t        j                  j                  j                  |«      }|| _        | j                  rC| j!                  | j"                  | j                  |t        j$                  j&                  dd¬«       |�| j)                  |||¬«       yy)ax  Initialize a new DNS Update object.

        See the documentation of the Message class for a complete
        description of the keyring dictionary.

        *zone*, a ``dns.name.Name``, ``str``, or ``None``, the zone
        which is being updated.  ``None`` should only be used by dnspython's
        message constructors, as a zone is required for the convenience
        methods like ``add()``, ``replace()``, etc.

        *rdclass*, an ``int`` or ``str``, the class of the zone.

        The *keyring*, *keyname*, and *keyalgorithm* parameters are passed to
        ``use_tsig()``; see its documentation for details.
        )r"   T)ÚcreateÚforce_uniqueN)Ú	algorithm)ÚsuperÚ__init__ÚflagsÚdnsÚopcodeÚto_flagsr   Ú
isinstanceÚstrÚnameÚ	from_textÚoriginÚ
rdataclassÚ
RdataClassÚmakeÚzone_rdclassÚ
find_rrsetr   Ú	rdatatypeÚSOAÚuse_tsig)Úselfr   r   r   r    r!   r"   Ú	__class__s          €r   r(   zUpdateMessage.__init__1   sÞ   ø€ ô0 	‰Ñ˜BÐÔØ�
Š
”c—j‘j×)Ñ)¬#¯*©*×*;Ñ*;Ó<Ñ<�
Ü�dœCÔ Ü—8‘8×%Ñ% dÓ+ˆDØˆŒÜ—.‘.×+Ñ+×0Ñ0°Ó9ˆØ#ˆÔØ�;Š;Ø�O‰OØ—	‘	Ø—‘ØÜ—‘×!Ñ!ØØ!ð ô ð ÐØ�M‰M˜' 7°lˆMÕCð r   Úreturnc                 ó    — | j                   d   S )zThe zone section.r   ©Úsections©r:   s    r   r   zUpdateMessage.zone\   ó   € ð �}‰}˜QÑÐr   c                 ó"   — || j                   d<   y )Nr   r>   ©r:   Úvs     r   r   zUpdateMessage.zonea   ó   € àˆ�‰�aÒr   c                 ó    — | j                   d   S )zThe prerequisite section.r	   r>   r@   s    r   ÚprerequisitezUpdateMessage.prerequisitee   rA   r   c                 ó"   — || j                   d<   y )Nr	   r>   rC   s     r   rG   zUpdateMessage.prerequisitej   rE   r   c                 ó    — | j                   d   S )zThe update section.r
   r>   r@   s    r   ÚupdatezUpdateMessage.updaten   rA   r   c                 ó"   — || j                   d<   y )Nr
   r>   rC   s     r   rJ   zUpdateMessage.updates   rE   r   c           
      ó¼   — |€| j                   }|j                  «       }| j                  ||| j                  |j                  ||dd«      }|j                  ||«       y)z&Add a single RR to the update section.NT)rJ   Úcoversr6   r5   ÚrdtypeÚadd)r:   r/   ÚttlÚrdÚdeletingÚsectionrM   Úrrsets           r   Ú_add_rrzUpdateMessage._add_rrw   sW   € ð ˆ?Ø—k‘kˆGØ—‘“ˆØ—‘Ø�T˜4×,Ñ,¨b¯i©i¸ÀÈ4ÐQUó
ˆð 	�	‰	�"�cÕr   c                 óš  — t        |t        «      r t        j                  j	                  |d«      }t        |d   t        j
                  j                  «      rL|D ]F  }|r| j                  ||j                  «       |D ]!  }| j                  ||j                  ||¬«       Œ# ŒH yt        |«      }t        |j                  d«      «      }t        |d   t        j                  j                  «      r>|r| j                  ||d   j                  «       |D ]  }| j                  ||||¬«       Œ yt        j                   j"                  j%                  |j                  d«      «      }|r| j                  ||«       |D ]M  }	t        j                  j	                  | j&                  ||	| j(                  «      }| j                  ||||¬«       ŒO y)a°  Add records.

        *replace* is the replacement mode.  If ``False``,
        RRs are added to an existing RRset; if ``True``, the RRset
        is replaced with the specified contents.  The second
        argument is the section to add to.  The third argument
        is always a name.  The other arguments can be:

                - rdataset...

                - ttl, rdata...

                - ttl, rdtype, string...
        Nr   )rS   )r-   r.   r*   r/   r0   ÚrdatasetÚRdatasetÚdeleterN   rU   rP   ÚlistÚintÚpopÚrdataÚRdatar7   Ú	RdataTyper4   r5   r1   )
r:   ÚreplacerS   r/   ÚargsÚrdsrQ   rP   rN   Úss
             r   Ú_addzUpdateMessage._add‚   sz  € ô  �dœCÔ Ü—8‘8×%Ñ% d¨DÓ1ˆDÜ�d˜1‘gœsŸ|™|×4Ñ4Ô5Øò E�ÙØ—K‘K  c§j¡jÔ1Øò E�BØ—L‘L  s§w¡w°¸G�LÕDñEñEô ˜“:ˆDÜ�d—h‘h˜q“kÓ"ˆCÜ˜$˜q™'¤3§9¡9§?¡?Ô3ÙØ—K‘K  d¨1¡g§n¡nÔ5Øò A�BØ—L‘L  s¨B¸�LÕ@ñAô Ÿ™×0Ñ0×5Ñ5°d·h±h¸q³kÓB�ÙØ—K‘K  fÔ-Øò A�AÜŸ™×,Ñ,¨T×->Ñ->ÀÈÈ4Ï;É;ÓW�BØ—L‘L  s¨B¸�LÕ@ñAr   r/   ra   c                 óB   —  | j                   d| j                  |g|¢­Ž  y)zÒAdd records.

        The first argument is always a name.  The other
        arguments can be:

                - rdataset...

                - ttl, rdata...

                - ttl, rdtype, string...
        FN©rd   rJ   ©r:   r/   ra   s      r   rO   zUpdateMessage.addª   s   € ð 	ˆ�	‰	�%˜Ÿ™ dÐ2¨TÔ2r   c           
      ó.  — t        |t        «      r t        j                  j	                  |d«      }t        |«      dk(  rƒ| j                  | j                  |t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  dd«       yt        |d   t        j                  j                  «      r;|D ]5  }|D ].  }| j                  |d|t        j                  j                  «       Œ0 Œ7 yt        |«      }t        |d   t        j                   j"                  «      r4|D ].  }| j                  |d|t        j                  j                  «       Œ0 yt        j                  j$                  j'                  |j)                  d«      «      }t        |«      dk(  r]| j                  | j                  || j*                  |t        j                  j                  t        j                  j                  dd«       y|D ]d  }t        j                   j	                  | j*                  ||| j,                  «      }| j                  |d|t        j                  j                  «       Œf y)zèDelete records.

        The first argument is always a name.  The other
        arguments can be:

                - *empty*

                - rdataset...

                - rdata...

                - rdtype, [string...]
        Nr   T)r-   r.   r*   r/   r0   Úlenr6   rJ   r2   ÚANYr7   ÚNONErW   rX   rU   rZ   r]   r^   r_   r4   r\   r5   r1   )r:   r/   ra   rb   rQ   ÚlargsrN   rc   s           r   rY   zUpdateMessage.delete¹   sñ  € ô �dœCÔ Ü—8‘8×%Ñ% d¨DÓ1ˆDÜˆt‹9˜Š>Ø�O‰OØ—‘ØÜ—‘×"Ñ"Ü—‘×!Ñ!Ü—‘×"Ñ"Ü—‘×"Ñ"ØØõ	ô ˜˜Q™¤§¡×!6Ñ!6Ô7Øò C�Øò C�BØ—L‘L  q¨"¬c¯n©n×.AÑ.AÕBñCñCô ˜“JˆEÜ˜% ™(¤C§I¡I§O¡OÔ4Øò C�BØ—L‘L  q¨"¬c¯n©n×.AÑ.AÕBñCô Ÿ™×0Ñ0×5Ñ5°e·i±iÀ³lÓC�Ü�u“: ’?Ø—O‘OØŸ™ØØ×)Ñ)ØÜŸ™×*Ñ*ÜŸ™×*Ñ*ØØõ	ð #ò G˜Ü ŸY™Y×0Ñ0Ø ×-Ñ-Ø"ØØ ŸK™Kó	˜ð Ÿ™ T¨1¨b´#·.±.×2EÑ2EÕFñGr   c                 óB   —  | j                   d| j                  |g|¢­Ž  y)ab  Replace records.

        The first argument is always a name.  The other
        arguments can be:

                - rdataset...

                - ttl, rdata...

                - ttl, rdtype, string...

        Note that if you want to replace the entire node, you should do
        a delete of the name followed by one or more calls to add.
        TNrf   rg   s      r   r`   zUpdateMessage.replaceõ   s   € ð  	ˆ�	‰	�$˜Ÿ™ TÐ1¨DÔ1r   c           
      ó  — t        |t        «      r t        j                  j	                  |d«      }t        |«      dk(  rk| j                  | j                  |t        j                  j                  t        j                  j                  t        j                  j                  ddd«       yt        |d   t        j                  j                  «      s5t        |d   t        j                  j                  «      st        |«      dkD  r„t        |d   t        j                  j                  «      s=t!        |«      }|j#                  dd«        | j$                  d| j                  |g|¢­Ž  y | j$                  d| j                  |g|¢­Ž  yt        j                  j&                  j)                  |d   «      }| j                  | j                  |t        j                  j                  |t        j                  j                  ddd«       y)aS  Require that an owner name (and optionally an rdata type,
        or specific rdataset) exists as a prerequisite to the
        execution of the update.

        The first argument is always a name.
        The other arguments can be:

                - rdataset...

                - rdata...

                - rdtype, string...
        Nr   Tr	   F)r-   r.   r*   r/   r0   ri   r6   rG   r2   rj   r7   rk   rW   rX   r]   r^   rZ   Úinsertrd   r_   r4   )r:   r/   ra   rl   rN   s        r   ÚpresentzUpdateMessage.present  sw  € ô �dœCÔ Ü—8‘8×%Ñ% d¨DÓ1ˆDÜˆt‹9˜Š>Ø�O‰OØ×!Ñ!ØÜ—‘×"Ñ"Ü—‘×!Ñ!Ü—‘×"Ñ"ØØØõ	ô �t˜A‘w¤§¡× 5Ñ 5Ô6Ü˜$˜q™'¤3§9¡9§?¡?Ô3Ü�4‹y˜1Š}ä˜d 1™g¤s§|¡|×'<Ñ'<Ô=ä˜T›
�Ø—‘˜Q Ô"Ø�—	‘	˜% ×!2Ñ!2°DÐA¸5ÔAà�—	‘	˜% ×!2Ñ!2°DÐ@¸4Ô@ä—]‘]×,Ñ,×1Ñ1°$°q±'Ó:ˆFØ�O‰OØ×!Ñ!ØÜ—‘×"Ñ"ØÜ—‘×"Ñ"ØØØõ	r   rN   c           
      ó4  — t        |t        «      r t        j                  j	                  |d«      }|€k| j                  | j                  |t        j                  j                  t        j                  j                  t        j                  j                  ddd«       yt        j                  j                  j                  |«      }| j                  | j                  |t        j                  j                  |t        j                  j                  ddd«       y)z‚Require that an owner name (and optionally an rdata type) does
        not exist as a prerequisite to the execution of the update.NT)r-   r.   r*   r/   r0   r6   rG   r2   rk   r7   rj   r_   r4   )r:   r/   rN   s      r   ÚabsentzUpdateMessage.absent<  sË   € ô �dœCÔ Ü—8‘8×%Ñ% d¨DÓ1ˆDØˆ>Ø�O‰OØ×!Ñ!ØÜ—‘×#Ñ#Ü—‘×!Ñ!Ü—‘×"Ñ"ØØØõ	ô —]‘]×,Ñ,×1Ñ1°&Ó9ˆFØ�O‰OØ×!Ñ!ØÜ—‘×#Ñ#ØÜ—‘×"Ñ"ØØØõ	r   c                  ó   — y)NTr   )r:   Úvalues     r   Ú_get_one_rr_per_rrsetz#UpdateMessage._get_one_rr_per_rrset^  s   € àr   c                 óR  — d }d}|t         j                  k(  rbt        j                  j	                  |«      s)|t        j
                  j                  k7  s| j                  rÃt        j                  j                  ‚| j                  st        j                  j                  ‚|t        j                  j                  t        j                  j                  fv rM|}| j                  d   j                  }|t        j                  j                  k(  xs |t         j                  k(  }||||fS )NFr   )r   r   r*   r2   Úis_metaclassr7   r8   r   Ú	exceptionÚ	FormErrorrj   rk   r   r   )r:   rS   r/   r   rN   rR   Úemptys          r   Ú_parse_rr_headerzUpdateMessage._parse_rr_headerb  sÝ   € ØˆØˆØ”m×(Ñ(Ò(ä—‘×+Ñ+¨GÔ4ØœSŸ]™]×.Ñ.Ò.Ø—9’9ä—m‘m×-Ñ-Ð-à—9’9Ü—m‘m×-Ñ-Ð-Øœ3Ÿ>™>×-Ñ-¬s¯~©~×/BÑ/BÐCÑCØ"�ØŸ)™) A™,×.Ñ.�à¤§¡× 2Ñ 2Ñ2ÒU°gÄ×AUÑAUÑ6Uð ð ˜ ¨5Ð1Ð1r   )NN)N)'r   r   r   r   Ú_section_enumr*   r2   ÚINÚtsigÚdefault_algorithmr   r   r/   ÚNamer.   r3   r   r[   r(   Úpropertyr   rT   ÚRRsetr   ÚsetterrG   rJ   rU   rd   rO   rY   r`   rp   r7   r_   rr   ru   r{   Ú__classcell__)r;   s   @r   r   r   -   s¡  ø„ à!€Mð 59Ø-0¯^©^×->Ñ->Ø!%Ø+/Ø25·(±(×2LÑ2LØ ñ)Dà�u˜SŸX™XŸ]™]¨CÐ/Ñ0Ñ1ð)Dð —‘×*Ñ*ð)Dð ˜#‘ð	)Dð
 ˜#Ÿ(™(Ÿ-™-Ñ(ð)Dð ˜CŸH™HŸM™M¨3Ð.Ñ/ð)Dð �S‰Mõ)DðV ð �d˜3Ÿ9™9Ÿ?™?Ñ+ò  ó ð ð 
‡[�[ñó ðð ð ˜d 3§9¡9§?¡?Ñ3ò  ó ð ð ×Ññó ðð ð ˜˜SŸY™YŸ_™_Ñ-ò  ó ð ð ‡]�]ñó ðó	ò&AðP3˜˜cŸh™hŸm™m¨SÐ0Ñ1ð 3¸#ð 3À$ó 3ð:G˜5 §¡§¡°Ð!3Ñ4ð :G¸Sð :GÀTó :Gðx2˜E #§(¡(§-¡-°Ð"4Ñ5ð 2¸cð 2Àdó 2ð$3˜E #§(¡(§-¡-°Ð"4Ñ5ð 3¸cð 3Àdó 3ðp AEñ à�C—H‘H—M‘M 3Ð&Ñ'ð ð ˜˜sŸ}™}×6Ñ6¸Ð;Ñ<Ñ=ð ð 
ó	 òDö2r   r   )r   Útypingr   r   r   r   Údns.messager*   Údns.nameÚ
dns.opcodeÚ	dns.rdataÚdns.rdataclassÚdns.rdatasetÚdns.rdatatypeÚdns.tsigÚenumÚIntEnumr   ÚmessageÚMessager   ÚUpdater   r   r   r   r   r   r   ú<module>r“      sŒ   ðñ$ !ç -Ó -ã Û Û Û Û Û Û Û ô
�C—H‘H×$Ñ$ô 
ôH2�C—K‘K×'Ñ'ô H2ðX
 
€ð ×Ñ€Ø	×	Ñ	€Ø	×	Ñ	€Ø×%Ñ%�
r   