File: Makefile

package info (click to toggle)
dataclass-wizard 0.37.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,924 kB
  • sloc: python: 17,189; makefile: 126; javascript: 23
file content (139 lines) | stat: -rw-r--r-- 4,028 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
.PHONY: clean clean-test clean-pyc clean-build docs help bump-patch bump-minor bump-major bump-patch-dry
.DEFAULT_GOAL := help

define BROWSER_PYSCRIPT
import os, webbrowser, sys

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)

init: ## install all dev dependencies for this project
	pip install -e .[dev]
	python -m pip install pre-commit build twine
	pre-commit install

bump-patch:
	bump-my-version bump patch

bump-minor:
	bump-my-version bump minor

bump-major:
	bump-my-version bump major

bump-patch-dry:
	bump-my-version bump patch --dry-run --verbose

clean: clean-build 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' -type f -exec rm -f {} +

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 .tox/
	rm -f .coverage
	rm -fr htmlcov/
	rm -fr .pytest_cache

lint: ## check style with flake8 and pylint
	flake8 dataclass_wizard tests
	pylint dataclass_wizard tests

test: ## run unit tests quickly with the default Python
	pytest -v --cov=dataclass_wizard --cov-report=term-missing tests/unit

test-vb: ## run unit tests (in verbose mode) with the default Python
	pytest -vvv --log-cli-level=DEBUG --capture=tee-sys --cov=dataclass_wizard --cov-report=term-missing tests/unit

test-all: ## run tests on every Python version with tox
	tox

coverage: ## check code coverage with unit tests quickly with the default Python
	coverage run --source dataclass_wizard -m pytest tests/unit
	coverage report -m
	coverage html
	$(BROWSER) htmlcov/index.html

docs: ## generate Sphinx HTML documentation, including API docs
	rm -f docs/dataclass_wizard.rst
	rm -f docs/modules.rst
	sphinx-apidoc -o docs/ dataclass_wizard
	$(MAKE) -C docs clean
	$(MAKE) -C docs html
	$(BROWSER) docs/_build/html/index.html

servedocs: docs ## compile the docs watching for changes
	watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D .

release: dist ## package and upload a release
	twine upload dist/*

check-dist:
	python -m build
	python -m twine check dist/*

check: dist-local  ## verify release before upload to PyPI
	twine check dist/*

dist: clean ## builds source and wheel package
	pip install build
	python -m build
	ls -l dist

dist-local: clean replace_version ## builds source and wheel package (for local testing)
	pip install build
	python -m build
	ls -l dist
	$(MAKE) revert_readme

replace_version: ## replace |version| in README.rst with the current version
	cp README.rst README.rst.bak
	python -c "import re; \
from pathlib import Path; \
version = re.search(r\"__version__\\s*=\\s*'(.+?)'\", Path('dataclass_wizard/__version__.py').read_text()).group(1); \
readme_path = Path('README.rst'); \
readme_content = readme_path.read_text(); \
readme_path.write_text(readme_content.replace('|version|', version)); \
print(f'Replaced version in {readme_path}: {version}')"

revert_readme: ## revert README.rst to its original state
	mv README.rst.bak README.rst

install: clean ## install the package to the active Python's site-packages
	pip install .

dist-conda: clean ## builds source and wheel package for Anaconda
	conda build .

release-conda: dist-conda ## package and upload a release to Anaconda
	$(eval DIST_FILE=$(shell conda build . --output))
	anaconda upload $(DIST_FILE)