|
.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') |
|
|