Ë
    öeœiÄ!  ã                  óX  — d Z ddl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m	Z	 ddl
mZmZmZmZmZ ddlmZ ddlmZ ddlmZ d	Z ej.                  d
«      j0                  Z ej.                  d«      j0                  Z ej.                  d
«      j6                  Zdd„Zdd„Z G d„ d«      Zy)z)Tools for working with MongoDB ObjectIds.é    )ÚannotationsN)ÚSystemRandom)ÚAnyÚNoReturnÚOptionalÚTypeÚUnion)Ú_datetime_to_millis©Ú	InvalidId)Úutciÿÿÿ z>Iz>I5sc                ó   — t        d| z  «      ‚)NzS%r is not a valid ObjectId, it must be a 12-byte input or a 24-character hex stringr   )Úoids    úb/var/www/html/Whatsapp_Customer_Support_Chatbot/venv/lib/python3.12/site-packages/bson/objectid.pyÚ_raise_invalid_idr   $   s   € Ü
ð	(Ø*-ñ	.óð ó    c                 ó,   — t        j                  d«      S )z+Get the 5-byte random field of an ObjectId.é   )ÚosÚurandom© r   r   Ú_random_bytesr   +   s   € ä�:‰:�a‹=Ðr   c                  óT  — e Zd ZdZ ej
                  «       Z e«       j                  de	«      Z
 ej                  «       Z e«       ZdZdZddd„Zedd„«       Zedd„«       Zedd	„«       Zedd
„«       Ze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d„Z"dd„Z#d d„Z$y)!ÚObjectIdzA MongoDB ObjectId.r   )Ú__idé   Nc                óÆ  — |€�t         j                  5  t         j                  }|dz   t        dz   z  t         _        ddd«       t	        t        t        j                  «       «      t         j                  «       «      t        «      dd z   | _	        yt        |t        «      rt        |«      dk(  r|| _	        yt        |t        «      r6t        |«      dk(  r	 t        j                  |«      | _	        yt#        |«       yt        |t         «      r|j$                  | _	        yt        dt'        |«      › �«      ‚# 1 sw Y   ŒüxY w# t        t         f$ r t#        |«       Y yw xY w)aZ  Initialize a new ObjectId.

        An ObjectId is a 12-byte unique identifier consisting of:

          - a 4-byte value representing the seconds since the Unix epoch,
          - a 5-byte random value,
          - a 3-byte counter, starting with a random value.

        By default, ``ObjectId()`` creates a new unique identifier. The
        optional parameter `oid` can be an :class:`ObjectId`, or any 12
        :class:`bytes`.

        For example, the 12 bytes b'foo-bar-quux' do not follow the ObjectId
        specification but they are acceptable input::

          >>> ObjectId(b'foo-bar-quux')
          ObjectId('666f6f2d6261722d71757578')

        `oid` can also be a :class:`str` of 24 hex digits::

          >>> ObjectId('0123456789ab0123456789ab')
          ObjectId('0123456789ab0123456789ab')

        Raises :class:`~bson.errors.InvalidId` if `oid` is not 12 bytes nor
        24 hex digits, or :class:`TypeError` if `oid` is not an accepted type.

        :param oid: a valid ObjectId.

        .. seealso:: The MongoDB documentation on  `ObjectIds <http://dochub.mongodb.org/core/objectids>`_.

        .. versionchanged:: 3.8
           :class:`~bson.objectid.ObjectId` now implements the `ObjectID
           specification version 0.2
           <https://github.com/mongodb/specifications/blob/master/source/
           objectid.rst>`_.
        Né   é   é   é   z6id must be an instance of (bytes, str, ObjectId), not )r   Ú	_inc_lockÚ_incÚ_MAX_COUNTER_VALUEÚ_PACK_INT_RANDOMÚintÚtimeÚ_randomÚ	_PACK_INTÚ_ObjectId__idÚ
