PlexKodiConnect/resources/lib/plexnet/callback.py
2018-09-30 13:16:17 +02:00

53 lines
1.2 KiB
Python

import threading
class Callable(object):
_currID = 0
def __init__(self, func, forcedArgs=None, ID=None):
self.func = func
self.forcedArgs = forcedArgs
self.ID = ID or id(func)
if not self.ID:
self.ID = Callable.nextID()
def __repr__(self):
return '<Callable:({0})>'.format(repr(self.func).strip('<>'))
def __eq__(self, other):
if not other:
return False
if self.__class__ != other.__class__:
return False
return self.ID and self.ID == other.ID
def __ne__(self, other):
return not self.__eq__(other)
def __call__(self, *args, **kwargs):
args = args or []
if self.forcedArgs:
args = self.forcedArgs
self.func(*args, **kwargs)
@property
def context(self):
return self.func.im_self
@classmethod
def nextID(cls):
cls._currID += 1
return cls._currID
def deferCall(self, timeout=0.1):
timer = threading.Timer(timeout, self.onDeferCallTimer)
timer.name = 'ONDEFERCALLBACK-TIMER:{0}'.format(self.func)
timer.start()
def onDeferCallTimer(self):
self()