From 5e3b12139eec5e40ed378b0d9345feed0aeed1c7 Mon Sep 17 00:00:00 2001 From: fazmulla66-bot <251039380+fazmulla66-bot@users.noreply.github.com> Date: Wed, 9 Sep 2026 14:49:28 +0200 Subject: [PATCH] fix: honor THINGSDB before database discovery --- tests/test_database_filepath.py | 30 ++++++++++++++++++++++++++++++ things/database.py | 22 +++++++++++++++++----- 2 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 tests/test_database_filepath.py diff --git a/tests/test_database_filepath.py b/tests/test_database_filepath.py new file mode 100644 index 0000000..a808992 --- /dev/null +++ b/tests/test_database_filepath.py @@ -0,0 +1,30 @@ +"""Tests for resolving the Things database path.""" + +import os +from unittest import mock + +from things import database + + +def test_explicit_thingsdb_bypasses_directory_discovery(): + configured_path = "/tmp/Things Database.thingsdatabase/main.sqlite" + + with mock.patch.dict(os.environ, {"THINGSDB": configured_path}): + with mock.patch.object(database.glob, "iglob") as discovery: + result = database.resolve_default_filepath() + + assert result == configured_path + discovery.assert_not_called() + + +def test_database_discovery_is_used_without_thingsdb(): + discovered_path = "/tmp/ThingsData-test/Things Database.thingsdatabase/main.sqlite" + + with mock.patch.dict(os.environ, {}, clear=True): + with mock.patch.object( + database.glob, "iglob", return_value=iter([discovered_path]) + ) as discovery: + result = database.resolve_default_filepath() + + assert result == discovered_path + discovery.assert_called_once() diff --git a/things/database.py b/things/database.py index fd7071b..f6a0626 100755 --- a/things/database.py +++ b/things/database.py @@ -28,13 +28,25 @@ "/Things Database.thingsdatabase/main.sqlite" ) -try: - DEFAULT_FILEPATH = next(glob.iglob(os.path.expanduser(DEFAULT_FILEPATH_31616502))) -except StopIteration: - DEFAULT_FILEPATH = os.path.expanduser(DEFAULT_FILEPATH_31516502) - ENVIRONMENT_VARIABLE_WITH_FILEPATH = "THINGSDB" + +def resolve_default_filepath(): + """Resolve the database path, preferring an explicit environment override.""" + configured_filepath = os.getenv(ENVIRONMENT_VARIABLE_WITH_FILEPATH) + if configured_filepath: + return os.path.expanduser(configured_filepath) + + try: + return next( + glob.iglob(os.path.expanduser(DEFAULT_FILEPATH_31616502)) + ) + except StopIteration: + return os.path.expanduser(DEFAULT_FILEPATH_31516502) + + +DEFAULT_FILEPATH = resolve_default_filepath() + # Translate app language to database language START_TO_FILTER = {