isinstanceÚbytesÚlenÚstrÚfromhexÚ	TypeErrorÚ
ValueErrorr   ÚbinaryÚtype)Úselfr   Úincs      r   Ú__init__zObjectId.__init__>   s   € ðJ ˆ;ä×#Ñ#ñ EÜ—m‘m�Ø!$ q¡Ô-?À!Ñ-CÑ D””÷Eô
 )¬¬T¯Y©Y«[Ó)9¼8×;KÑ;KÓ;MÓNÔQZÐ[^ÓQ_Ð`aÐbcÐQdÑdˆD�IÜ˜œUÔ#¬¨C«°BªØˆD�IÜ˜œSÔ!Ü�3‹x˜2Š~ð+Ü %§¡¨cÓ 2�D•Iô " #Õ&Ü˜œXÔ&ØŸ
™
ˆD�IäÐTÔUYÐZ]ÓU^ÐT_Ð`ÓaÐa÷'Eð Eûô "¤:Ð.ò +Ü% cÖ*ð+ús   “)D7ÃE Ä7E ÅE ÅE c                óF   — t        t        |«      dz  «      dz   } | |«      S )aJ  Create a dummy ObjectId instance with a specific generation time.

        This method is useful for doing range queries on a field
        containing :class:`ObjectId` instances.

        .. warning::
           It is not safe to insert a document containing an ObjectId
           generated using this method. This method deliberately
           eliminates the uniqueness guarantee that ObjectIds
           generally provide. ObjectIds generated with this method
           should be used exclusively in queries.

        `generation_time` will be converted to UTC. Naive datetime
        instances will be treated as though they already contain UTC.

        An example using this helper to get documents where ``"_id"``
        was generated before January 1, 2010 would be:

        >>> gen_time = datetime.datetime(2010, 1, 1)
        >>> dummy_id = ObjectId.from_datetime(gen_time)
        >>> result = collection.find({"_id": {"$lt": dummy_id}})

        :param generation_time: :class:`~datetime.datetime` to be used
            as the generation time for the resulting ObjectId.
        iè  s           )r)   r
   )ÚclsÚgeneration_timer   s      r   Úfrom_datetimezObjectId.from_datetimez   s/   € ô8 Ô)¨/Ó:¸dÑBÓCØ1ñ2ð 	ñ �3‹xˆr   c                óL   — |sy	 t        |«       y# t        t        f$ r Y yw xY w)z€Checks if a `oid` string is valid or not.

        :param oid: the object id to validate

        .. versionadded:: 2.3
        FT)r   r   r0   )r8   r   s     r   Úis_validzObjectId.is_valid›   s0   € ñ Øð	Ü�SŒMØøÜœ9Ð%ò 	Ùð	ús   … ‘#¢#c                óŒ   — t        j                  «       }|| j                  k7  r|| _        t        «       | _        | j                  S )z1Generate a 5-byte random number once per process.)r   ÚgetpidÚ_pidr   Ú_ObjectId__random)r8   Úpids     r   r(   zObjectId._random¬   s4   € ô �i‰i‹kˆØ�#—(‘(Š?ØˆCŒHÜ(›?ˆCŒLØ�|‰|Ðr   c                ó   — | j                   S )z/12-byte binary representation of this ObjectId.©r*   ©r4   s    r   r2   zObjectId.binaryµ   s   € ð �y‰yÐr   c                ó€   — t        | j                  dd «      d   }t        j                  j                  |t        «      S )a	  A :class:`datetime.datetime` instance representing the time of
        generation for this :class:`ObjectId`.

        The :class:`datetime.datetime` is timezone aware, and
        represents the generation time in UTC. It is precise to the
        second.
        r   r   )Ú_UNPACK_INTr*   ÚdatetimeÚfromtimestampr   )r4   Ú	timestamps     r   r9   zObjectId.generation_timeº   s6   € ô   §	¡	¨!¨A Ó/°Ñ2ˆ	Ü× Ñ ×.Ñ.¨y¼#Ó>Ð>r   c                ó   — | j                   S )zdReturn value of object for pickling.
        needed explicitly because __slots__() defined.
        rC   rD   s    r   Ú__getstate__zObjectId.__getstate__Æ   s   € ð �y‰yÐr   c                ó�   — t        |t        «      r|d   }n|}t        |t        «      r|j                  d«      | _        y|| _        y)z Explicit state set from picklingr*   zlatin-1N)r+   Údictr.   Úencoder*   )r4   Úvaluer   s      r   Ú__setstate__zObjectId.__setstate__Ì   s@   € ô �eœTÔ"Ø˜Ñ(‰CàˆCô �cœ3ÔØŸ
