def _replace_te_arguments (_routine, _parent_tracer, _parent_enforcer) : # ---- coercing routine if inspect.ismethod (_routine) : _routine = _routine.im_func # ---- determining arguments _tracer_index = None _enforcer_index = None _argspec = inspect.getargspec (_routine) if _argspec.defaults is not None : _default_offset = len (_argspec.args) - len (_argspec.defaults) for _default_index in xrange (len (_argspec.defaults)) : _argument_index = _default_offset + _default_index if _argspec.defaults[_default_index] is tracer : if _tracer_index is not None : raise Exception ('wtf! (duplicate `tracer` was found `%s` and `%s`)' % (_argspec.args[_tracer_index], _argspec.args[_argument_index])) if hasattr (_routine, _argspec.args[_argument_index]) : raise Exception ('wtf! (`tracer` attribute already exists)') _tracer_index = _argument_index if _argspec.defaults[_default_index] is enforcer : if _enforcer_index is not None : raise Exception ('wtf! (duplicate `enforcer` was found `%s` and `%s`)' % (_argspec.args[_enforcer_index], _argspec.args[_argument_index])) if hasattr (_routine, _argspec.args[_argument_index]) : raise Exception ('wtf! (`enforcer` attribute already exists)') _enforcer_index = _argument_index # ---- creating objects if _tracer_index is not None : _tracer = transcripts.tracer_tf (_routine, parent = _parent_tracer) if _enforcer_index is not None : _enforcer = enforcements.enforcer_ef (_routine, parent = _parent_enforcer) # ---- re-creating defaults if _tracer_index is not None or _enforcer_index is not None : _defaults = list (_argspec.defaults) if _tracer_index is not None : _defaults[_tracer_index - _default_offset] = _tracer if _enforcer_index is not None : _defaults[_enforcer_index - _default_offset] = _enforcer _routine.func_defaults = tuple (_defaults) # ---- setting attributes if _tracer_index is not None : setattr (_routine, _argspec.args[_tracer_index], _tracer) if _enforcer_index is not None : setattr (_routine, _argspec.args[_enforcer_index], _enforcer) return (_tracer_index, _enforcer_index)
def _replace_te_members (_object, _parent_tracer, _parent_enforcer) : # ---- determining members _tracer_identifier = None _enforcer_identifier = None for _member_identifier, _member_value in inspect.getmembers (_object) : if _member_value is tracer : if not inspect.ismodule (_object) or _member_identifier != '_tracer' : if _tracer_identifier is not None : raise Exception ('wtf! (duplicate `tracer` was found `%s` and `%s`)' % (_tracer_identifier, _member_identifier)) _tracer_identifier = _member_identifier if _member_value is enforcer : if not inspect.ismodule (_object) or _member_identifier != '_enforcer' : if _enforcer_identifier is not None : raise Exception ('wtf! (duplicate `enforcer` was found `%s` and `%s`)' % (_enforcer_identifier, _member_identifier)) _enforcer_identifier = _member_identifier # ---- deleting members if _tracer_identifier is not None : delattr (_object, _tracer_identifier) if _enforcer_identifier is not None : delattr (_object, _enforcer_identifier) # ---- creating objects if _tracer_identifier is not None : _tracer = transcripts.tracer_tf (_object, parent = _parent_tracer) if _enforcer_identifier is not None : _enforcer = enforcements.enforcer_ef (_object, parent = _parent_enforcer) # ---- re-creating members if _tracer_identifier is not None : setattr (_object, _tracer_identifier, _tracer) if _enforcer_identifier is not None : setattr (_object, _enforcer_identifier, _enforcer) return (_tracer_identifier, _enforcer_identifier)
def test_with_old_te (self) : _t = transcripts.tracer_tf (self.test_with_old_te) _e = enforcements.enforcer_ef (self.test_with_old_te) return