util.py (1224B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\fsdlite\util.py 2 import weakref 3 import inspect 4 import types 5 import copy 6 7 def repr(obj, module = None, exclude = []): 8 module = '' if module else module + '.' 9 if hasattr(obj, '__slots__'): 10 return '<{}{} {}>'.format(module, obj.__class__.__name__, ' '.join([ '{}={}'.format(key, getattr(obj, key, None)) for key in obj.__slots__ if key not in exclude ])) 11 elif hasattr(obj, '__dict__'): 12 return '<{}{} {}>'.format(module, obj.__class__.__name__, ' '.join([ '{}={}'.format(key, value) for key, value in obj.__dict__.iteritems() if key not in exclude ])) 13 else: 14 return str(obj) 15 16 17 class WeakMethod(object): 18 19 def __init__(self, f): 20 self.f = f.__func__ 21 self.c = weakref.ref(f.__self__) 22 23 def __call__(self, *args): 24 if self.c() is not None: 25 self.f(self.c(), *args) 26 27 28 def extend_class(cls, mixin): 29 for name, member in inspect.getmembers(mixin): 30 if inspect.ismethod(member): 31 setattr(cls, name, types.MethodType(member.__func__, None, cls)) 32 33 34 class Extendable(object): 35 36 @classmethod 37 def extend(cls, mixin): 38 extend_class(cls, mixin)