Ë
    Ü_Ëi;  ã                  óô   — U d Z ddlmZ ddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ  e ej*                  d«      «      Zded<    ed	«      Z ed
«      Z ed«      Z G d„ de
eef   «      Zy)zðTools for creating and manipulating SON, the Serialized Ocument Notation.

Regular dictionaries can be used instead of SON objects, but not when the order
of keys is important. A SON object can be used just like a normal Python
dictionary.
é    )ÚannotationsN)ÚMapping)ÚAnyÚDictÚIterableÚIteratorr   ÚOptionalÚPatternÚTupleÚTypeÚTypeVarÚUnionÚcastÚ zType[Pattern[Any]]ÚRE_TYPEÚ_KeyÚ_ValueÚ_Tc                  óú   ‡ — e Zd ZU dZded<   	 d	 	 	 	 	 dd„Zdˆ fd„Zdd„Zdd„Zdd„Z	d d	„Z
d!d
„Zd"d„Zd!d„Zd#d„Zd$d„Zd%ˆ fd„Zd&d„Zd'd„Zd(d„Zdd)d„Z	 d	 	 	 	 	 d*d„Zd+d„Zd+d„Zd,d„Zd-d„Zd.d„Zˆ xZS )/ÚSONz¾SON data.

    A subclass of dict that maintains ordering of keys and provides a
    few extra niceties for dealing with SON. SON provides an API
    similar to collections.OrderedDict.
    z	list[Any]Ú
_SON__keysc                ó€   — g | _         t        j                  | «       | j                  |«       | j                  |«       y ©N)r   ÚdictÚ__init__Úupdate)ÚselfÚdataÚkwargss      úK/var/www/pod-logistic/pod-api/venv/lib/python3.12/site-packages/bson/son.pyr   zSON.__init__<   s/   € ð
 ˆŒÜ�‰�dÔØ�‰�DÔØ�‰�FÕó    c                ó<   •— t        ‰| �  | g|¢­i |¤Ž}g |_        |S r   )ÚsuperÚ__new__r   )ÚclsÚargsr   ÚinstanceÚ	__class__s       €r    r$   zSON.__new__F   s'   ø€ Ü‘7‘? 3Ð8¨Ò8°Ñ8ˆØˆŒØˆr!   c                ó†   — g }| j                   D ]  }|j                  d|›d| |   ›d�«       Œ ddj                  |«      z  S )Nú(z, ú)z	SON([%s]))r   ÚappendÚjoin)r   ÚresultÚkeys      r    Ú__repr__zSON.__repr__K   sM   € ØˆØ—;‘;ò 	7ˆCØ�M‰M˜A˜c˜W B t¨C¡y m°1Ð5Õ6ð	7à˜TŸY™Y vÓ.Ñ.Ð.r!   c                ó„   — || j                   vr| j                   j                  |«       t        j                  | ||«       y r   )r   r,   r   Ú__setitem__)r   r/   Úvalues      r    r2   zSON.__setitem__Q   s2   € Ø�d—k‘kÑ!Ø�K‰K×Ñ˜sÔ#Ü×Ñ˜˜s EÕ*r!   c                óf   — | j                   j                  |«       t        j                  | |«       y r   )r   Úremover   Ú__delitem__©r   r/   s     r    r6   zSON.__delitem__V   s$   € Ø�‰×Ñ˜3ÔÜ×Ñ˜˜sÕ#r!   c                ó<   — t        «       }|j                  | «       |S r   )r   r   ©r   Úothers     r    ÚcopyzSON.copyZ   s   € Ü#&£5ˆØ�‰�TÔØˆr!   c              #  ó8   K  — | j                   E d {  –—†  y 7 Œ­wr   ©r   ©r   s    r    Ú__iter__zSON.__iter__b   s   è ø€ Ø—;‘;×Òús   ‚’“c                ó   — || j                   v S r   r=   r7   s     r    Úhas_keyzSON.has_keye   s   € Ø�d—k‘kÐ!Ð!r!   c                ó"   — | j                  «       S r   )r?   r>   s    r    ÚiterkeyszSON.iterkeysh   s   € Ø�}‰}‹Ðr!   c              #  óD   K  — | j                  «       D ]	  \  }}|–— Œ y ­wr   ©Úitems©r   Ú_Úvs      r    Ú
