Skip to content

Commit 8355a0d

Browse files
sspickleclaude
andcommitted
feat: add Setting model and count_users/get_setting/set_setting to DB layer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 6fbd9f6 commit 8355a0d

2 files changed

Lines changed: 56 additions & 1 deletion

File tree

src/db_translate.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,21 @@ def delete_program(self, program_obj):
7272
def set_datetime(self, obj, dt):
7373
pass
7474

75+
@abc.abstractmethod
76+
def count_users(self):
77+
"""Return the current number of User records."""
78+
pass
79+
80+
@abc.abstractmethod
81+
def get_setting(self, key):
82+
"""Return the value string for the given setting key, or None if not set."""
83+
pass
84+
85+
@abc.abstractmethod
86+
def set_setting(self, key, value):
87+
"""Persist value string for the given setting key (upsert)."""
88+
pass
89+
7590

7691
class NDB_DBGlue(DBGlue):
7792

@@ -138,6 +153,22 @@ def delete_program(self, program_obj):
138153
def set_datetime(self, obj, dt):
139154
obj.datetime = dt
140155

156+
def count_users(self):
157+
return ndb_models.User.query().count()
158+
159+
def get_setting(self, key):
160+
setting = ndb_models.ndb.Key('Setting', key).get()
161+
if not setting or setting.value == 'NOT SET':
162+
return None
163+
return setting.value
164+
165+
def set_setting(self, key, value):
166+
setting = ndb_models.ndb.Key('Setting', key).get()
167+
if not setting:
168+
setting = ndb_models.Setting(id=key)
169+
setting.value = value
170+
setting.put()
171+
141172

142173
class MONGO_DBGlue(DBGlue):
143174

@@ -216,6 +247,24 @@ def delete_program(self, program_obj):
216247
def set_datetime(self, obj, dt):
217248
obj.date_time = dt
218249

250+
def count_users(self):
251+
return self.client.gldb['User'].count_documents({})
252+
253+
def get_setting(self, key):
254+
setting = mongo_models.Setting.find({"key": key}).first_or_none()
255+
if not setting or setting.value == 'NOT SET':
256+
return None
257+
return setting.value
258+
259+
def set_setting(self, key, value):
260+
setting = mongo_models.Setting.find({"key": key}).first_or_none()
261+
if setting is None:
262+
setting = mongo_models.Setting(key=key, value=value)
263+
else:
264+
setting.value = value
265+
setting.save()
266+
267+
219268
def setupDB():
220269
""" If MONGO_URL is set, use MongoDB, otherwise use NDB """
221270
if MONGO_URL:

src/mongo_models.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
def init_client(MONGO_URL):
1111
# Wrap the app in middleware.
1212
client = MongoClient(MONGO_URL)
13-
init_bunnet(database=client.gldb, document_models=[User, Folder, Program])
13+
init_bunnet(database=client.gldb, document_models=[User, Folder, Program, Setting])
1414
return client
1515

1616
class User(Document):
@@ -55,3 +55,9 @@ def datetime(self):
5555
def datetime(self, value):
5656
self.date_time = value
5757

58+
59+
class Setting(Document):
60+
"""Key-value settings store"""
61+
key: Indexed(str, unique=True)
62+
value: str = 'NOT SET'
63+

0 commit comments

Comments
 (0)