U a@shddlmZmZddlmZmZmZmZmZddl Z e j GdddZ GdddZ Gdd d Z dS) ) lru_cachesingledispatch)AnyCallableListTupleUnionNc@seZdZdZdS)_DispatchNotFoundz4A dummy object to help signify a dispatch not found.N)__name__ __module__ __qualname____doc__rr/Users/jalaguru/Documents/Proserv/artifacts/aws_dms_cdk_automation/aws-dms-cdk-automation/venv/lib/python3.8/site-packages/cattr/dispatch.pyr sr c@s|eZdZdZdZddZddZdedd d Ze e e e e gefe fe e e gefe effd d d ZddZdS)MultiStrategyDispatchzu MultiStrategyDispatch uses a combination of exact-match dispatch, singledispatch, and FunctionDispatch. )_direct_dispatch_function_dispatch_single_dispatchZ _generatorsdispatchcCs@i|_t|_|jdd|tt|_tdd|j|_ dS)NcSsdS)NTr)_rrrz0MultiStrategyDispatch.__init__..)maxsize) rFunctionDispatchrregisterrr rr _dispatchr)selfZ fallback_funcrrr__init__s  zMultiStrategyDispatch.__init__cCsXz|j|}|tk r|WSWntk r2YnX|j|}|dk rL|S|j|SN)rrr Exceptionrgetr)rZclrZdirect_dispatchrrrr#s   zMultiStrategyDispatch._dispatchF)directcCsB|D].\}}|r||j|<q|j|||q|jdS)z. register a class to direct or singledispatch N)rrr clear_directr cache_clear)rZcls_and_handlerr!clshandlerrrrregister_cls_list1s    z'MultiStrategyDispatch.register_cls_list)func_and_handlercCs`|D]D}t|dkr,|\}}|j||q|\}}}|jj|||dq||jdS)z[register a function to determine if the handle should be used for the type ) is_generatorN)lenrrr"rr#)rr'tupfuncr%Zis_genrrrregister_func_list;s   z(MultiStrategyDispatch.register_func_listcCs|jdS)zClear the direct dispatch.N)rclearrrrrr"Ssz"MultiStrategyDispatch.clear_directN)F)r r r r __slots__rrboolr&rrrrrr-r"rrrrrs  rc@s>eZdZdZdZddZd eegefdddZ d d Z d S) ra FunctionDispatch is similar to functools.singledispatch, but instead dispatches based on functions that take the type of the first argument in the method, and return True or False. objects that help determine dispatch should be instantiated objects. _handler_pairscCs g|_dSrr2r/rrrrcszFunctionDispatch.__init__F) can_handlecCs|jd|||fdS)Nr)r3insert)rr4r,r)rrrrfszFunctionDispatch.registerc Csf|jD]L\}}}z ||}Wntk r4YqYnX|r|rJ||S|Sqtd|dS)zI returns the appropriate handler, for the object passed. zunable to find handler for {0}N)r3rKeyErrorformat)rtypr4r%r)chrrrrks    zFunctionDispatch.dispatchN)F) r r r r r0rrrr1rrrrrrrXs r) functoolsrrtypingrrrrrattrsr rrrrrrs J