itervalueszSON.itervaluesl   s$   è ø€ Ø—J‘J“Lò 	‰DˆAˆqØ‹Gñ	ùs   ‚ c                óT   — | j                  «       D ��cg c]  \  }}|‘Œ	 c}}S c c}}w r   rE   rG   s      r    Úvaluesz
SON.valuesp   s    € Ø"Ÿj™j›l×+‘d�a˜’Ó+Ð+ùÓ+s   ”$c                ó0   •— g | _         t        ‰| �	  «        y r   )r   r#   Úclear)r   r(   s    €r    rN   z	SON.clears   s   ø€ ØˆŒÜ‰‰�r!   c                ó8   — 	 | |   S # t         $ r	 || |<   Y |S w xY wr   ©ÚKeyError©r   r/   Údefaults      r    Ú
setdefaultzSON.setdefaultw   s.   € ð	 Ø˜‘9ÐøÜò 	 ØˆD�ŠIØˆð	 ús   ‚ ‡˜c           	     ó¨   — t        |«      dkD  r#t        dt        dt        |«      z   «      z   «      ‚	 | |   }| |= |S # t        $ r |r|d   cY S ‚ w xY w)Né   z&pop expected at most 2 arguments, got r   )ÚlenÚ	TypeErrorÚreprrQ   )r   r/   r&   r3   s       r    ÚpopzSON.pop~   sj   € Üˆt‹9�qŠ=ÜÐDÄtÈAÔPSÐTXÓPYÉMÓGZÑZÓ[Ð[ð	Ø˜‘IˆEð
 �ˆIØˆøô ò 	ÙØ˜A‘w’Øð	ús   ³= ½AÁAc                óŽ   — 	 t        t        | j                  «       «      «      \  }}| |= ||fS # t        $ r t	        d«      d ‚w xY w)Nzcontainer is empty)ÚnextÚiterrF   ÚStopIterationrQ   )r   ÚkrI   s      r    ÚpopitemzSON.popitemŠ   sQ   € ð	;Üœ˜TŸZ™Z›\Ó*Ó+‰DˆAˆqð �ˆGØ�1ˆvˆøô ò 	;ÜÐ/Ó0°dÐ:ð	;ús	   ‚%. ®Ac                óÜ   — |€nUt        |d«      r|j                  «       D ]
  \  }}|| |<   Œ n+t        |d«      r|D ]
  }||   | |<   Œ n|D ]
  \  }}|| |<   Œ |r| j                  |«       y y )NrF   Úkeys)ÚhasattrrF   r   )r   r:   r   r_   rI   s        r    r   z
SON.update’   sŽ   € àˆ=ØÜ�U˜GÔ$ØŸ™›ò ‘��1Ø��Q’ñä�U˜FÔ#Øò #�Ø ™(��Q’ñ#ð ò ‘��1Ø��Q’ðáØ�K‰K˜Õð r!   c                ó0   — 	 | |   S # t         $ r |cY S w xY wr   rP   rR   s      r    ÚgetzSON.get¢   s%   € ð	Ø˜‘9ÐøÜò 	ØŠNð	ús   ‚ ‡”c                óü   — t        |t        «      rLt        | «      t        |«      k(  xr3 t        | j	                  «       «      t        |j	                  «       «      k(  S t        t        | j                  «       |k(  «      S )z|Comparison to another SON is order-sensitive while comparison to a
        regular dictionary is order-insensitive.
        )Ú
