Skip to content

Commit c6dbfd4

Browse files
committed
Try to solve issues with open db connections
1 parent 1a5bea9 commit c6dbfd4

File tree

4 files changed

+80
-47
lines changed

4 files changed

+80
-47
lines changed

gramps_webapi/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
#
1919

2020
# make sure to match this version with the one in apispec.yaml
21-
__version__ = "2.3.0"
21+
__version__ = "2.3.1"

gramps_webapi/api/tasks.py

Lines changed: 74 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,16 @@ def import_file(
181181
db_handle = get_db_outside_request(
182182
tree=tree, view_private=True, readonly=True, user_id=user_id
183183
)
184-
run_import(
185-
db_handle=db_handle,
186-
file_name=file_name,
187-
extension=extension.lower(),
188-
delete=delete,
189-
task=self,
190-
)
184+
try:
185+
run_import(
186+
db_handle=db_handle,
187+
file_name=file_name,
188+
extension=extension.lower(),
189+
delete=delete,
190+
task=self,
191+
)
192+
finally:
193+
db_handle.close()
191194
update_usage_people(tree=tree, user_id=user_id)
192195
_search_reindex_incremental(
193196
tree=tree,
@@ -204,8 +207,14 @@ def export_db(
204207
db_handle = get_db_outside_request(
205208
tree=tree, view_private=view_private, readonly=True, user_id=user_id
206209
)
207-
prepared_options = prepare_options(db_handle, options)
208-
file_name, file_type = run_export(db_handle, extension, prepared_options, task=self)
210+
try:
211+
prepared_options = prepare_options(db_handle, options)
212+
file_name, file_type = run_export(
213+
db_handle, extension, prepared_options, task=self
214+
)
215+
finally:
216+
db_handle.close()
217+
209218
extension = file_type.lstrip(".")
210219
return {
211220
"file_name": file_name,
@@ -227,12 +236,16 @@ def generate_report(
227236
db_handle = get_db_outside_request(
228237
tree=tree, view_private=view_private, readonly=True, user_id=user_id
229238
)
230-
file_name, file_type = run_report(
231-
db_handle=db_handle,
232-
report_id=report_id,
233-
report_options=options,
234-
language=locale,
235-
)
239+
try:
240+
file_name, file_type = run_report(
241+
db_handle=db_handle,
242+
report_id=report_id,
243+
report_options=options,
244+
language=locale,
245+
)
246+
finally:
247+
db_handle.close()
248+
236249
return {
237250
"file_name": file_name,
238251
"file_type": file_type,
@@ -248,17 +261,21 @@ def export_media(
248261
db_handle = get_db_outside_request(
249262
tree=tree, view_private=view_private, readonly=True, user_id=user_id
250263
)
251-
media_handler = get_media_handler(db_handle, tree=tree)
252-
export_path = current_app.config["EXPORT_DIR"]
253-
os.makedirs(export_path, exist_ok=True)
254-
file_name = f"{uuid.uuid4()}.zip"
255-
zip_filename = os.path.join(export_path, file_name)
256-
media_handler.create_file_archive(
257-
db_handle=db_handle,
258-
zip_filename=zip_filename,
259-
include_private=view_private,
260-
progress_cb=progress_callback_count(self),
261-
)
264+
try:
265+
media_handler = get_media_handler(db_handle, tree=tree)
266+
export_path = current_app.config["EXPORT_DIR"]
267+
os.makedirs(export_path, exist_ok=True)
268+
file_name = f"{uuid.uuid4()}.zip"
269+
zip_filename = os.path.join(export_path, file_name)
270+
media_handler.create_file_archive(
271+
db_handle=db_handle,
272+
zip_filename=zip_filename,
273+
include_private=view_private,
274+
progress_cb=progress_callback_count(self),
275+
)
276+
finally:
277+
db_handle.close()
278+
262279
file_size = os.path.getsize(zip_filename)
263280
return {
264281
"file_name": file_name,
@@ -275,14 +292,17 @@ def import_media_archive(
275292
db_handle = get_db_outside_request(
276293
tree=tree, view_private=True, readonly=True, user_id=user_id
277294
)
278-
importer = MediaImporter(
279-
tree=tree,
280-
user_id=user_id,
281-
db_handle=db_handle,
282-
file_name=file_name,
283-
delete=delete,
284-
)
285-
result = importer(progress_cb=progress_callback_count(self))
295+
try:
296+
importer = MediaImporter(
297+
tree=tree,
298+
user_id=user_id,
299+
db_handle=db_handle,
300+
file_name=file_name,
301+
delete=delete,
302+
)
303+
result = importer(progress_cb=progress_callback_count(self))
304+
finally:
305+
db_handle.close()
286306
return result
287307

288308

@@ -299,10 +319,13 @@ def media_ocr(
299319
db_handle = get_db_outside_request(
300320
tree=tree, view_private=view_private, readonly=True, user_id=user_id
301321
)
302-
handler = get_media_handler(db_handle, tree).get_file_handler(
303-
handle, db_handle=db_handle
304-
)
305-
return handler.get_ocr(lang=lang, output_format=output_format)
322+
try:
323+
handler = get_media_handler(db_handle, tree).get_file_handler(
324+
handle, db_handle=db_handle
325+
)
326+
return handler.get_ocr(lang=lang, output_format=output_format)
327+
finally:
328+
db_handle.close()
306329

307330

308331
@shared_task(bind=True)
@@ -311,7 +334,10 @@ def check_repair_database(self, tree: str, user_id: str):
311334
db_handle = get_db_outside_request(
312335
tree=tree, view_private=True, readonly=False, user_id=user_id
313336
)
314-
return check_database(db_handle, progress_cb=progress_callback_count(self))
337+
try:
338+
return check_database(db_handle, progress_cb=progress_callback_count(self))
339+
finally:
340+
db_handle.close()
315341

316342

317343
@shared_task(bind=True)
@@ -328,9 +354,13 @@ def delete_objects(
328354
db_handle = get_db_outside_request(
329355
tree=tree, view_private=True, readonly=False, user_id=user_id
330356
)
331-
delete_all_objects(
332-
db_handle=db_handle,
333-
namespaces=namespaces,
334-
progress_cb=progress_callback_count(self),
335-
)
357+
try:
358+
delete_all_objects(
359+
db_handle=db_handle,
360+
namespaces=namespaces,
361+
progress_cb=progress_callback_count(self),
362+
)
363+
finally:
364+
db_handle.close()
365+
336366
update_usage_people(tree=tree, user_id=user_id)

gramps_webapi/api/util.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,10 @@ def update_usage_people(
614614
readonly=True,
615615
user_id=user_id,
616616
)
617-
usage_people = db_handle.get_number_of_people()
617+
try:
618+
usage_people = db_handle.get_number_of_people()
619+
finally:
620+
db_handle.close()
618621
set_tree_usage(tree, usage_people=usage_people)
619622
return usage_people
620623

gramps_webapi/data/apispec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ info:
88
99
1010
* More about Gramps and the numerous features it provides for genealogists can be found at https://gramps-project.org
11-
version: "2.3.0" # make sure to match this version with the one in _version.py
11+
version: "2.3.1" # make sure to match this version with the one in _version.py
1212
license:
1313
name: "GNU Affero General Public License v3.0"
1414
url: "http://www.gnu.org/licenses/agpl-3.0.html"

0 commit comments

Comments
 (0)