dogmaWrappers.py (1832B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dogma\dogmaWrappers.py 2 from dogma.dogmaLogging import * 3 global_seq_id = 0 4 global_nesting_level = 0 5 global_traceback_threshold = -1 6 7 def WrappedMethod(m): 8 9 def Wrapped_method(self, *args, **kwargs): 10 global global_seq_id 11 global global_nesting_level 12 my_seq_id = global_seq_id 13 global_seq_id += 1 14 try: 15 selfDescription = str(self) 16 except (AttributeError, KeyError): 17 selfDescription = '<{} at {:#x}>'.format(self.__class__.__name__, id(self)) 18 19 LogNotice('{:04}'.format(my_seq_id), 'PAT: Wrap:', '*' * global_nesting_level, 'Enter', m.__name__, 'with self=', selfDescription, 'args=', args, 'kwargs=', kwargs, 'seq_id=', my_seq_id) 20 if global_nesting_level <= global_traceback_threshold: 21 LogTraceback('Traceback from WrappedMethod') 22 global_nesting_level += 1 23 res = m(self, *args, **kwargs) 24 global_nesting_level -= 1 25 LogNotice('{:04}'.format(my_seq_id), 'PAT: Wrap:', '-' * global_nesting_level, 'Exit', m.__name__, 'returning res=', res, 'seq_id=', my_seq_id) 26 return res 27 28 Wrapped_method.__isWrapped__ = True 29 LogNotice('PAT: Wrapping old method {} with new {}'.format(m, Wrapped_method)) 30 return Wrapped_method 31 32 33 def WrappedClass(c): 34 LogNotice('PAT: WRAPPING CLASS', c) 35 import types 36 for k, v in c.__dict__.items(): 37 if k in {'__str__', '__repr__'}: 38 LogNotice('Skipping un-wrappable function:', k, ':', v) 39 continue 40 if isinstance(v, types.FunctionType): 41 if hasattr(v, '__isWrapped__'): 42 LogNotice('Skipping already wrapped function:', k, ':', v) 43 else: 44 setattr(c, k, WrappedMethod(v)) 45 46 return c