Ë
    šQjV<  ã                  ó(  — 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mZ ddl	m
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mZ dZ eddg«      Z eddg«      Zej8                  j;                  d«      rd„ Znej>                  Zej@                  Z! e"ejF                  jI                  dd«      «      Z% edd«      Z&e
e'feffd„«       Z(e!fd„Z)d„ Z* G d„ d«      Z+ e+«       Z,e,jZ                  Z-e,j\                  Z.e,j^                  Z/e,j`                  Z0d„ Z1d„ Z2d„ Z3d„ Z4d„ Z5d „ Z6 e2«         e5«         e3«         e6«        e,jo                  d!«        e8«       Z9e9fd"„Z:e9fd#„Z; e;«         ed$«      D ]  \  Z<Z= e/e<j|                  ge=¢­Ž  Œ d&d%„Z?y)'zSerialization utilities.é    )ÚannotationsN)Ú
namedtuple)Úcontextmanager©ÚBytesIOé   )ÚContentDisallowedÚDecodeErrorÚEncodeErrorÚSerializerNotInstalledÚreraise)Úentrypoints)Úbytes_to_strÚstr_to_bytes)ÚpickleÚloadsÚdumpsÚregisterÚ
unregisterÚbinaryz
ascii-8bitúapplication/datazapplication/textÚjavac                ó>   —  t        j                  |«      | «      d   S )Nr   )ÚcodecsÚ
getdecoder)ÚtÚcodings     úO/var/www/html/truck-me/venv/lib/python3.12/site-packages/kombu/serialization.pyÚ_decoder      s   € Ø(Œv× Ñ  Ó(¨Ó+¨AÑ.Ð.ó    ÚPICKLE_PROTOCOLé   Úcodec)Úcontent_typeÚcontent_encodingÚencoderc              #  ó”   K  — 	 d –— y # |$ r ‚ |$ r2}t        |  | |«      t        j                  «       d   «       Y d }~y d }~ww xY w­w)Né   )r   ÚsysÚexc_info)ÚwrapperÚincludeÚexcludeÚexcs       r   Ú_reraise_errorsr/   %   sF   è ø€ ð:ÜøØò ØØò :Ü�™ ›¤s§|¡|£~°aÑ'8×9Ñ9ûð:üs)   ‚A„	 ˆA‰
A“(A »AÁ AÁAc                ó$   —  |t        | «      «      S ©Nr   )ÚsÚloads     r   Úpickle_loadsr4   0   s   € á”˜“
ÓÐr    c                ó   — | r| › d|› d�S |S )Nz (ú)© )ÚfirstÚseconds     r   Úparenthesize_aliasr:   5   s   € Ù$)ˆeˆW�B�v�h˜aÐ Ð5¨vÐ5r    c                  óT   — e Zd ZdZd„ Z	 dd„Zd„ Zd„ Zd„ Zd„ Z	dd	„Z
dd
efd„Zd„ Zy)ÚSerializerRegistryz2The registry keeps track of serialization methods.c                ó„   — i | _         i | _        d | _        d | _        d | _        t        «       | _        i | _        i | _        y r1   )	Ú	_encodersÚ	_decodersÚ_default_encodeÚ_default_content_typeÚ_default_content_encodingÚsetÚ_disabled_content_typesÚtype_to_nameÚname_to_type)Úselfs    r   Ú__init__zSerializerRegistry.__init__<   sB   € ØˆŒØˆŒØ#ˆÔØ%)ˆÔ"Ø)-ˆÔ&Ü'*£uˆÔ$ØˆÔØˆÕr    c                óš   — |rt        |||«      | j                  |<   |r|| j                  |<   || j                  |<   || j                  |<   y)aü  Register a new encoder/decoder.

        Arguments:
        ---------
            name (str): A convenience name for the serialization method.

            encoder (callable): A method that will be passed a python data
                structure and should return a string representing the
                serialized data.  If :const:`None`, then only a decoder
                will be registered. Encoding will not be possible.

            decoder (Callable): A method that will be passed a string
                representing serialized data and should return a python
                data structure.  If :const:`None`, then only an encoder
                will be registered.  Decoding will not be possible.

            content_type (str): The mime-type describing the serialized
                structure.

            content_encoding (str): The content encoding (character set) that
                the `decoder` method will be returning. Will usually be
                `utf-8`, `us-ascii`, or `binary`.
        N)r#   r>   r?   rE   rF   )rG   Únamer&   Údecoderr$   r%   s         r   r   zSerializerRegistry.registerF   sU   € ñ2 Ü#(ØÐ.°ó$ˆD�N‰N˜4Ñ ñ Ø+2ˆD�N‰N˜<Ñ(Ø*.ˆ×Ñ˜,Ñ'Ø".ˆ×Ñ˜$Òr    c                ó`   — d|vr| j                   |   }| j                  j                  |«       y ©Nú/)rF   rD   Údiscard©rG   rJ   s     r   ÚenablezSerializerRegistry.enableh   s-   € Ø�d‰?Ø×$Ñ$ TÑ*ˆDØ×$Ñ$×,Ñ,¨TÕ2r    c                ó`   — d|vr| j                   |   }| j                  j                  |«       y rM   )rF   rD   ÚaddrP   s     r   ÚdisablezSerializerRegistry.disablem   s-   € Ø�d‰?Ø×$Ñ$ TÑ*ˆDØ×$Ñ$×(Ñ(¨Õ.r    c                ó:  — 	 | j                   |   }| j                  j                  |d«       | j                  j                  |d«       | j                  j                  |d«       | j                   j                  |d«       y# t
        $ r t        d|› �«      ‚w xY w)a  Unregister registered encoder/decoder.

        Arguments:
        ---------
            name (str): Registered serialization method name.

        Raises
        ------
            SerializerNotInstalled: If a serializer by that name
                cannot be found.
        Nú!No encoder/decoder installed for )rF   r?   Úpopr>   rE   ÚKeyErrorr   )rG   rJ   r$   s      r   r   zSerializerRegistry.unregisterr   s‘   € ð	<Ø×,Ñ,¨TÑ2ˆLØ�N‰N×Ñ˜|¨TÔ2Ø�N‰N×Ñ˜t TÔ*Ø×Ñ×!Ñ! ,°Ô5Ø×Ñ×!Ñ! $¨Õ-øÜò 	<Ü(Ø3°D°6Ð:ó<ð <ð	<ús   ‚A?B ÂBc                ó€   — 	 | j                   |   \  | _        | _        | _        y# t        $ r t        d|› �«      ‚w xY w)aÒ  Set the default serialization method used by this library.

        Arguments:
        ---------
            name (str): The name of the registered serialization method.
                For example, `json` (default), `pickle`, `yaml`, `msgpack`,
                or any custom methods registered using :meth:`register`.

        Raises
        ------
            SerializerNotInstalled: If the serialization method
                requested is not available.
        úNo encoder installed for N)r>   rA   rB   r@   rX   r   rP   s     r   Ú_set_default_serializerz*SerializerRegistry._set_default_serializerˆ   sN   € ð	4à%)§^¡^°DÑ%9ñ#ˆTÔ'¨Ô)GØÕ!øÜò 	4Ü(Ø+¨D¨6Ð2ó4ð 4ð	4ús   ‚"% ¥=Nc                ó  — |dk(  rt        |«      S |r)| j                  j                  |«      st        d|› �«      ‚|st	        |t
        «      rdd|fS |s@t	        |t        «      r0t        t        d¬«      5  |j                  d«      }ddd«       d	dfS |r| j                  |   \  }}}n$| j                  }| j                  }| j                  }t        t        «      5   ||«      }ddd«       ||fS # 1 sw Y   ŒmxY w# 1 sw Y   ŒxY w)
