Muttered3 commited on
Commit
e5da5b9
·
verified ·
1 Parent(s): 0b2fe49

Create db.py

Browse files
Files changed (1) hide show
  1. db.py +76 -0
db.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import redis.asyncio as aioredis
2
+ import os
3
+
4
+ _redis = None
5
+
6
+ async def get_redis():
7
+ global _redis
8
+ if _redis is None:
9
+ _redis = aioredis.from_url(os.environ["REDIS_URL"], decode_responses=True)
10
+ return _redis
11
+
12
+ async def queue_size() -> int:
13
+ r = await get_redis()
14
+ return await r.llen("frag:queue")
15
+
16
+ async def done_count() -> int:
17
+ r = await get_redis()
18
+ return await r.scard("frag:done")
19
+
20
+ async def get_state() -> dict:
21
+ r = await get_redis()
22
+ state = await r.hgetall("frag:state")
23
+ if not state:
24
+ state = {"running": "0", "paused": "0", "total": "0", "processed": "0"}
25
+ await r.hset("frag:state", mapping=state)
26
+ return state
27
+
28
+ async def set_state(**kwargs):
29
+ r = await get_redis()
30
+ string_kwargs = {k: str(v) for k, v in kwargs.items()}
31
+ await r.hset("frag:state", mapping=string_kwargs)
32
+
33
+ async def pop_word() -> str|None:
34
+ r = await get_redis()
35
+ return await r.rpop("frag:queue")
36
+
37
+ async def mark_done(word: str, status: str):
38
+ r = await get_redis()
39
+ await r.set(f"frag:status:{word}", status)
40
+ await r.sadd("frag:done", word)
41
+ if status in ("TAKEN", "UNAVAILABLE", "FOR_SALE", "ON_AUCTION"):
42
+ set_name = status.lower().replace("_", "")
43
+ await r.sadd(f"frag:{set_name}", word)
44
+ await r.hincrby("frag:state", "processed", 1)
45
+
46
+ async def get_counts() -> dict:
47
+ r = await get_redis()
48
+ return {
49
+ "taken": await r.scard("frag:taken"),
50
+ "unavailable": await r.scard("frag:unavailable"),
51
+ "forsale": await r.scard("frag:forsale"),
52
+ "auction": await r.scard("frag:onauction")
53
+ }
54
+
55
+ async def get_all_taken() -> list:
56
+ r = await get_redis()
57
+ return list(await r.smembers("frag:taken"))
58
+
59
+ async def get_all_unavailable() -> list:
60
+ r = await get_redis()
61
+ return list(await r.smembers("frag:unavailable"))
62
+
63
+ async def flush_all():
64
+ r = await get_redis()
65
+ keys = await r.keys("frag:*")
66
+ if keys:
67
+ await r.delete(*keys)
68
+
69
+ async def get_concurrency() -> int:
70
+ r = await get_redis()
71
+ val = await r.get("frag:concurrency")
72
+ return int(val) if val else 30
73
+
74
+ async def set_concurrency(n: int):
75
+ r = await get_redis()
76
+ await r.set("frag:concurrency", str(n))