NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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