isinstancer   rW   ÚlistrF   r   ÚboolÚto_dictr9   s     r    Ú__eq__z
SON.__eq__ª   sY   € ô �eœSÔ!Ü�t“9¤ E£
Ñ*ÒX¬t°D·J±J³LÓ/AÄTÈ%Ï+É+Ë-ÓEXÑ/XÐXÜ”D˜$Ÿ,™,›.¨EÑ1Ó2Ð2r!   c                ó   — | |k(   S r   © r9   s     r    Ú__ne__z
SON.__ne__²   s   € Ø˜5‘=Ð Ð r!   c                ó,   — t        | j                  «      S r   )rW   r   r>   s    r    Ú__len__zSON.__len__µ   s   € Ü�4—;‘;ÓÐr!   c                óF   ‡— dˆfd„Št        d ‰t        | «      «      «      S )z¡Convert a SON document to a normal Python dictionary instance.

        This is trickier than just *dict(...)* because it needs to be
        recursive.
        c                óÞ   •— t        | t        «      r| D �cg c]
  } ‰|«      ‘Œ c}S t        | t        «      r*| j                  «       D ��ci c]  \  }}| ‰|«      “Œ c}}S | S c c}w c c}}w r   )rg   rh   Ú_MappingrF   )r3   rI   r_   Útransform_values      €r    rt   z$SON.to_dict.<locals>.transform_value¿   s_   ø€ Ü˜%¤Ô&Ø49Ö:¨q™¨Õ*Ò:Ð:Ü˜E¤8Ô,Ø:?¿+¹+»-×H±$°!°Q˜™?¨1Ó-Ñ-ÓHÐHà�ùò	 ;ùãHs   –A$ÁA)údict[_Key, _Value])r3   r   Úreturnr   )r   r   )r   rt   s    @r    rj   zSON.to_dict¸   s!   ø€ õ	ô Ð(©/¼$¸t»*Ó*EÓFÐFr!   c                óÒ   — t        «       }t        | «      }||v r||   S |||<   | j                  «       D ]0  \  }}t        |t        «      st        j                  ||«      }|||<   Œ2 |S r   )r   ÚidrF   rg   r   r;   Údeepcopy)r   ÚmemoÚoutÚval_idr_   rI   s         r    Ú__deepcopy__zSON.__deepcopy__É   so   € Ü!$£ˆÜ�D“ˆØ�T‰>Ø˜‘<ÐØˆˆV‰Ø—J‘J“Lò 	‰DˆAˆqÜ˜a¤Ô)Ü—M‘M ! TÓ*�ØˆC�ŠFð	ð ˆ
r!   r   )r   zEOptional[Union[Mapping[_Key, _Value], Iterable[Tuple[_Key, _Value]]]]r   r   rv   ÚNone)r%   zType[SON[_Key, _Value]]r&   r   r   r   rv   úSON[_Key, _Value])rv   Ústr)r/   r   r3   r   rv   r~   )r/   r   rv   r~   )rv   r   )rv   zIterator[_Key])r/   r   rv   ri   )rv   zIterator[_Value])rv   zlist[_Value])rv   r~   )r/   r   rS   r   rv   r   )r/   r   r&   úUnion[_Value, _T]rv   r�   )rv   zTuple[_Key, _Value])r:   zOptional[Any]r   r   rv   r~   )r/   r   rS   zOptional[Union[_Value, _T]]rv   zUnion[_Value, _T, None])r:   r   rv   ri   )rv   Úint)rv   ru   )rz   zdict[int, SON[_Key, _Value]]rv   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r$   r0   r2   r6   r;   r?   rA   rC   rJ   rL   rN   rT   rZ   r`   r   re   rk   rn   rp   rj   r}   Ú__classcell__)r(   s   @r    r   r   2   sÁ   ø… ñð Óð W[ðàSðð ðð 
ó	õó
/ó+ó
$óóó"óóó,õóó
óô ð" AEðØðØ"=ðà	 óó3ó!ó óG÷"
r!   r   )r†   Ú
__future__r   r;   ÚreÚcollections.abcr   rs   Útypingr   r   r   r   r	   r
   r   r   r   r   r   ÚtypeÚcompiler   r‡   r   r   r   r   rm   r!   r    ú<module>r�      s{   ðòõ #ã Û 	Ý /÷÷ ÷ ó ñ" # : 2§:¡:¨b£>Ó2€Ð	Ó 2áˆvƒ€Ù	�Ó	€ÙˆTƒ]€ôaˆ$ˆt�Vˆ|Ñ
õ ar!   