| .PHONY: clean dirs virtualenv lint requirements push pull reproduce |
|
|
| ################################################################################# |
| # GLOBALS # |
| ################################################################################# |
|
|
| PROJECT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) |
| PYTHON_INTERPRETER = python3 |
|
|
| ################################################################################# |
| # COMMANDS # |
| ################################################################################# |
|
|
| ## Create virtualenv. |
| ## Activate with the command: |
| ## source env/bin/activate |
| virtualenv: |
| $(PYTHON_INTERPRETER) -m venv env |
| $(info "Activate with the command 'source env/bin/activate'") |
|
|
| ## Install Python Dependencies. |
| ## Make sure you activate the virtualenv first! |
| requirements: |
| $(PYTHON_INTERPRETER) -m pip install -U pip setuptools wheel |
| $(PYTHON_INTERPRETER) -m pip install -r requirements.txt |
|
|
| ## Create directories that are ignored by git but required for the project |
| dirs: |
| mkdir -p data/raw data/processed models |
|
|
| ## Delete all compiled Python files |
| clean: |
| find . -type f -name "*.py[co]" -delete |
| find . -type d -name "__pycache__" -delete |
|
|
| ## To use the pre-commit hooks |
| pre-commit-install: |
| pre-commit install |
|
|
| setup-data-validation: |
| cd src/data; great_expectations -y init; great_expectations datasource new |
|
|
| run-data-validation: |
| cd src/data; python data_validation.py |
|
|
| ## Lint using flake8 |
| lint: |
| flake8 src |
|
|
| ## Upload Data to default DVC remote |
| push: |
| dvc push -r origin |
|
|
| ## Download Data from default DVC remote |
| pull: |
| dvc pull -r origin |
|
|
| ## Reproduce the DVC pipeline - recompute any modified outputs such as processed data or trained models |
| reproduce: |
| dvc repro |
|
|
| ################################################################################# |
| # PROJECT RULES # |
| ################################################################################# |
|
|
|
|
|
|
| ################################################################################# |
| # Self Documenting Commands # |
| ################################################################################# |
|
|
| .DEFAULT_GOAL := reproduce |
|
|
| # Inspired by <http: |
| # sed script explained: |
| # /^##/: |
| # * save line in hold space |
| # * purge line |
| # * Loop: |
| # * append newline + line to hold space |
| # * go to next line |
| # * if line starts with doc comment, strip comment character off and loop |
| # * remove target prerequisites |
| # * append hold space (+ newline) to line |
| # * replace newline plus comments by `---` |
| # * print line |
| # Separate expressions are necessary because labels cannot be delimited by |
| # semicolon; see <http: |
| .PHONY: help |
| help: |
| @echo "$$(tput bold)Available rules:$$(tput sgr0)" |
| @echo |
| @sed -n -e "/^## / Missing" $Missing \ |
| | LC_ALL='C' sort --ignore-case \ |
| | awk -F '---' \ |
| -v ncol=$$(tput cols) \ |
| -v indent=19 \ |
| -v col_on="$$(tput setaf 6)" \ |
| -v col_off="$$(tput sgr0)" \ |
| 'Missing \ |
| printf "%s ", words[i]; \ |
| } \ |
| printf "\n"; \ |
| }' \ |
| | more $(shell test $(shell uname) = Darwin && echo '--no-init --raw-control-chars') |
|
|