From 0f0d44e596bd821f27877033e05e94998118e86a Mon Sep 17 00:00:00 2001 From: Simon Li Date: Thu, 9 Jul 2020 14:51:21 +0100 Subject: [PATCH] Use appdirs for omero user dir --- setup.py | 1 + src/omero/util/__init__.py | 33 +++++++++++++++--------------- test/unit/clitest/test_sessions.py | 4 ++-- test/unit/test_util.py | 6 +++--- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/setup.py b/setup.py index 8ec5947c8..c84888d80 100644 --- a/setup.py +++ b/setup.py @@ -210,6 +210,7 @@ def read(fname): }, python_requires='>=3', install_requires=[ + 'appdirs', 'future', 'numpy', 'Pillow', diff --git a/src/omero/util/__init__.py b/src/omero/util/__init__.py index f6197e424..c52cf0476 100644 --- a/src/omero/util/__init__.py +++ b/src/omero/util/__init__.py @@ -12,6 +12,7 @@ from future.utils import native_str from past.utils import old_div from builtins import object +from appdirs import user_data_dir, user_cache_dir import os import sys import Ice @@ -29,6 +30,8 @@ import omero.ObjectFactoryRegistrar as ofr from omero.util.decorators import locked +from omero_version import omero_version + import omero_ext.path as path LOGDIR = os.path.join("var", "log") @@ -42,6 +45,9 @@ orig_stdout = sys.stdout orig_stderr = sys.stderr +# Application name, Owner (Windows only), Major version +APPDIR_DEFAULTS = ('OMERO.cli', 'OME', omero_version.split('.')[0]) + def make_logname(self): """ @@ -838,29 +844,24 @@ def get_omero_userdir(): if omero_userdir: return path.path(omero_userdir) else: - return old_div(path.path(get_user_dir()), "omero") + return path.path(user_data_dir(*APPDIR_DEFAULTS)) def get_omero_user_cache_dir(): """Returns the OMERO user cache directory""" - return get_omero_userdir() + omero_userdir = os.environ.get('OMERO_USERDIR', None) + if omero_userdir: + return path.path(omero_userdir) + else: + return path.path(user_cache_dir(*APPDIR_DEFAULTS)) + + +# Other application directories may be added in future, see +# https://pypi.org/project/appdirs/ def get_user_dir(): - exceptions_to_handle = (ImportError) - try: - from pywintypes import com_error - from win32com.shell import shellcon, shell - exceptions_to_handle = (ImportError, com_error) - homeprop = shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0) - except exceptions_to_handle: - homeprop = os.path.expanduser("~") - - if "~" == homeprop: - # ticket:5583 - raise Exception("Unexpanded '~' from expanduser: see ticket:5583") - - return homeprop + return get_omero_userdir() def edit_path(path_or_obj, start_text): diff --git a/test/unit/clitest/test_sessions.py b/test/unit/clitest/test_sessions.py index 688c4c348..a4fbda1e6 100644 --- a/test/unit/clitest/test_sessions.py +++ b/test/unit/clitest/test_sessions.py @@ -53,7 +53,7 @@ def testDefaultSessionsDir(self): # Default store sessions dir is under user dir store = self.cli.controls['sessions'].store(None) - assert store.dir == path(get_user_dir()) / 'omero' / 'sessions' + assert store.dir == path(get_user_dir()) / 'sessions' @pytest.mark.parametrize('environment', ( {'OMERO_USERDIR': None, @@ -115,5 +115,5 @@ def testCustomSessionsDir( elif environment.get('OMERO_USERDIR'): sdir = path(tmpdir) / environment.get('OMERO_USERDIR') / 'sessions' else: - sdir = path(get_user_dir()) / 'omero' / 'sessions' + sdir = path(get_user_dir()) / 'sessions' assert store.dir == str(sdir) diff --git a/test/unit/test_util.py b/test/unit/test_util.py index 7a5a1fe9f..f7d8cdd18 100644 --- a/test/unit/test_util.py +++ b/test/unit/test_util.py @@ -232,7 +232,7 @@ def testTmpdirEnvironment(self, monkeypatch, tmpdir, environment): elif environment.get('OMERO_USERDIR'): tdir = tmpdir / environment.get('OMERO_USERDIR') / "tmp" else: - tdir = path(get_user_dir()) / "omero" / "tmp" + tdir = path(get_user_dir()) / "tmp" assert value == str(tdir) @@ -244,7 +244,7 @@ def testTmpdir2805_1(self, monkeypatch, tmpdir): tmpfile.write('') value = pytest.deprecated_call(manager.tmpdir) - assert value == path(get_user_dir()) / "omero" / "tmp" + assert value == path(get_user_dir()) / "tmp" def testTmpdir2805_2(self, monkeypatch, tmpdir): @@ -256,7 +256,7 @@ def testTmpdir2805_2(self, monkeypatch, tmpdir): tmpfile.write('') value = pytest.deprecated_call(manager.tmpdir) - assert value == path(get_user_dir()) / "omero" / "tmp" + assert value == path(get_user_dir()) / "tmp" class TestImageUtils(object):