pBFjS dZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z GddZ e Z e j Z e jZe jZGddZGd d eZeejGd d eZeejeejeejGd deZeeejdGddeZeejGddZGddeZeejGddeZejZ ee j!GddeZ"e"ej#dS)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*eZdZdZddZddZdZdS) Registryc"i|_i|_dSN) _handlers_base_handlersselfs AC:\PYTHON\_runtimes\venv\Lib\site-packages\jsonpickle/handlers.py__init__zRegistry.__init__s Nc|j|}|Gtj|r3|jD]\}}t ||r|cS||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 getris_typer items issubclass)r cls_or_namedefaulthandlercls base_handlers r rz Registry.gets.$$[11 ?t|K88?%)%8%>%>%@%@ ( (!\k3//(''''(!/www6rFc| fd}|Stjstd|xjtj<j<r |j<dSdS)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 Nc8||S)N)rbase)register) handler_clsrrr s r _registerz$Registry.register.._registerAs! c;T BBB""rz is not a class/type)rr TypeErrorr importable_namer )r rrrrs`` ` r rzRegistry.register.s" ? # # # # # # # |C   <s:::;; ;KRQt+C001DN34G  /'.D  $ $ $ / /rc|j|d|jtj|d|j|ddSr)r poprr!r r rs r unregisterzRegistry.unregisterOs\ 3%%% 4/44d;;; T*****rr)NF)__name__ __module__ __qualname__rrrr%rr rrs[!!!7777$////B+++++rrc<eZdZdZdZdZedZdZdS) BaseHandlerc||_dS)z Initialize a new handler to handle a registered type. :Parameters: - `context`: reference to pickler/unpickler Ncontextr r.s r rzBaseHandler.__init__\s rc0td|jz)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 %sNotImplementedError __class__r objdatas r flattenzBaseHandler.flattenfs""F"WXXXrc0td|jz)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 r5s r restorezBaseHandler.restoreqs ""F"WXXXrc<t|||S)z Register this handler for the given class. Suitable as a decorator, e.g.:: @MyCustomHandler.handles class MyCustomClass: def __reduce__(self): ... )registryrr$s r handleszBaseHandler.handlesxs #t$$$ rc||_|S)zThis permits registering either Handler instances or classes :Parameters: - `context`: reference to pickler/unpickler r-r/s r __call__zBaseHandler.__call__s   rN) r&r'r(rr7r9 classmethodr<r>r)rr r+r+[sq Y Y YYYY  [ rr+ceZdZdZdZdZdS) ArrayHandlerz'Flatten and restore array.array objectsc||j|d<|j|d|d<|S)NtypecodeFresetvalues)rCr.r7tolistr4s r r7zArrayHandler.flattens9<Z--cjjll%-HHX rc|d}|j|dd}|dkr d|D}tj||S)NrCrFFrDcc,g|]}t|Sr))bytes).0xs r z(ArrayHandler.restore..s///1eAhh///r)r.r9array)r r6rCrFs r r9zArrayHandler.restoresX #%%d8nE%BB s??/////F{8V,,,rNr&r'r(__doc__r7r9r)rr rArAs811 -----rrAceZdZdZdZdZdS)DatetimeHandlerzCustom 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. cX|j}|js6t|dr|}nt |}|S|\}}|jtj|d}|gfd|ddDz}|d|f|d<|S)N isoformatrc*g|]}|dSFrDr))rLir7s r rNz+DatetimeHandler.flatten..s(FFFGGAU333FFFrrFrD __reduce__) r. unpicklablehasattrrUstrrYr7r b64encode) r r5r6picklerresultrargspayloadr7s @r r7zDatetimeHandler.flattens," sK(( "SMNN$$ T/.a))yFFFFT!""XFFFF%gc777>\ rc|d\}}|j}|j|d}tj|d}|ft fd|ddDz}|j|g|RS)NrYFrDrc*g|]}|dSrWr))rLrXr9s r rNz+DatetimeHandler.restore..s("M"M"Mq771E#:#:#:"M"M"Mrr)r.r9r b64decodetuple__new__)r r6rr` unpicklervalueparamsr9s @r r9zDatetimeHandler.restores& TL #gc'''tAw''E"M"M"M"MDH"M"M"MNNNs{3(((((rNrPr)rr rSrSs<   )))))rrSceZdZdZdZdZdS) RegexHandlerz1Flatten _sre.SRE_Pattern (compiled regex) objectsc|j|d<|SNpattern)rnr4s r r7zRegexHandler.flattens+Y rc6tj|dSrm)recompiler r6s r r9zRegexHandler.restoresz$y/***rNrPr)rr rkrks8;;+++++rrkceZdZdZdZdZdS) QueueHandlerzOpaquely serializes Queue objects Queues contains mutex and condition variables which cannot be serialized. Construct a new Queue instance when restoring. c|Srr)r4s r r7zQueueHandler.flattens rc(tjSr)queueQueuerrs r r9zQueueHandler.restores{}}rNrPr)rr rurus<rruc2eZdZdZdZejfdZdZdS) CloneFactoryzASerialization proxy for collections.defaultdict's default_factoryc||_dSrexemplar)r r~s r rzCloneFactory.__init__s   rc"||jS)z>Create new instances by making copies of the provided exemplarr})r clones r r>zCloneFactory.__call__suT]###rc:dt|dd|jdS)Nz)idr~r s r __repr__zCloneFactory.__repr__s&KBtHHKKK$-KKKKrN)r&r'r(rQrcopyr>rr)rr r{r{sXKK!!!"Y$$$$LLLLLrr{ceZdZdZdZdZdS) UUIDHandlerzSerialize uuid.UUID objectsc|j|d<|SNhex)rr4s r r7zUUIDHandler.flattensgU  rc6tj|dSr)uuidUUIDrrs r r9zUUIDHandler.restoresye%%%rNrPr)rr rrs8%%&&&&&rrceZdZdZdZdZdS) LockHandlerz Serialize threading.Lock objectsc4||d<|S)Nlocked)rr4s r r7zLockHandler.flatten sX rctj}|ddr||S)NrF) threadingLockracquire)r r6locks r r9zLockHandler.restore s7~ 88He $ $  LLNNN rNrPr)rr rrs8**rrceZdZdZdZdZdS) TextIOHandlerz>Serialize file descriptors as None because we cannot roundtripcdSrr)r4s r r7zTextIOHandler.flattenstrc td)z>Restore should never get called because flatten() returns Nonez+Restoring IO.TextIOHandler is not supported)AssertionErrorrrs r r9zTextIOHandler.restoresJKKKrNrPr)rr rrs=HHLLLLLrr)$rQrOrdatetimeiorxrprrrsrrr;rr%rr+rAr<rSdatetimerktyperqruryr{rrrr_lockr3r TextIOWrapperr)rr rs@   ;+;+;+;+;+;+;+;+| 8::    l22222222j - - - - -; - - -  U[!!!)))))k)))D)*** &&& &&&+++++;+++ TT*"*R..))***     ;    U[!!! L L L L L L L L&&&&&+&&& DI     +      EO$$$LLLLLKLLLb&'''''r