U eD@sddlZddlmZddlmZddlmZddlmZddZdd d d Z dd dZ ddZ ddZ dd ddZ ddZdS)N)partial) TracebackType)Frame) TracebackcCs$tt}||_||_||_|SN)object__new__rtb_frame tb_linenotb_nextZ as_traceback)r r r retrD/opt/hc_python/lib/python3.8/site-packages/tblib/pickling_support.pyunpickle_traceback s  r get_localscCs*tt|j|d|j|jo$t|j|dffS)Nr)rrr r r r)tbrrrrpickle_tracebacks  rFcCs2||}||_||_||_||_|dk r.||_|Sr) __cause__ __traceback__ __context____suppress_context__ __notes__)funcargscausercontextZsuppress_contextnotesinstrrrunpickle_exceptionsr c Cst|d}t|trtdt|ts*tt|dks:tt|dd|j|j |j |j t |ddff|ddS)Nz&str __reduce__ output is not supportedr) __reduce_ex__ isinstancestr TypeErrortupleAssertionErrorlenr rrrrgetattr)objrvrrrpickle_exception&s"     r-ccs.|g}|r*|}|V|t|7}qdSr)poplist__subclasses__)clsto_visitthisrrr_get_subclassesBs r4cGstttt|d|s6ttD]}t|tq dS|D]b}t|trVt |t q:t|t rt |trt|tt |dkr|Sq:tdt |q:dS)z Args: get_locals (callable): A function that take a frame argument and returns a dict. See :class:`tblib.Traceback` class for example. rNrz9Expected subclasses or instances of BaseException, got %s)copyregpicklerrrr4 BaseExceptionr-r$_install_for_instancesettype issubclassr)r&)rZexc_classes_or_instancesZ exception_clsexcrrrinstallKs     r=cCst|tstt||krdS|t|tt|t|j dk rRt |j ||j dk rht |j |t |drt|j ttfr|j D]}t|trt ||qdS)N exceptions)r$r7r(idaddr5r6r:r-rr8rhasattrr>r'r/)r<seenZsubexcrrrr8ds       r8)NFN)r5 functoolsrtypesrrrrrr r-r4r=r8rrrrs