o b'@sdZddlmZmZddlmZGdddZGdddeZGdd d eZGd d d eZ Gd d d Z GdddeZ ddl m Z Gddde eeZdS)z7 Utility classes for dealing with circular references. )logreflect)_constructMethodc@s0eZdZddZddZdZddZdd ZdS) NotKnowncCsg|_d|_dSNr) dependantsresolvedselfr s   z_Container.__setitem__N)rrr__doc__r r)r r r r r%s rc@seZdZdZddZdS)_Tupleza Manage tuple containing circular references. Deprecated: use C{_Container} instead. cCst||tdS)zi @param l: The list of object which may contain some not yet referenced objects. N)rr tuple)r rr r r r Psz_Tuple.__init__N)rrrr*r r r r r r+Js r+c@s$eZdZddZddZddZdS)_InstanceMethodcCs&t|||_||_||ddSr)rr my_classnamer)r im_nameim_selfim_classr r r r Ys z_InstanceMethod.__init__cOsPddl}tdt|jd|jtd|d||jtjdJ)Nrzinstance method .zbeing called with  )file) tracebackrmsgrqualr.r/ print_stacklogfile)r argskwr6r r r __call__`s  z_InstanceMethod.__call__cCs<|dksJdt|tst|j|j|}||dSdS)Nrzonly zero index allowed)r#rrr.r/r)r r'r(methodr r r r)hs  z_InstanceMethod.__setitem__N)rrrr r=r)r r r r r-Xs r-c@seZdZddZddZdS)_DictKeyAndValuecCs ||_dSr)dict)r r@r r r r ps z_DictKeyAndValue.__init__cCsP|dvrtd|r||_n||_t|dr$t|dr&|j|j|j<dSdSdS)N)rrz6DictKeyAndValue should only ever be called with 0 or 1rvalue) RuntimeErrorrArhasattrr@r&r r r r)ssz_DictKeyAndValue.__setitem__N)rrrr r)r r r r r?os r?c@seZdZddZdS) _DereferencecCst|||_dSr)rr id)r rEr r r r s  z_Dereference.__init__N)rrrr r r r r rD~s rD)Deferredc@s(eZdZddZdZddZddZdS) _DefercCs t|t||dSr)rFr rpauser r r r r s   z_Defer.__init__rcCs*|jr td||d|_||dS)Nz8setitem should only be called once, setting {!r} to {!r}r)wassetrBformatcallbackr&r r r r)sz_Defer.__setitem__cCs*t|||||j}||dSr)rrunpauseresultr)r deprresovdr r r rsz_Defer.addDependantN)rrrr rIr)rr r r r rGs  rGN)r*twisted.pythonrrtwisted.python.compatrrrr+r-r?rDtwisted.internet.deferrFobjectrGr r r r s %