class UpdatingLogger(object): date_format = '%Y.%m.%d..%H.%M.%S' def __init__(self, connection, prefix, name): self.conn = connection self.prefix = prefix self.name = name self.id_key = RedisKey('%s:id' % self.prefix, self.conn) self.set_key = RedisKey('%s:set' % self.prefix, self.conn) def save(self, date, value, t): id = self.id_key.incr() key = '%s:obj:%s' % (self.prefix, id) date_str = date.strftime(self.date_format) self.conn.hmset(key, {'value': value, 'date': date_str, 'time': t}) self.set_key.sadd(id) def __getitem__(self, k): """ Retrieves an item or slice from the set of results. """ if not isinstance(k, slice): raise TypeError num = k.stop - k.start key = self.set_key.redis_key p = self.prefix get = [ '%s:obj:*->value' % p, '%s:obj:*->date' % p, '%s:obj:*->time' % p ] return self._to_python( self.conn.sort(key, get=get, start=k.start, num=num, desc=True)) def count(self): return self.set_key.scard() def _get_date(self, value): return datetime.datetime.strptime(value, self.date_format) def _clone(self): return self def _to_python(self, result): output = [] for i in range(len(result))[::3]: obj = {} obj['value'] = result[i] obj['date'] = self._get_date(result[i + 1]) obj['time'] = result[i + 2] output.append(obj) return output
class UpdatingLogger(object): date_format = '%Y.%m.%d..%H.%M.%S' def __init__(self, connection, prefix, name): self.conn = connection self.prefix = prefix self.name = name self.id_key = RedisKey('%s:id' % self.prefix, self.conn) self.set_key = RedisKey('%s:set' % self.prefix, self.conn) def save(self, date, value, t): id = self.id_key.incr() key = '%s:obj:%s' % (self.prefix, id) date_str = date.strftime(self.date_format) self.conn.hmset(key, {'value': value, 'date': date_str, 'time': t}) self.set_key.sadd(id) def __getitem__(self, k): """ Retrieves an item or slice from the set of results. """ if not isinstance(k, slice): raise TypeError num = k.stop - k.start key = self.set_key.redis_key p = self.prefix get = ['%s:obj:*->value' % p, '%s:obj:*->date' % p, '%s:obj:*->time' % p] return self._to_python(self.conn.sort(key, get=get, start=k.start, num=num, desc=True)) def count(self): return self.set_key.scard() def _get_date(self, value): return datetime.datetime.strptime(value, self.date_format) def _clone(self): return self def _to_python(self, result): output = [] for i in range(len(result))[::3]: obj = {} obj['value'] = result[i] obj['date'] = self._get_date(result[i+1]) obj['time'] = result[i+2] output.append(obj) return output