§
    {ØjS   ã                   ó¼  — d 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ddl	m
Z
  G d„ d¦  «        Z e¦   «         Zej        Zej        Zej        Z G d„ d¦  «        Z G d	„ d
e¦  «        Ze                     ej        ¦  «          G d„ de¦  «        Ze                     ej        ¦  «         e                     ej        ¦  «         e                     ej        ¦  «          G d„ de¦  «        Ze                      e ej        d¦  «        ¦  «        ¦  «          G d„ de¦  «        Ze                     ej        ¦  «          G d„ d¦  «        Z G d„ de¦  «        Ze                     ej        ¦  «          G d„ de¦  «        Z ej        ¦   «         Z e                     e j!        ¦  «          G d„ de¦  «        Z"e"                     ej#        ¦  «         dS )a  
Custom handlers may be created to handle other objects. Each custom handler
must derive from :class:`jsonpickle.handlers.BaseHandler` and
implement ``flatten`` and ``restore``.

A handler can be bound to other types by calling
:func:`jsonpickle.handlers.register`.

é    Né   )Úutilc                   ó*   — e Zd Zd„ Zdd„Zdd„Zd„ ZdS )	ÚRegistryc                 ó"   — i | _         i | _        d S ©N)Ú	_handlersÚ_base_handlers©Úselfs    úˆ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/jsonpickle/handlers.pyÚ__init__zRegistry.__init__   s   € ØˆŒØ ˆÔÐÐó    Nc                 óÔ   — | j                              |¦  «        }|€Gt          j        |¦  «        r3| j                             ¦   «         D ]\  }}t          ||¦  «        r|c S Œ|€|n|S )a\  
        :param cls_or_name: the type or its fully qualified name
        :param default: default value, if a matching handler is not found

        Looks up a handler by type reference or its fully
        qualified name. If a direct match
        is not found, the search is performed over all
        handlers registered with base=True.
        )r	   Úgetr   Úis_typer
   ÚitemsÚ
issubclass)r   Úcls_or_nameÚdefaultÚhandlerÚclsÚbase_handlers         r   r   zRegistry.get   s€   € ð ”.×$Ò$ [Ñ1Ô1ˆàˆ?�tœ|¨KÑ8Ô8ˆ?Ø%)Ô%8×%>Ò%>Ñ%@Ô%@ð (ð (Ñ!��\Ý˜k¨3Ñ/Ô/ð (Ø'Ð'Ð'Ð'ð(à!˜/ˆwˆw¨wÐ6r   Fc                 óÖ   ‡ ‡‡— |€	ˆˆˆ fd„}|S t          j        ‰¦  «        st          ‰›d�¦  «        ‚|x‰ j        t          j        ‰¦  «        <   ‰ j        ‰<   ‰r|‰ j        ‰<   dS dS )a,  Register the a custom handler for a class

        :param cls: The custom object class to handle
        :param handler: The custom handler class (if
            None, a decorator wrapper is returned)
        :param base: Indicates whether the handler should
            be registered for all subclasses

        This function can be also used as a decorator
        by omitting the `handler` argument::

            @jsonpickle.handlers.register(Foo, base=True)
            class FooHandler(jsonpickle.handlers.BaseHandler):
                pass

        Nc                 ó8   •— ‰                      ‰| ‰¬¦  «         | S )N)r   Úbase)Úregister)Úhandler_clsr   r   r   s    €€€r   Ú	_registerz$Registry.register.<locals>._registerA   s!   ø€ Ø—’˜c¨;¸T�ÑBÔBÐBØ"Ð"r   z is not a class/type)r   r   Ú	TypeErrorr	   Úimportable_namer
   )r   r   r   r   r   s   `` ` r   r   zRegistry.register.   s¬   øøø€ ð" ˆ?ð#ð #ð #ð #ð #ð #ð #ð ÐÝŒ|˜CÑ Ô ð 	<Ý˜sÐ:Ð:Ð:Ñ;Ô;Ð;ð KRÐQˆŒ•tÔ+¨CÑ0Ô0Ñ1°D´NÀ3Ñ4GØð 	/à'.ˆDÔ Ñ$Ð$Ð$ð	/ð 	/r   c                 óÌ   — | j                              |d ¦  «         | j                              t          j        |¦  «        d ¦  «         | j                             |d ¦  «         d S r   )r	   Úpopr   r!   r
   ©r   r   s     r   Ú
unregisterzRegistry.unregisterO   s\   € ØŒ×Ò˜3 Ñ%Ô%Ð%ØŒ×Ò�4Ô/°Ñ4Ô4°dÑ;Ô;Ð;ØÔ×Ò  TÑ*Ô*Ð*Ð*Ð*r   r   )NF)Ú__name__Ú
__module__Ú__qualname__r   r   r   r%   © r   r   r   r      s[   € € € € € ð!ð !ð !ð7ð 7ð 7ð 7ð$/ð /ð /ð /ðB+ð +ð +ð +ð +r   r   c                   ó<   — e Zd Zd„ Zd„ Zd„ Zed„ ¦   «         Zd„ ZdS )ÚBaseHandlerc                 ó   — || _         dS )z”
        Initialize a new handler to handle a registered type.

        :Parameters:
          - `context`: reference to pickler/unpickler

        N©Úcontext©r   r.   s     r   r   zBaseHandler.__init__\   s   € ð ˆŒˆˆr   c                 ó0   — t          d| j        z  ¦  «        ‚)a:  
        Flatten `obj` into a json-friendly form and write result to `data`.

        :param object obj: The object to be serialized.
        :param dict data: A partially filled dictionary which will contain the
            json-friendly representation of `obj` once this method has
            finished.
        z"You must implement flatten() in %s©ÚNotImplementedErrorÚ	__class__©r   ÚobjÚdatas      r   ÚflattenzBaseHandler.flattenf   s   € õ "Ð"FÈÌÑ"WÑXÔXÐXr   c                 ó0   — t          d| j        z  ¦  «        ‚)z}
        Restore an object of the registered type from the json-friendly
        representation `obj` and return it.
        z"You must implement restore() in %sr1   )r   r5   s     r   ÚrestorezBaseHandler.restoreq   s   € õ
 "Ð"FÈÌÑ"WÑXÔXÐXr   c                 ó<   — t                                || ¦  «         |S )zé
        Register this handler for the given class. Suitable as a decorator,
        e.g.::

            @MyCustomHandler.handles
            class MyCustomClass:
                def __reduce__(self):
                    ...
        )Úregistryr   r$   s     r   ÚhandleszBaseHandler.handlesx   s   € õ 	×Ò˜#˜tÑ$Ô$Ð$Øˆ
r   c                 ó   — || _         | S )z‘This permits registering either Handler instances or classes

        :Parameters:
          - `context`: reference to pickler/unpickler
        r-   r/   s     r   Ú__call__zBaseHandler.__call__†   s   € ð ˆŒØˆr   N)	r&   r'   r(   r   r7   r9   Úclassmethodr<   r>   r)   r   r   r+   r+   [   sq   € € € € € ðð ð ð	Yð 	Yð 	YðYð Yð Yð ðð ñ „[ððð ð ð ð r   r+   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚArrayHandlerz'Flatten and restore array.array objectsc                 ó|   — |j         |d<   | j                             |                     ¦   «         d¬¦  «        |d<   |S )NÚtypecodeF©ÚresetÚvalues)rC   r.   r7   Útolistr4   s      r   r7   zArrayHandler.flatten“   s9   € Øœ<ˆˆZÑØœ×-Ò-¨c¯jªj©l¬lÀ%Ð-ÑHÔHˆˆX‰Øˆr   c                 ó¤   — |d         }| j                              |d         d¬¦  «        }|dk    rd„ |D ¦   «         }t          j        ||¦  «        S )NrC   rF   FrD   Úcc                 ó,   — g | ]}t          |¦  «        ‘ŒS r)   )Úbytes)Ú.0Úxs     r   ú
<listcomp>z(ArrayHandler.restore.<locals>.<listcomp>œ   s   € Ð/Ð/Ð/ 1•e˜A‘h”hÐ/Ð/Ð/r   )r.   r9   Úarray)r   r6   rC   rF   s       r   r9   zArrayHandler.restore˜   sX   € Ø˜
Ô#ˆØ”×%Ò% d¨8¤n¸EÐ%ÑBÔBˆØ�sŠ?ˆ?Ø/Ð/¨Ð/Ñ/Ô/ˆFÝŒ{˜8 VÑ,Ô,Ð,r   N©r&   r'   r(   Ú__doc__r7   r9   r)   r   r   rA   rA   �   s8   € € € € € Ø1Ð1ðð ð ð
-ð -ð -ð -ð -r   rA   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚDatetimeHandlerzËCustom handler for datetime objects

    Datetime objects use __reduce__, and they generate binary strings encoding
    the payload. This handler encodes that payload to reconstruct the
    object.

    c                 óX  ‡— | j         }|j        s6t          |d¦  «        r|                     ¦   «         }nt	          |¦  «        }|S |                     ¦   «         \  }}|j        Št          j        |d         ¦  «        }|gˆfd„|dd …         D ¦   «         z   } ‰|d¬¦  «        |f|d<   |S )NÚ	isoformatr   c                 ó*   •— g | ]} ‰|d ¬¦  «        ‘ŒS ©FrD   r)   )rL   Úir7   s     €r   rN   z+DatetimeHandler.flatten.<locals>.<listcomp>·   s(   ø€ ÐFÐFÐF¸˜G˜G A¨UÐ3Ñ3Ô3ÐFÐFÐFr   r   FrD   Ú
__reduce__)	r.   ÚunpicklableÚhasattrrU   ÚstrrY   r7   r   Ú	b64encode)	r   r5   r6   ÚpicklerÚresultr   ÚargsÚpayloadr7   s	           @r   r7   zDatetimeHandler.flatten¬   s¿   ø€ Ø”,ˆØÔ"ð 	Ý�s˜KÑ(Ô(ð "ØŸš™œ��å˜S™œ�ØˆMØ—N’NÑ$Ô$‰	ˆˆTØ”/ˆÝ”.  a¤Ñ)Ô)ˆØˆyÐFÐFÐFÐF¸TÀ!À"À"¼XÐFÑFÔFÑFˆØ%˜g c°Ð7Ñ7Ô7¸Ð>ˆˆ\ÑØˆr   c                 óî   ‡— |d         \  }}| j         }|j        Š ‰|d¬¦  «        }t          j        |d         ¦  «        }|ft	          ˆfd„|dd …         D ¦   «         ¦  «        z   } |j        |g|¢R Ž S )NrY   FrD   r   c                 ó*   •— g | ]} ‰|d ¬¦  «        ‘ŒS rW   r)   )rL   rX   r9   s     €r   rN   z+DatetimeHandler.restore.<locals>.<listcomp>Á   s(   ø€ Ð"MÐ"MÐ"M¸q 7 7¨1°EÐ#:Ñ#:Ô#:Ð"MÐ"MÐ"Mr   r   )r.   r9   r   Ú	b64decodeÚtupleÚ__new__)r   r6   r   r`   Ú	unpicklerÚvalueÚparamsr9   s          @r   r9   zDatetimeHandler.restore»   s’   ø€ Ø˜Ô&‰	ˆˆTØ”Lˆ	ØÔ#ˆØˆg�c Ð'Ñ'Ô'ˆÝ”˜t AœwÑ'Ô'ˆØ��EÐ"MÐ"MÐ"MÐ"MÀDÈÈÈÄHÐ"MÑ"MÔ"MÑNÔNÑNˆØˆsŒ{˜3Ð( Ð(Ð(Ð(Ð(r   NrP   r)   r   r   rS   rS   £   s<   € € € € € ðð ðð ð ð)ð )ð )ð )ð )r   rS   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚRegexHandlerz1Flatten _sre.SRE_Pattern (compiled regex) objectsc                 ó   — |j         |d<   |S ©NÚpattern)rn   r4   s      r   r7   zRegexHandler.flattenÍ   s   € Øœ+ˆˆY‰Øˆr   c                 ó6   — t          j        |d         ¦  «        S rm   )ÚreÚcompile©r   r6   s     r   r9   zRegexHandler.restoreÑ   s   € ÝŒz˜$˜yœ/Ñ*Ô*Ð*r   NrP   r)   r   r   rk   rk   Ê   s8   € € € € € Ø;Ð;ðð ð ð+ð +ð +ð +ð +r   rk   Ú c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚQueueHandlerz©Opaquely serializes Queue objects

    Queues contains mutex and condition variables which cannot be serialized.
    Construct a new Queue instance when restoring.

    c                 ó   — |S r   r)   r4   s      r   r7   zQueueHandler.flattenà   s   € Øˆr   c                 ó(   — t          j        ¦   «         S r   )ÚqueueÚQueuerr   s     r   r9   zQueueHandler.restoreã   s   € ÝŒ{‰}Œ}Ðr   NrP   r)   r   r   ru   ru   Ø   s<   € € € € € ðð ðð ð ðð ð ð ð r   ru   c                   ó2   — e Zd ZdZd„ Zej        fd„Zd„ ZdS )ÚCloneFactoryzASerialization proxy for collections.defaultdict's default_factoryc                 ó   — || _         d S r   ©Úexemplar)r   r~   s     r   r   zCloneFactory.__init__í   s   € Ø ˆŒˆˆr   c                 ó"   —  || j         ¦  «        S )z>Create new instances by making copies of the provided exemplarr}   )r   Úclones     r   r>   zCloneFactory.__call__ð   s   € àˆu�T”]Ñ#Ô#Ð#r   c                 ó:   — dt          | ¦  «        d›d| j        › d�S )Nz<CloneFactory object at 0xrM   z (z)>)Úidr~   r   s    r   Ú__repr__zCloneFactory.__repr__ô   s&   € ØK­B¨t©H¬HÐKÐKÐK¸$¼-ÐKÐKÐKÐKr   N)r&   r'   r(   rQ   r   Úcopyr>   rƒ   r)   r   r   r{   r{   ê   sX   € € € € € ØKÐKð!ð !ð !ð "œYð $ð $ð $ð $ðLð Lð Lð Lð Lr   r{   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚUUIDHandlerzSerialize uuid.UUID objectsc                 ó   — |j         |d<   |S ©NÚhex)r‰   r4   s      r   r7   zUUIDHandler.flattenû   s   € Ø”gˆˆU‰Øˆr   c                 ó6   — t          j        |d         ¦  «        S rˆ   )ÚuuidÚUUIDrr   s     r   r9   zUUIDHandler.restoreÿ   s   € ÝŒy˜˜eœÑ%Ô%Ð%r   NrP   r)   r   r   r†   r†   ø   s8   € € € € € Ø%Ð%ðð ð ð&ð &ð &ð &ð &r   r†   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚLockHandlerz Serialize threading.Lock objectsc                 ó4   — |                      ¦   «         |d<   |S )NÚlocked)r�   r4   s      r   r7   zLockHandler.flatten	  s   € ØŸš™œˆˆX‰Øˆr   c                 ó€   — t          j        ¦   «         }|                     dd¦  «        r|                     ¦   «          |S )Nr�   F)Ú	threadingÚLockr   Úacquire)r   r6   Úlocks      r   r9   zLockHandler.restore  s7   € ÝŒ~ÑÔˆØ�8Š8�H˜eÑ$Ô$ð 	Ø�LŠL‰NŒNˆNØˆr   NrP   r)   r   r   rŽ   rŽ     s8   € € € € € Ø*Ð*ðð ð ðð ð ð ð r   rŽ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTextIOHandlerz>Serialize file descriptors as None because we cannot roundtripc                 ó   — d S r   r)   r4   s      r   r7   zTextIOHandler.flatten  s   € Øˆtr   c                 ó    — t          d¦  «        ‚)z>Restore should never get called because flatten() returns Nonez+Restoring IO.TextIOHandler is not supported)ÚAssertionErrorrr   s     r   r9   zTextIOHandler.restore  s   € åÐJÑKÔKÐKr   NrP   r)   r   r   r—   r—     s=   € € € € € ØHÐHðð ð ðLð Lð Lð Lð Lr   r—   )$rQ   rO   r„   ÚdatetimeÚiorx   rp   r’   r‹   rs   r   r   r;   r   r%   r   r+   rA   r<   rS   ÚdateÚtimerk   Útyperq   ru   ry   r{   r†   rŒ   rŽ   r“   Ú_lockr3   r—   ÚTextIOWrapperr)   r   r   ú<module>r¢      s@  ððð ð €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð ð;+ð ;+ð ;+ð ;+ð ;+ñ ;+ô ;+ð ;+ð| ˆ8‰:Œ:€ØÔ€ØÔ €
Ø„l€ð2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ðj-ð -ð -ð -ð -�;ñ -ô -ð -ð  × Ò �U”[Ñ !Ô !Ð !ð)ð )ð )ð )ð )�kñ )ô )ð )ðD × Ò ˜Ô)Ñ *Ô *Ð *Ø × Ò ˜œÑ &Ô &Ð &Ø × Ò ˜œÑ &Ô &Ð &ð+ð +ð +ð +ð +�;ñ +ô +ð +ð × Ò �T�T˜*˜"œ* R™.œ.Ñ)Ô)Ñ *Ô *Ð *ðð ð ð ð �;ñ ô ð ð × Ò �U”[Ñ !Ô !Ð !ðLð Lð Lð Lð Lñ Lô Lð Lð&ð &ð &ð &ð &�+ñ &ô &ð &ð × Ò �D”IÑ Ô Ð ðð ð ð ð �+ñ ô ð ð 	ˆ	ŒÑÔ€Ø × Ò �E”OÑ $Ô $Ð $ðLð Lð Lð Lð L�Kñ Lô Lð Lð × Ò �bÔ&Ñ 'Ô 'Ð 'Ð 'Ð 'r   