From be7c4d209874cfb2e8fb67f63fd2c334c71dc502 Mon Sep 17 00:00:00 2001 From: Dima Gerasimov Date: Sat, 11 Apr 2020 20:32:26 +0100 Subject: [PATCH] WIP on using ~/.config/my/my.config --- my/__init__.py | 12 ------------ my/init.py | 39 +++++++++++++++++++++++++++++++++++++++ setup.py | 1 + 3 files changed, 40 insertions(+), 12 deletions(-) delete mode 100644 my/__init__.py create mode 100644 my/init.py diff --git a/my/__init__.py b/my/__init__.py deleted file mode 100644 index 48d26dd..0000000 --- a/my/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# TODO how to make it mypy friendly? maybe defensive import? or mypy config? or interface file? - -try: - import mycfg -except ImportError: - import warnings - warnings.warn("mycfg package isn't found! That might result in issues") - - from . import mycfg_stub as mycfg # type: ignore[no-redef] - import sys - sys.modules['mycfg'] = mycfg - del sys diff --git a/my/init.py b/my/init.py new file mode 100644 index 0000000..d3638de --- /dev/null +++ b/my/init.py @@ -0,0 +1,39 @@ +''' +A hook to insert user's config directory into Python's search path. + +- Ideally that would be in __init__.py (so it's executed without having to import explicityly) + But, with namespace packages, we can't have __init__.py in the parent subpackage + (see http://python-notes.curiousefficiency.org/en/latest/python_concepts/import_traps.html#the-init-py-trap) + + Please let me know if you are aware of a better way of dealing with this! +''' + + +# separate function to present namespace pollution +def setup_config(): + from pathlib import Path + import sys + import warnings + + # TODO use appdir?? + cfg_dir = Path('~/.config').expanduser() + mycfg_dir = cfg_dir / 'my' + + if not mycfg_dir.exists(): + warnings.warn(f"my.config package isn't found! (expected at {mycfg_dir}). This might result in issues.") + from . import mycfg_stub as mycfg + sys.modules['my.config'] = mycfg + else: + mp = str(mycfg_dir) + if mp not in sys.path: + sys.path.insert(0, mp) + print("UPDATED PATH") # TODO FIXME remove + + try: + import my.config + except ImportError as ex: + warnings.warn(f"Importing my.config failed! (error: {ex}). This might result in issues.") + + +setup_config() +del setup_config diff --git a/setup.py b/setup.py index 8ed5a12..489e1a8 100644 --- a/setup.py +++ b/setup.py @@ -37,6 +37,7 @@ def main(): 'testing': [ 'pytest', 'pytz', + 'pylint', ], }, )