ulduldp commited on
Commit
4fc3bbf
·
verified ·
1 Parent(s): 923b967

Create mdb.py

Browse files
Files changed (1) hide show
  1. mdb.py +113 -0
mdb.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ from pymongo import MongoClient
4
+
5
+ # -------- CONFIG --------
6
+ MONGO_URI = os.getenv("MONGO_URI")
7
+ DB_NAME = "tgstoragebot" # tum change kar sakte ho
8
+ COLLECTION_NAME = "UserStorageData"
9
+ # ------------------------
10
+
11
+ if not MONGO_URI:
12
+ raise ValueError("MONGO_URI not set in environment variables")
13
+
14
+ client = MongoClient(MONGO_URI)
15
+ db = client[DB_NAME]
16
+ col = db[COLLECTION_NAME]
17
+
18
+ # -------- CACHE --------
19
+ _cache = {}
20
+ CACHE_TTL = 600 # 10 min
21
+
22
+
23
+ # -------- HELPERS --------
24
+
25
+ def _normalize_type(dtype):
26
+ return dtype.lower() if dtype else "string"
27
+
28
+
29
+ def _cache_key(key, dtype):
30
+ return f"{key}:{dtype}"
31
+
32
+
33
+ def _set_cache(key, dtype, value):
34
+ _cache[_cache_key(key, dtype)] = {
35
+ "value": value,
36
+ "time": time.time()
37
+ }
38
+
39
+
40
+ def _get_cache(key, dtype):
41
+ ckey = _cache_key(key, dtype)
42
+ data = _cache.get(ckey)
43
+
44
+ if not data:
45
+ return None
46
+
47
+ if time.time() - data["time"] > CACHE_TTL:
48
+ del _cache[ckey]
49
+ return None
50
+
51
+ # 🔥 refresh TTL
52
+ data["time"] = time.time()
53
+
54
+ return data["value"]
55
+
56
+
57
+ def _delete_cache(key):
58
+ for k in list(_cache.keys()):
59
+ if k.startswith(f"{key}:"):
60
+ del _cache[k]
61
+
62
+
63
+ # -------- CORE --------
64
+
65
+ def set(key, dtype, value):
66
+ dtype = _normalize_type(dtype)
67
+
68
+ col.update_one(
69
+ {"key": key, "type": dtype},
70
+ {"$set": {"key": key, "type": dtype, "value": value}},
71
+ upsert=True
72
+ )
73
+
74
+ _set_cache(key, dtype, value)
75
+ return True
76
+
77
+
78
+ def get(key, dtype="string"):
79
+ dtype = _normalize_type(dtype)
80
+
81
+ cached = _get_cache(key, dtype)
82
+ if cached is not None:
83
+ return cached
84
+
85
+ doc = col.find_one({"key": key, "type": dtype})
86
+ if not doc:
87
+ return None
88
+
89
+ value = doc["value"]
90
+ _set_cache(key, dtype, value)
91
+
92
+ return value
93
+
94
+
95
+ def update(key, dtype, value):
96
+ dtype = _normalize_type(dtype)
97
+
98
+ result = col.update_one(
99
+ {"key": key, "type": dtype},
100
+ {"$set": {"value": value}}
101
+ )
102
+
103
+ if result.matched_count == 0:
104
+ return False
105
+
106
+ _set_cache(key, dtype, value)
107
+ return True
108
+
109
+
110
+ def delete(key):
111
+ col.delete_many({"key": key})
112
+ _delete_cache(key)
113
+ return True