From 24e42f47b926003ce5a5d8da351085c5974efdfb Mon Sep 17 00:00:00 2001 From: dtomlinson Date: Fri, 29 Nov 2019 02:35:53 +0000 Subject: [PATCH] adding libraries --- python/binaries/.gitignore | 129 ++++++++++++++++++ .../libraries/utility-libraries/libraries.py | 37 +++++ 2 files changed, 166 insertions(+) create mode 100644 python/binaries/.gitignore create mode 100644 python/libraries/utility-libraries/libraries.py diff --git a/python/binaries/.gitignore b/python/binaries/.gitignore new file mode 100644 index 0000000..b6e4761 --- /dev/null +++ b/python/binaries/.gitignore @@ -0,0 +1,129 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/python/libraries/utility-libraries/libraries.py b/python/libraries/utility-libraries/libraries.py new file mode 100644 index 0000000..82f6d7c --- /dev/null +++ b/python/libraries/utility-libraries/libraries.py @@ -0,0 +1,37 @@ +import sys +from typing import Any, TypeVar, Type + + +config_inst_t = TypeVar('config_inst_t', bound='config.config.Config') + + +def export(fn: callable) -> callable: + mod = sys.modules[fn.__module__] + if hasattr(mod, '__all__'): + mod.__all__.append(fn.__name__) + else: + mod.__all__ = [fn.__name__] + return fn + + +def set_config( + config_inst: Type[config_inst_t], + key: str, + default: str = None, + cast: Any = None, +) -> None: + """Sets the config variable on the instance of a class. + + Parameters + ---------- + config_inst : Type[config_inst_t] + Instance of the config class. + key : str + The key referencing the config variable. + default : str, optional + The default value. + cast : Any, optional + The type of the variable. + """ + config_var = key.lower().replace('.', '_') + setattr(config_inst, config_var, config_inst.get(key, default, cast))