add download_file, bool volatile state

This commit is contained in:
2020-12-20 19:53:38 -05:00
parent 2d74f61553
commit 30c9494daa
6 changed files with 144 additions and 4 deletions

View File

@@ -19,6 +19,7 @@ class PersistentState:
class VolatileState:
"""Quick and dirty volatile dict-like redis wrapper"""
def __init__(self, prefix, ttl=3600, **redis_args):
self.rdb = redis.Redis(**redis_args)
self.prefix = prefix
@@ -28,6 +29,18 @@ class VolatileState:
return RedisTable(self, table)
class VolatileBooleanState:
"""Quick and dirty volatile dict-like redis wrapper for boolean values"""
def __init__(self, prefix, ttl=3600, **redis_args):
self.rdb = redis.Redis(**redis_args)
self.prefix = prefix
self.ttl = ttl
def __getitem__(self, table):
return RedisBooleanTable(self, table)
class RedisTable:
def __init__(self, state, table):
self._state = state
@@ -51,6 +64,27 @@ class RedisTable:
yield json.loads(val) if val else None
class RedisBooleanTable:
def __init__(self, state, table):
self._state = state
self._table = table
def __setitem__(self, key, value):
if value:
self._state.rdb.sadd(self._state.prefix + self._table, str(key))
else:
self.__delitem__(key)
def __getitem__(self, key):
return self._state.rdb.sismember(self._state.prefix + self._table, str(key))
def __delitem__(self, key):
self._state.rdb.srem(self._state.prefix + self._table, str(key))
def __iter__(self):
return iter(self._state.rdb.smembers(self._state.prefix + self._table))
class Table:
def __init__(self, state, table):
self._state = state
@@ -132,7 +166,6 @@ def _deserialize(value, col_type):
def pg_fetch_cursor_all(cur, name, batch_size=1000):
while True:
cur.execute("FETCH FORWARD %d FROM %s" % (batch_size, name))
cnt = 0