aæ  Encode data.

        Serialize a data structure into a string suitable for sending
        as an AMQP message body.

        Arguments:
        ---------
            data (List, Dict, str): The message data to send.

            serializer (str): An optional string representing
                the serialization method you want the data marshalled
                into. (For example, `json`, `raw`, or `pickle`).

                If :const:`None` (default), then json will be used, unless
                `data` is a :class:`str` or :class:`unicode` object. In this
                latter case, no serialization occurs as it would be
                unnecessary.

                Note that if `serializer` is specified, then that
                serialization method will be used even if a :class:`str`
                or :class:`unicode` object is passed in.

        Returns
        -------
            Tuple[str, str, str]: A three-item tuple containing the
            content type (e.g., `application/json`), content encoding, (e.g.,
            `utf-8`) and a string containing the serialized data.

        Raises
        ------
            SerializerNotInstalled: If the serialization method
                requested is not available.
        ÚrawrZ   r   r   r7   ©r-   úutf-8Nz
text/plain)Ú
raw_encoder>   Úgetr   Ú
isinstanceÚbytesÚstrr/   r   Úencoder@   rA   rB   )rG   ÚdataÚ
serializerÚpayloadr$   r%   r&   s          r   r   zSerializerRegistry.dumps�   s  € ðD ˜ÒÜ˜dÓ#Ð#Ù˜dŸn™n×0Ñ0°Ô<Ü(Ø+¨J¨<Ð8ó:ð :ñ œj¨¬uÔ5ð & x°Ð5Ð5ñ œj¨¬sÔ3Ü ¤°bÔ9ñ /ØŸ+™+ gÓ.�÷/à ¨'Ð1Ð1áà—‘˜zÑ*ñ 4ˆLÐ*©Gð ×*Ñ*ˆGØ×5Ñ5ˆLØ#×=Ñ=Ðäœ[Ó)ñ 	$Ù˜d“mˆG÷	$àÐ-¨wÐ6Ð6÷/ð /ú÷	$ð 	$ús   Á6C4Ã	D Ã4C=Ä D	Fc                óô  — |rt        |«      nd}|�||vr8||vr4| j                  |d«      ‚|| j                  v r|s| j                  |d«      ‚|xs dj                  «       }|r{| j                  j                  |«      }|r!t        t        «      5   ||«      cddd«       S |t        vr5t        |t        «      s%t        t        «      5  t        ||«      cddd«       S |S # 1 sw Y   ŒHxY w# 1 sw Y   |S xY w)aÂ  Decode serialized data.

        Deserialize a data stream as serialized using `dumps`
        based on `content_type`.

        Arguments:
        ---------
            data (bytes, buffer, str): The message data to deserialize.

            content_type (str): The content-type of the data.
                (e.g., `application/json`).

            content_encoding (str): The content-encoding of the data.
                (e.g., `utf-8`, `binary`, or `us-ascii`).

            accept (Set): List of content-types to accept.

        Raises
        ------
            ContentDisallowed: If the content-type is not accepted.

        Returns
        -------
            Any: The unserialized data.
        r   NÚ	untrustedÚdisabledr_   )r   Ú_for_untrusted_contentrD   Úlowerr?   ra   r/   r
   ÚSKIP_DECODErb   rd   r   )rG   rf   r$   r%   ÚacceptÚforceÚ_trusted_contentÚdecodes           r   r   zSerializerRegistry.loadsß   sÿ   € ñ6 7Cœ \Ô2Ø/ð 	àÐØÐ#3Ñ3Ø$¨FÑ2Ø×1Ñ1°,ÀÓLÐLà˜t×;Ñ;Ñ;ÁEØ×1Ñ1°,À
ÓKÐKØ,Ò7°×>Ñ>Ó@ÐáØ—^‘^×'Ñ'¨Ó5ˆFÙÜ$¤[Ó1ñ (Ù! $›<÷(ñ (à¤{Ñ2Ü" 4¬Ô-Ü$¤[Ó1ñ ;Ü" 4Ð)9Ó:÷;ñ ;àˆ÷(ð (ú÷;àˆús   ÂC!Ã	C-Ã!C*Ã-C7c                ó€   — t        dj                  |t        | j                  j	                  ||«      |«      «      «      S )Nz-Refusing to deserialize {} content of type {})r	   Úformatr:   rE   ra   )rG   ÚctypeÚwhys      r   rl   z)SerializerRegistry._for_untrusted_content  s=   € Ü Ø;×BÑBØÜ" 4×#4Ñ#4×#8Ñ#8¸ÀÓ#FÈÓNóó
ð 	
r    )r_   r1   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rH   r   rQ   rT   r   r[   r   ÚTRUSTED_CONTENTr   rl   r7   r    r   r<   r<   9   sD   „ Ù<òð #*ó /òD3ò
/ò
<ò,4ó*@7ðF  ¸ó/ób
r    r<   c                ó¬   — d}| }t        |t        «      r.d}t        t        d¬«      5  |j	                  |«      }ddd«       nd}|||fS # 1 sw Y   ŒxY w)zSpecial case serializer.r   r_   r7   r^   Nr   )rb   rd   r/   r   re   )rf   r$   rh   r%   s       r   r`   r`   !  se   € à%€LØ€GÜ�'œ3ÔØ"ÐÜœ[°"Ô5ñ 	7Ø—n‘nÐ%5Ó6ˆG÷	7ð 	7ð $ÐØÐ)¨7Ð2Ð2÷		7ð 	7ús   ¨A
Á
Ac                 ól   — ddl m}  t        j                  d| j                  | j
                  dd¬«       y)z2Register a encoder/decoder for JSON serialization.r   )Újsonr~   zapplication/jsonr_   ©r$   r%   N)Úkombu.utilsr~   Úregistryr   r   r   )Ú_jsons    r   Úregister_jsonrƒ   .  s,   € å)ä×Ñ�f˜eŸk™k¨5¯;©;Ø#5Ø'.ð õ 0r    c                 ó¾   — 	 ddl } t        j                  d| j                  | j                  dd¬«       y# t
        $ r d„ }t        j                  dd|d«       Y yw xY w)z¸Register a encoder/decoder for YAML serialization.

    It is slower than JSON, but allows for more data types
    to be serialized. Useful if you need to send data such as dates

    r   NÚyamlzapplication/x-yamlr_   r   c                 ó   — t        d«      ‚)zŒRaise SerializerNotInstalled.

            Used in case a client receives a yaml message, but yaml
            isn't installed.
            z9No decoder installed for YAML. Install the PyYAML library©r   ©ÚargsÚkwargss     r   Únot_availablez$register_yaml.<locals>.not_availableE  s   € ô )ØKóMð Mr    )r…   r�   r   Ú	safe_dumpÚ	safe_loadÚImportError)r…   r‹   s     r   Úregister_yamlr�   7  sb   € ðMÛÜ×Ñ˜& $§.¡.°$·.±.Ø';Ø+2ð 	õ 	4øô ò 
