@@ -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
7691class 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
142173class 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+
219268def setupDB ():
220269 """ If MONGO_URL is set, use MongoDB, otherwise use NDB """
221270 if MONGO_URL :
0 commit comments