™
 9Ó-ˆD�IàˆD�Ir   c                ó6   — | j                   j                  «       S ©N)r*   ÚhexrD   s    r   Ú__str__zObjectId.__str__Ü   s   € Ø�y‰y�}‰}‹Ðr   c                ó   — d| ›d�S )Nz
ObjectId('z')r   rD   s    r   Ú__repr__zObjectId.__repr__ß   s   € Ø˜D˜8 2Ð&Ð&r   c                ó`   — t        |t        «      r| j                  |j                  k(  S t        S rR   ©r+   r   r*   r2   ÚNotImplemented©r4   Úothers     r   Ú__eq__zObjectId.__eq__â   ó%   € Ü�eœXÔ&Ø—9‘9 §¡Ñ,Ð,ÜÐr   c                ó`   — t        |t        «      r| j                  |j                  k7  S t        S rR   rX   rZ   s     r   Ú__ne__zObjectId.__ne__ç   r]   r   c                ó`   — t        |t        «      r| j                  |j                  k  S t        S rR   rX   rZ   s     r   Ú__lt__zObjectId.__lt__ì   ó%   € Ü�eœXÔ&Ø—9‘9˜uŸ|™|Ñ+Ð+ÜÐr   c                ó`   — t        |t        «      r| j                  |j                  k  S t        S rR   rX   rZ   s     r   Ú__le__zObjectId.__le__ñ   r]   r   c                ó`   — t        |t        «      r| j                  |j                  kD  S t        S rR   rX   rZ   s     r   Ú__gt__zObjectId.__gt__ö   rb   r   c                ó`   — t        |t        «      r| j                  |j                  k\  S t        S rR   rX   rZ   s     r   Ú__ge__zObjectId.__ge__û   r]   r   c                ó,   — t        | j                  «      S )z,Get a hash value for this :class:`ObjectId`.)Úhashr*   rD   s    r   Ú__hash__zObjectId.__hash__   s   € ä�D—I‘I‹Ðr   rR   )r   z%Optional[Union[str, ObjectId, bytes]]ÚreturnÚNone)r8   úType[ObjectId]r9   údatetime.datetimerl   r   )r8   rn   r   r   rl   Úbool©rl   r,   )rl   ro   )rO   r   rl   rm   )rl   r.   )r[   r   rl   rp   )rl   r&   )%Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r>   r?   r   Úrandintr$   r#   Ú	threadingÚLockr"   r   r@   Ú	__slots__Ú_type_markerr6   Úclassmethodr:   r<   r(   Úpropertyr2   r9   rK   rP   rT   rV   r\   r_   ra   rd   rf   rh   rk   r   r   r   r   r   0   sé   „ Ùàˆ2�9‰9‹;€Dá‹>×!Ñ! !Ð%7Ó8€DØ�	—‘Ó €Iá‹€Hà€Ià€Lô:bðx òó ðð@ òó ðð  òó ðð òó ðð ò	?ó ð	?óóó ó'óó
ó
ó
ó
ó
ô
r   r   )r   r.   rl   r   rq   ) ru   Ú
__future__r   rG   r   Ústructrw   r'   Úrandomr   Útypingr   r   r   r   r	   Úbson.datetime_msr
   Úbson.errorsr   Úbson.tz_utilr   r$   ÚStructÚpackr)   r%   ÚunpackrF   r   r   r   r   r   r   ú<module>r‡      s�   ðñ 0Ý "ã Û 	Û Û Û Ý ß 7Õ 7å 0Ý !Ý àÐ ØˆF�M‰M˜$Ó×$Ñ$€	Ø �6—=‘= Ó(×-Ñ-Ð Øˆf�m‰m˜DÓ!×(Ñ(€óó÷
Rò Rr   