Mò	Mô 	×Ñ˜& $¨Ð7KÖLð
Mús   ‚25 µ$AÁAc                ó*   — t        t        | «      «      S r1   )r4   r   )r2   s    r   Úunpickler‘   P  s   € Üœ Q›Ó(Ð(r    c                 óf   — t         j                  fd„} t        j                  d| t        dd¬«       y)zpRegister pickle serializer.

    The fastest serialization method, but restricts
    you to python clients.
    c                ó   —  || t         ¬«      S )N)Úprotocol)Úpickle_protocol)ÚobjÚdumpers     r   Úpickle_dumpsz%register_pickle.<locals>.pickle_dumpsZ  s   € Ù�c¤OÔ4Ð4r    r   zapplication/x-python-serializer   r   N)r   r   r�   r   r‘   )r˜   s    r   Úregister_pickler™   T  s1   € ô "(§¡ó 5ô ×Ñ�h ¬hØ#CØ'/ð õ 1r    c                 óØ   ‡‡— dx} }	 ddl }|j                  dk\  rddl mŠmŠ ˆfd„} ˆfd„}nd„ }|x} }t        j                  d	| |d
d¬«       y# t        t
        f$ r
 d„ }|x} }Y Œ3w xY w)zZRegister msgpack serializer.

    See Also
    --------
        https://msgpack.org/.
    Nr   )r   r"   )ÚpackbÚunpackbc                ó   •—  ‰| d¬«      S )NT)Úuse_bin_typer7   )r2   r›   s    €r   Úpackzregister_msgpack.<locals>.packo  s   ø€ Ù˜Q¨TÔ2Ð2r    c                ó   •—  ‰| d¬«      S )NF)r]   r7   )r2   rœ   s    €r   Úunpackz register_msgpack.<locals>.unpackr  s   ø€ Ù˜q eÔ,Ð,r    c                 ó   — t        d«      ‚)Nz(msgpack requires msgpack-python >= 0.4.0r‡   rˆ   s     r   Úversion_mismatchz*register_msgpack.<locals>.version_mismatchu  s   € Ü,Ø>ó@ð @r    c                 ó   — t        d«      ‚)NzKNo decoder installed for msgpack. Please install the msgpack-python libraryr‡   rˆ   s     r   r‹   z'register_msgpack.<locals>.not_availablez  s   € Ü(ð<ó=ð =r    Úmsgpackzapplication/x-msgpackr   r   )r¥   Úversionr›   rœ   rŽ   Ú
