From 9ea0164f1f84f92deea7a0bde0343e2f0e485525 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Tue, 27 Dec 2022 12:50:14 -0800 Subject: [PATCH] Try to import berkeleydb if bsddb3 isn't found. berkelydb is usable for python >= 3.6 and required for python >= 3.10. See https://www.jcea.es/programacion/pybsddb.htm. --- gramps/grampsapp.py | 13 ++++++++++--- gramps/gui/aboutdialog.py | 6 +++++- gramps/gui/logger/_errorreportassistant.py | 6 +++++- gramps/plugins/db/bsddb/bsddbtxn.py | 5 ++++- gramps/plugins/db/bsddb/cursor.py | 17 ++++++++++------- gramps/plugins/db/bsddb/read.py | 15 +++++++++------ gramps/plugins/db/bsddb/summary.py | 6 ++++-- gramps/plugins/db/bsddb/test/cursor_test.py | 6 ++++-- gramps/plugins/db/bsddb/undoredo.py | 13 ++++++++----- gramps/plugins/db/bsddb/upgrade.py | 6 ++++-- gramps/plugins/db/bsddb/write.py | 10 ++++++++-- gramps/plugins/gramplet/leak.py | 11 +++++++---- 12 files changed, 78 insertions(+), 36 deletions(-) diff --git a/gramps/grampsapp.py b/gramps/grampsapp.py index 2163edc8a..fed06207d 100644 --- a/gramps/grampsapp.py +++ b/gramps/grampsapp.py @@ -325,9 +325,16 @@ def show_settings(): .replace('(', '').replace(')', '') bsddb_location_str = bsddb.__file__ except: - bsddb_str = 'not found' - bsddb_db_str = 'not found' - bsddb_location_str = 'not found' + try: + import berkeleydb as bsddb + bsddb_str = bsddb.__version__ + bsddb_db_str = str(bsddb.db.version()).replace(', ', '.')\ + .replace('(', '').replace(')', '') + bsddb_location_str = bsddb.__file__ + except: + bsddb_str = 'not found' + bsddb_db_str = 'not found' + bsddb_location_str = 'not found' try: import sqlite3 diff --git a/gramps/gui/aboutdialog.py b/gramps/gui/aboutdialog.py index f2b28a036..2afb77816 100644 --- a/gramps/gui/aboutdialog.py +++ b/gramps/gui/aboutdialog.py @@ -68,7 +68,11 @@ try: import bsddb3 as bsddb ## ok, in try/except BSDDB_STR = ellipses(str(bsddb.__version__) + " " + str(bsddb.db.version())) except: - BSDDB_STR = 'not found' + try: + import berkeleydb as bsddb + BSDDB_STR = ellipses(str(bsddb.__version__) + " " + str(bsddb.db.version())) + except: + BSDDB_STR = 'not found' try: import sqlite3 diff --git a/gramps/gui/logger/_errorreportassistant.py b/gramps/gui/logger/_errorreportassistant.py index af9979693..1924701e2 100644 --- a/gramps/gui/logger/_errorreportassistant.py +++ b/gramps/gui/logger/_errorreportassistant.py @@ -37,7 +37,11 @@ try: import bsddb3 as bsddb # ok, in try/except BSDDB_STR = str(bsddb.__version__) + " " + str(bsddb.db.version()) except: - BSDDB_STR = 'not found' + try: + import berkeleydb as bsddb + BSDDB_STR = str(bsddb.__version__) + " " + str(bsddb.db.version()) + except: + BSDDB_STR = 'not found' try: import sqlite3 diff --git a/gramps/plugins/db/bsddb/bsddbtxn.py b/gramps/plugins/db/bsddb/bsddbtxn.py index 7af99494e..0f3fe0de4 100644 --- a/gramps/plugins/db/bsddb/bsddbtxn.py +++ b/gramps/plugins/db/bsddb/bsddbtxn.py @@ -218,7 +218,10 @@ class BSDDBTxn: # test code if __name__ == "__main__": print("1") - from bsddb3 import db, dbshelve + try: + from bsddb3 import db, dbshelve + except: + from berkeleydb import db, dbshelve print("2") x = db.DBEnv() print("3") diff --git a/gramps/plugins/db/bsddb/cursor.py b/gramps/plugins/db/bsddb/cursor.py index 1eecffc03..4ddd9a64c 100644 --- a/gramps/plugins/db/bsddb/cursor.py +++ b/gramps/plugins/db/bsddb/cursor.py @@ -29,14 +29,17 @@ from pickle import dumps, loads try: from bsddb3 import db except: + try: + from berkeleydb import db + except: # FIXME: make this more abstract to deal with other backends - class db: - DB_RMW = 0 - DB_FIRST = 0 - DB_LAST = 0 - DB_CURRENT = 0 - DB_PREV = 0 - DB_NEXT = 0 + class db: + DB_RMW = 0 + DB_FIRST = 0 + DB_LAST = 0 + DB_CURRENT = 0 + DB_PREV = 0 + DB_NEXT = 0 #------------------------------------------------------------------------- # diff --git a/gramps/plugins/db/bsddb/read.py b/gramps/plugins/db/bsddb/read.py index 57906b795..6b0b6a7a8 100644 --- a/gramps/plugins/db/bsddb/read.py +++ b/gramps/plugins/db/bsddb/read.py @@ -41,12 +41,15 @@ from functools import partial try: from bsddb3 import db except: - # FIXME: make this more abstract to deal with other backends - class db: - DBRunRecoveryError = 0 - DBAccessError = 0 - DBPageNotFoundError = 0 - DBInvalidArgError = 0 + try: + from berkeleydb import db + except: + # FIXME: make this more abstract to deal with other backends + class db: + DBRunRecoveryError = 0 + DBAccessError = 0 + DBPageNotFoundError = 0 + DBInvalidArgError = 0 import re import logging diff --git a/gramps/plugins/db/bsddb/summary.py b/gramps/plugins/db/bsddb/summary.py index e73908128..a911d666f 100644 --- a/gramps/plugins/db/bsddb/summary.py +++ b/gramps/plugins/db/bsddb/summary.py @@ -22,8 +22,10 @@ ## specific to bsddb import os -from bsddb3 import dbshelve, db - +try: + from bsddb3 import dbshelve, db +except: + from berkeleydb import db, dbshelve from gramps.gen.db import META, PERSON_TBL from gramps.gen.db.dbconst import BDBVERSFN diff --git a/gramps/plugins/db/bsddb/test/cursor_test.py b/gramps/plugins/db/bsddb/test/cursor_test.py index e90e16fd4..1411aca43 100644 --- a/gramps/plugins/db/bsddb/test/cursor_test.py +++ b/gramps/plugins/db/bsddb/test/cursor_test.py @@ -23,8 +23,10 @@ import os import tempfile import shutil -from bsddb3 import dbshelve, db - +try: + from bsddb3 import dbshelve, db +except: + from berkeleydb import db, dbshelve from ..read import DbBsddbTreeCursor class Data: diff --git a/gramps/plugins/db/bsddb/undoredo.py b/gramps/plugins/db/bsddb/undoredo.py index 53ab39a60..729f21eb9 100644 --- a/gramps/plugins/db/bsddb/undoredo.py +++ b/gramps/plugins/db/bsddb/undoredo.py @@ -36,12 +36,15 @@ from collections import deque try: from bsddb3 import db except: + try: + from berkeleydb import db + except: # FIXME: make this more abstract to deal with other backends - class db: - DBRunRecoveryError = 0 - DBAccessError = 0 - DBPageNotFoundError = 0 - DBInvalidArgError = 0 + class db: + DBRunRecoveryError = 0 + DBAccessError = 0 + DBPageNotFoundError = 0 + DBInvalidArgError = 0 from gramps.gen.const import GRAMPS_LOCALE as glocale _ = glocale.translation.gettext diff --git a/gramps/plugins/db/bsddb/upgrade.py b/gramps/plugins/db/bsddb/upgrade.py index 48fd189dd..6861fcd5c 100644 --- a/gramps/plugins/db/bsddb/upgrade.py +++ b/gramps/plugins/db/bsddb/upgrade.py @@ -32,8 +32,10 @@ import os import re import time import logging -from bsddb3 import db - +try: + from bsddb3 import db +except: + from berkeleydb import db #------------------------------------------------------------------------- # # Gramps modules diff --git a/gramps/plugins/db/bsddb/write.py b/gramps/plugins/db/bsddb/write.py index f1743fd21..809b77383 100644 --- a/gramps/plugins/db/bsddb/write.py +++ b/gramps/plugins/db/bsddb/write.py @@ -40,8 +40,14 @@ import logging from sys import maxsize, getfilesystemencoding, version_info from ast import literal_eval as safe_eval -from bsddb3 import dbshelve, db -from bsddb3.db import DB_CREATE, DB_AUTO_COMMIT, DB_DUP, DB_DUPSORT, DB_RDONLY +try: + from bsddb3 import dbshelve, db +except: + from berkeleydb import db, dbshelve +try: + from bsddb3.db import DB_CREATE, DB_AUTO_COMMIT, DB_DUP, DB_DUPSORT, DB_RDONLY +except: + from berkeleydb.db import DB_CREATE, DB_AUTO_COMMIT, DB_DUP, DB_DUPSORT, DB_RDONLY DBFLAGS_O = DB_CREATE | DB_AUTO_COMMIT # Default flags for database open DBFLAGS_R = DB_RDONLY # Flags to open a database read-only diff --git a/gramps/plugins/gramplet/leak.py b/gramps/plugins/gramplet/leak.py index 949531cf7..0c09c0c4e 100644 --- a/gramps/plugins/gramplet/leak.py +++ b/gramps/plugins/gramplet/leak.py @@ -184,10 +184,13 @@ class Leak(Gramplet): try: from bsddb3.db import DBError except: - class DBError(Exception): - """ - Dummy. - """ + try: + from berkeleydb.db import DBError + except: + class DBError(Exception): + """ + Dummy. + """ self.parent = self.top.get_toplevel() progress = ProgressMeter( _('Updating display...'), '', parent=self.parent, can_cancel=True) -- 2.37.1 (Apple Git-137.1)