-
Notifications
You must be signed in to change notification settings - Fork 442
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: migrate from setup.py/setuptools to pyproject.toml/hatch #1163
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
# https://hatch.pypa.io/latest/how-to/config/dynamic-metadata/ | ||
import os | ||
import typing as t | ||
|
||
from hatchling.metadata.plugin.interface import MetadataHookInterface | ||
|
||
HERE = os.path.dirname(__file__) | ||
|
||
|
||
class MetaDataHook(MetadataHookInterface): | ||
def update(self, metadata: dict[str, t.Any]) -> None: | ||
about = load_about() | ||
metadata["version"] = about["__package_version__"] | ||
metadata["dependencies"] = load_requirements("base.in") | ||
metadata["optional-dependencies"] = { | ||
"dev": load_requirements("dev.txt"), | ||
"full": load_requirements("plugins.txt"), | ||
} | ||
|
||
|
||
def load_about() -> dict[str, str]: | ||
about: dict[str, str] = {} | ||
with open(os.path.join(HERE, "tutor", "__about__.py"), "rt", encoding="utf-8") as f: | ||
exec(f.read(), about) # pylint: disable=exec-used | ||
return about | ||
|
||
|
||
def load_requirements(filename: str) -> list[str]: | ||
requirements = [] | ||
with open( | ||
os.path.join(HERE, "requirements", filename), "rt", encoding="utf-8" | ||
) as f: | ||
for line in f: | ||
line = line.strip() | ||
if line != "" and not line.startswith("#"): | ||
requirements.append(line) | ||
return requirements |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,19 +9,15 @@ docs: ## Build HTML documentation | |
$(MAKE) -C docs | ||
|
||
compile-requirements: ## Compile requirements files | ||
pip-compile requirements/base.in | ||
pip-compile requirements/dev.in | ||
pip-compile requirements/docs.in | ||
pip-compile ${COMPILE_OPTS} requirements/base.in | ||
pip-compile ${COMPILE_OPTS} requirements/dev.in | ||
pip-compile ${COMPILE_OPTS} requirements/docs.in | ||
|
||
upgrade-requirements: ## Upgrade requirements files | ||
pip-compile --upgrade requirements/base.in | ||
pip-compile --upgrade requirements/dev.in | ||
pip-compile --upgrade requirements/docs.in | ||
$(MAKE) compile-requirements COMPILE_OPTS="--upgrade" | ||
|
||
build-pythonpackage: build-pythonpackage-tutor ## Build Python packages ready to upload to pypi | ||
|
||
build-pythonpackage-tutor: ## Build the "tutor" python package for upload to pypi | ||
python setup.py sdist | ||
build-pythonpackage: ## Build the "tutor" python package for upload to pypi | ||
python -m build --sdist | ||
|
||
push-pythonpackage: ## Push python package to pypi | ||
twine upload --skip-existing dist/tutor-$(shell make version).tar.gz | ||
|
@@ -82,12 +78,8 @@ coverage-browse-report: coverage-html ## Open the HTML report in the browser | |
bundle: ## Bundle the tutor package in a single "dist/tutor" executable | ||
pyinstaller tutor.spec | ||
|
||
bootstrap-dev: ## Install dev requirements | ||
pip install . | ||
pip install -r requirements/dev.txt | ||
|
||
bootstrap-dev-plugins: bootstrap-dev ## Install dev requirements and all supported plugins | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Any particular reasons for merging this? I get this is being made part of full, just thinking if someone was using this in their automation and can break. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The |
||
pip install -r requirements/plugins.txt | ||
bootstrap-dev: ## Install dev requirements and all supported plugins | ||
pip install .[full,dev] | ||
|
||
pull-base-images: # Manually pull base images | ||
docker image pull docker.io/ubuntu:20.04 | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
- [Improvement] Migrate packaging from setup.py/setuptools to pyproject.toml/hatch. This should not be a breaking change for most users. (by @regisb) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,60 @@ | ||
# https://packaging.python.org/en/latest/tutorials/packaging-projects/ | ||
# https://hatch.pypa.io/latest/config/build/ | ||
|
||
[project] | ||
name = "tutor" | ||
license = {file = "LICENSE.txt"} | ||
authors = [ | ||
{name = "Edly", email = "[email protected]"}, | ||
] | ||
description = "The Docker-based Open edX distribution designed for peace of mind" | ||
readme = {file = "README.rst", content-type = "text/x-rst"} | ||
requires-python = ">= 3.9" | ||
classifiers = [ | ||
"Development Status :: 5 - Production/Stable", | ||
"Intended Audience :: Developers", | ||
"License :: OSI Approved :: GNU Affero General Public License v3", | ||
"Operating System :: OS Independent", | ||
"Programming Language :: Python", | ||
"Programming Language :: Python :: 3.9", | ||
"Programming Language :: Python :: 3.10", | ||
"Programming Language :: Python :: 3.11", | ||
"Programming Language :: Python :: 3.12", | ||
] | ||
# these fields will be set by hatch_build.py | ||
dynamic = ["version", "dependencies", "optional-dependencies"] | ||
|
||
[project.scripts] | ||
tutor = "tutor.commands.cli:main" | ||
|
||
# https://packaging.python.org/en/latest/specifications/well-known-project-urls/#well-known-labels | ||
[project.urls] | ||
Homepage = "https://docs.tutor.edly.io/" | ||
Documentation = "https://docs.tutor.edly.io/" | ||
Source = "https://github.com/overhangio/tutor" | ||
Issues = "https://github.com/overhangio/tutor/issues" | ||
Changelog = "https://github.com/overhangio/tutor/blob/master/CHANGELOG.md" | ||
Community = "https://discuss.openedx.org/tag/tutor" | ||
|
||
# hatch-specific configuration | ||
[tool.hatch.metadata.hooks.custom] | ||
path = ".hatch_build.py" | ||
|
||
[build-system] | ||
requires = ["setuptools", "wheel"] | ||
requires = ["hatchling"] | ||
build-backend = "hatchling.build" | ||
|
||
[tool.hatch.build.targets.sdist] | ||
# Disable strict naming, otherwise twine is not able to detect name/version | ||
strict-naming = false | ||
include = [ | ||
"/tutor", | ||
"requirements/base.in", | ||
"requirements/plugins.txt", | ||
"requirements/dev.txt", | ||
] | ||
exclude = ["tests*"] | ||
|
||
[tool.hatch.metadata] | ||
# Allow github dependencies in plugins.txt | ||
allow-direct-references = true |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10,4 +10,3 @@ twine | |
# Types packages | ||
types-docutils | ||
types-PyYAML | ||
types-setuptools |
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the reason for having COMPILE_OPTS? What values can it have?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a technique that I also used in edx-platform to de-duplicate the list of
*.in
files in the Makefile.