ValueErrorr�   r   )rŸ   r¡   r¥   r£   r‹   r›   rœ   s        @@r   Úregister_msgpackr¨   b  s‹   ù€ ð Ð€Dˆ6ð&ÛØ�?‰?˜fÒ$ß.ô3õ-ò@ð -Ð,ˆD�6ô ×ÑØ�4˜Ø,Ø!ð õ øô œÐ$ò &ò	=ð &Ð%ˆŠvð&ús   ˆ-A ÁA)Á(A)r~   c                ó~   — | t         u rg d¢n| } | �| D ]  }	 t        j                  |«       Œ yy# t        $ r Y Œ(w xY w)zöEnable serializers that are considered to be unsafe.

    Note:
    ----
        Will enable ``pickle``, ``yaml`` and ``msgpack`` by default, but you
        can also specify a list of serializers (by name or content type)
        to enable.
    )r   r…   r¥   N)ÚNOTSETr�   rQ   rX   )ÚchoicesÚchoices     r   Úenable_insecure_serializersr­   ’  sR   € ð 07¼&Ñ/@Ó+Àg€GØÐØò 	ˆFðÜ—‘ Õ'ñ	ð øô ò Ùðús   —0°	<»<c                ó°   — | t         u rdgn| } t        j                  D ]  }t        j                  |«       Œ | �| D ]  }t        j	                  |«       Œ yy)aJ  Disable untrusted serializers.

    Will disable all serializers except ``json``
    or you can specify a list of deserializers to allow.

    Note:
    ----
        Producers will still be able to serialize data
        in these formats, but consumers will not accept
        incoming data using the untrusted content types.
    r~   N)rª   r�   r?   rT   rQ   )ÚallowedrJ   s     r   Údisable_insecure_serializersr°   ¤  s]   € ð "¤VÑ+ˆv‰h°€GÜ×"Ñ"ò ˆÜ×Ñ˜ÕðàÐØò 	"ˆDÜ�O‰O˜DÕ!ñ	"ð r    zkombu.serializersc                óÈ   — |st         j                  n|}| �	 | D �ch c]  }d|v r|n||   ’Œ c}S | S c c}w # t        $ r }t        d|j                  d   › �«      ‚d}~ww xY w)z¿Replace aliases of content_types with full names from registry.

    Raises
    ------
        SerializerNotInstalled: If the serialization method
            requested is not available.
    NrN   rV   r   )r�   rF   rX   r   r‰   )Úcontent_typesrF   ÚnÚes       r   Úprepare_accept_contentrµ   À  s€   € ñ 1=”8×(Ò(À,€LØÐ ð	AØ@MÖN¸1˜ ™‘A |°A¡Ñ6ÒNÐNð Ðùò	 OøÜò 	AÜ(Ø3°A·F±F¸1±I°;Ð?óAð Aûð	Aús!   ˜8 œ3®8 ³8 ¸	A!ÁAÁA!r1   )@rz   Ú
__future__r   r   Úosr   r)   Úcollectionsr   Ú
contextlibr   Úior   Ú
exceptionsr	   r
   r   r   r   Úutils.compatr   Úutils.encodingr   r   Ú__all__Ú	frozensetrn   r{   ÚplatformÚ
startswithr   rr   r3   Úpickle_loadÚintÚenvironra   r•   r#   Ú	Exceptionr/   r4   r:   r<   r�   r   r   r   r   r`   rƒ   r�   r‘   r™   r¨   r[   Úobjectrª   r­   r°   Úepr‰   rJ   rµ   r7   r    r   ú<module>rÈ      s²  ðÙ å "ã Û 	Û Û 
Ý "Ý %Ý ÷:õ :å %ß 6à
@€Ù˜ <Ð0Ó1€ÙÐ/Ð1CÐDÓE€à‡<�<×Ñ˜6Ô"ó/ð �m‰m€Gà�k‰k€ñ �b—j‘j—n‘nÐ%6¸Ó:Ó;€á�7ÐKÓL€ð à&˜LÐ3IÐ2Kò:ó ð:ð %ó ò
6÷]
ñ ]
ñB Ó€Ø�‰€Ø�‰€Ø×Ñ€Ø× Ñ €
ò
3ò0òMò2)ò1ò!ñJ „Ù Ô Ù „Ù Ô ð 	×  Ñ   Ô (á	‹€ð )/ó ð$ *0ó "ñ* Ô ñ Ð/Ó0ò �H€BˆÙˆR�W‰WÐ�tÔðôr    