Implemented a idstring for the tickerhandler, as per #554.
This commit is contained in:
parent
36629a8bdb
commit
f6b9b7e1a9
1 changed files with 14 additions and 10 deletions
|
|
@ -195,7 +195,7 @@ class TickerHandler(object):
|
||||||
self.save_name = save_name
|
self.save_name = save_name
|
||||||
self.ticker_pool = self.ticker_pool_class()
|
self.ticker_pool = self.ticker_pool_class()
|
||||||
|
|
||||||
def _store_key(self, obj, interval):
|
def _store_key(self, obj, interval, idstring=""):
|
||||||
"""
|
"""
|
||||||
Tries to create a store_key for the object.
|
Tries to create a store_key for the object.
|
||||||
Returns a tuple (isdb, store_key) where isdb
|
Returns a tuple (isdb, store_key) where isdb
|
||||||
|
|
@ -224,7 +224,7 @@ class TickerHandler(object):
|
||||||
objkey = id(obj)
|
objkey = id(obj)
|
||||||
isdb = False
|
isdb = False
|
||||||
# return sidb and store_key
|
# return sidb and store_key
|
||||||
return isdb, (objkey, interval)
|
return isdb, (objkey, interval, idstring)
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
"""
|
"""
|
||||||
|
|
@ -237,7 +237,7 @@ class TickerHandler(object):
|
||||||
start_delays = dict((interval, ticker.task.next_call_time())
|
start_delays = dict((interval, ticker.task.next_call_time())
|
||||||
for interval, ticker in self.ticker_pool.tickers.items())
|
for interval, ticker in self.ticker_pool.tickers.items())
|
||||||
# update the timers for the tickers
|
# update the timers for the tickers
|
||||||
for (obj, interval), (args, kwargs) in self.ticker_storage.items():
|
for (obj, interval, idstring), (args, kwargs) in self.ticker_storage.items():
|
||||||
kwargs["_start_delay"] = start_delays.get(interval, None)
|
kwargs["_start_delay"] = start_delays.get(interval, None)
|
||||||
|
|
||||||
ServerConfig.objects.conf(key=self.save_name,
|
ServerConfig.objects.conf(key=self.save_name,
|
||||||
|
|
@ -254,30 +254,34 @@ class TickerHandler(object):
|
||||||
if ticker_storage:
|
if ticker_storage:
|
||||||
self.ticker_storage = dbunserialize(ticker_storage)
|
self.ticker_storage = dbunserialize(ticker_storage)
|
||||||
#print "restore:", self.ticker_storage
|
#print "restore:", self.ticker_storage
|
||||||
for (obj, interval), (args, kwargs) in self.ticker_storage.items():
|
for store_key, (args, kwargs) in self.ticker_storage.items():
|
||||||
|
if len(store_key) == 2:
|
||||||
|
# old form of store_key
|
||||||
|
store_key = (store_key[0], store_key[1], "")
|
||||||
|
obj, interval, idstring = store_key
|
||||||
obj = unpack_dbobj(obj)
|
obj = unpack_dbobj(obj)
|
||||||
_, store_key = self._store_key(obj, interval)
|
_, store_key = self._store_key(obj, interval, idstring)
|
||||||
self.ticker_pool.add(store_key, obj, interval, *args, **kwargs)
|
self.ticker_pool.add(store_key, obj, interval, *args, **kwargs)
|
||||||
|
|
||||||
def add(self, obj, interval, *args, **kwargs):
|
def add(self, obj, interval, idstring="", *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Add object to tickerhandler. The object must have an at_tick
|
Add object to tickerhandler. The object must have an at_tick
|
||||||
method. This will be called every interval seconds until the
|
method. This will be called every interval seconds until the
|
||||||
object is unsubscribed from the ticker.
|
object is unsubscribed from the ticker.
|
||||||
"""
|
"""
|
||||||
isdb, store_key = self._store_key(obj, interval)
|
isdb, store_key = self._store_key(obj, interval, idstring)
|
||||||
if isdb:
|
if isdb:
|
||||||
self.ticker_storage[store_key] = (args, kwargs)
|
self.ticker_storage[store_key] = (args, kwargs)
|
||||||
self.save()
|
self.save()
|
||||||
self.ticker_pool.add(store_key, obj, interval, *args, **kwargs)
|
self.ticker_pool.add(store_key, obj, interval, *args, **kwargs)
|
||||||
|
|
||||||
def remove(self, obj, interval=None):
|
def remove(self, obj, interval=None, idstring=""):
|
||||||
"""
|
"""
|
||||||
Remove object from ticker, or only this object ticking
|
Remove object from ticker, or only this object ticking
|
||||||
at a given interval.
|
at a given interval.
|
||||||
"""
|
"""
|
||||||
if interval:
|
if interval:
|
||||||
isdb, store_key = self._store_key(obj, interval)
|
isdb, store_key = self._store_key(obj, interval, idstring)
|
||||||
if isdb:
|
if isdb:
|
||||||
self.ticker_storage.pop(store_key, None)
|
self.ticker_storage.pop(store_key, None)
|
||||||
self.save()
|
self.save()
|
||||||
|
|
@ -287,7 +291,7 @@ class TickerHandler(object):
|
||||||
intervals = self.ticker_pool.tickers.keys()
|
intervals = self.ticker_pool.tickers.keys()
|
||||||
should_save = False
|
should_save = False
|
||||||
for interval in intervals:
|
for interval in intervals:
|
||||||
isdb, store_key = self._store_key(obj, interval)
|
isdb, store_key = self._store_key(obj, interval, idstring)
|
||||||
if isdb:
|
if isdb:
|
||||||
self.ticker_storage.pop(store_key, None)
|
self.ticker_storage.pop(store_key, None)
|
||||||
should_save = True
|
should_save = True
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue