5
5
from tinydb import TinyDB , Query
6
6
from abc import ABC , abstractmethod
7
7
8
+ from libreforms_fastapi .utils .logging import set_logger
9
+
8
10
class CollectionDoesNotExist (Exception ):
9
11
"""Exception raised when attempting to access a collection that does not exist."""
10
12
def __init__ (self , form_name ):
@@ -15,6 +17,10 @@ class ManageDocumentDB(ABC):
15
17
def __init__ (self , config : dict , timezone : ZoneInfo ):
16
18
self .config = config
17
19
20
+ # Set default log_name if not already set by a subclass
21
+ if not hasattr (self , 'log_name' ):
22
+ self .log_name = "document_db.log"
23
+
18
24
# Here we'll set metadata field names
19
25
self .document_id_field = "_document_id"
20
26
self .is_deleted_field = "_is_deleted"
@@ -102,10 +108,20 @@ def restore_database_from_backup(self, form_name:str, backup_filename:str, backu
102
108
103
109
104
110
class ManageTinyDB (ManageDocumentDB ):
105
- def __init__ (self , config : dict , timezone : ZoneInfo , db_path : str = "instance/" ):
111
+ def __init__ (self , config : dict , timezone : ZoneInfo , db_path : str = "instance/" , use_logger = True , env = "development" ):
106
112
self .db_path = db_path
107
113
os .makedirs (self .db_path , exist_ok = True )
108
114
115
+ self .log_name = "tinydb.log"
116
+ self .use_logger = use_logger
117
+
118
+ if self .use_logger :
119
+ self .logger = set_logger (
120
+ environment = env ,
121
+ log_file_name = self .log_name ,
122
+ namespace = self .log_name
123
+ )
124
+
109
125
super ().__init__ (config , timezone )
110
126
111
127
# Here we create a Query object to ship with the class
@@ -162,19 +178,32 @@ def create_document(self, form_name:str, json_data, metadata={}):
162
178
# document_id = self.databases[form_name].insert(data_dict)
163
179
_ = self .databases [form_name ].insert (data_dict )
164
180
181
+ if self .use_logger :
182
+ self .logger .info (f"Inserted document for { form_name } with document_id { document_id } " )
183
+
165
184
return document_id
166
185
167
186
def update_document (self , form_name :str , json_data , metadata = {}):
168
187
"""Updates existing form in specified form's database."""
188
+
189
+ # Placeholder for logger
190
+
169
191
pass
170
192
171
193
def sign_document (self , form_name :str , json_data , metadata = {}):
172
194
"""Manage signatures existing form in specified form's database."""
195
+
196
+ # Placeholder for logger
197
+
198
+
173
199
pass
174
200
175
201
176
202
def approve_document (self , form_name :str , json_data , metadata = {}):
177
203
"""Manage approval for existing form in specified form's database."""
204
+
205
+ # Placeholder for logger
206
+
178
207
pass
179
208
180
209
@@ -190,11 +219,15 @@ def delete_document(self, form_name:str, search_query, permanent:bool=False):
190
219
self ._check_form_exists (form_name )
191
220
if permanent :
192
221
self .databases [form_name ].remove (search_query )
222
+ # Placeholder for logger
193
223
else :
194
224
# Perform a soft delete
195
225
for doc_id in [d .doc_id for d in self .databases [form_name ].search (search_query )]:
196
226
self .databases [form_name ].update ({self .is_deleted_field : True }, doc_ids = [doc_id ])
197
227
228
+ # Placeholder for logger
229
+
230
+
198
231
def get_all_documents (self , form_name :str , exclude_deleted = True ):
199
232
"""Retrieves all entries from the specified form's database."""
200
233
self ._check_form_exists (form_name )
@@ -208,6 +241,7 @@ def get_one_document(self, form_name:str, search_query, exclude_deleted=True):
208
241
self ._check_form_exists (form_name )
209
242
if exclude_deleted :
210
243
search_query &= Query ()[self .is_deleted_field ] == False
244
+
211
245
return self .databases [form_name ].get (search_query )
212
246
213
247
def restore_document (self , form_name :str , search_query ):
@@ -216,6 +250,8 @@ def restore_document(self, form_name:str, search_query):
216
250
for doc_id in [d .doc_id for d in self .databases [form_name ].search (search_query )]:
217
251
self .databases [form_name ].update ({self .is_deleted_field : False }, doc_ids = [doc_id ])
218
252
253
+ # Placeholder for logger
254
+
219
255
def backup_database (self , form_name :str ):
220
256
"""Creates a backup of the specified form's database."""
221
257
self ._check_form_exists (form_name )
@@ -232,6 +268,9 @@ def backup_database(self, form_name:str):
232
268
source_path = self ._get_db_path (form_name )
233
269
shutil .copyfile (source_path , backup_path )
234
270
271
+ if self .use_logger :
272
+ self .logger .info (f"Successfully backed up { form_name } collection to { backup_path } " )
273
+
235
274
return backup_path
236
275
237
276
def restore_database_from_backup (self , form_name :str , backup_filename :str , backup_before_overwriting :bool = True ):
@@ -247,7 +286,14 @@ def restore_database_from_backup(self, form_name:str, backup_filename:str, backu
247
286
self .backup_database (form_name )
248
287
249
288
shutil .copyfile (backup_path , self ._get_db_path (form_name ))
289
+
290
+ if self .use_logger :
291
+ self .logger .info (f"Successfully restored { form_name } collection to from backup { backup_path } " )
292
+
250
293
else :
294
+ if self .use_logger :
295
+ self .logger .error (f"Failed to restore { form_name } collection from backup - { backup_path } does not exist" )
296
+
251
297
raise FileNotFoundError ("Backup file does not exist." )
252
298
253
299
# Reinitialize the databse instances
0 commit comments