From 3c6e4c8a8664a8dfac8913d18c2d97a632df2496 Mon Sep 17 00:00:00 2001 From: Holger Frey Date: Tue, 4 Jul 2023 11:30:29 +0200 Subject: [PATCH] setup of infrastructure --- Makefile | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ pytest.ini | 2 ++ requirements.txt | 10 ++++++ 3 files changed, 97 insertions(+) create mode 100644 Makefile create mode 100644 pytest.ini create mode 100644 requirements.txt diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..87450eb --- /dev/null +++ b/Makefile @@ -0,0 +1,85 @@ +.PHONY: clean clean-build clean-docs clean-pyc clean-test coverage coverall devenv docs help install lint nox publish prepareenv repo serve-docs test testall testfunctional tox venvexists +.DEFAULT_GOAL := help + +define BROWSER_PYSCRIPT +import os, webbrowser, sys + +try: + from urllib import pathname2url +except: + from urllib.request import pathname2url + +webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1]))) +endef +export BROWSER_PYSCRIPT + +define PRINT_HELP_PYSCRIPT +import re, sys + +for line in sys.stdin: + match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line) + if match: + target, help = match.groups() + print("%-20s %s" % (target, help)) +endef +export PRINT_HELP_PYSCRIPT + +BROWSER := python -c "$$BROWSER_PYSCRIPT" + +help: + @python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST) + + +venvexists: ## helper to check if a virtual environment exists + @test -x .venv/bin/python || { echo "No virtual environment found, please run 'make devenv'"; exit 1; } + +clean: clean-build clean-docs clean-pyc clean-test ## remove all build, test, coverage and Python artifacts + +clean-build: ## remove build artifacts + rm -fr build/ + rm -fr dist/ + rm -fr .eggs/ + find . -name '*.egg-info' -exec rm -fr {} + + find . -name '*.egg' -exec rm -f {} + + +clean-docs: ## remove documentation artifacts + rm -fr site/ + +clean-pyc: ## remove Python file artifacts + find . -name '*.pyc' -exec rm -f {} + + find . -name '*.pyo' -exec rm -f {} + + find . -name '*~' -exec rm -f {} + + find . -name '__pycache__' -exec rm -fr {} + + +clean-test: ## remove test and coverage artifacts + rm -fr .mypy_cache/ + rm -fr .pytest_cache/ + rm -fr .ruff_cache/ + rm -fr .nox/ + rm -fr .tox/ + rm -f .coverage + rm -fr htmlcov/ + +lint: venvexists ## reformat with black and check style with flake8 + .venv/bin/black . + .venv/bin/ruff . + +test: lint ## run tests quickly, stop on first error + .venv/bin/pytest . -x -l --last-failed + +testall: lint ## run all tests + .venv/bin/pytest . -l + +coverage: lint ## full test suite, check code coverage and open coverage report + .venv/bin/pytest . -l + .venv/bin/coverage html + $(BROWSER) htmlcov/index.html + +install: venvexists ## install updated project.toml + .venv/bin/pip3 install -r requirements.txt + +devenv: ## setup development environment including precommit hooks + rm -fr .venv/ + python3 -m venv --prompt mbp_roc .venv + .venv/bin/pip3 install --upgrade pip wheel + .venv/bin/pip3 install -r requirements.txt \ No newline at end of file diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..5f5fa6a --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +python_files = *.py \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2c426f8 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +pandas +seaborn +scikit-learn +black +ruff +pytest +pytest-cov +pytest-icdiff +pytest-mock +pytest-randomly \ No newline at end of file