Skip to content
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

Migrate to pyproject.toml, remove setup.cfg, pyscaffold #79

Merged
merged 11 commits into from
Oct 3, 2024
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ FROM python:3.9-bookworm AS build

COPY . /src
WORKDIR /src/python
RUN python3 setup.py bdist_wheel
RUN pip install --no-cache-dir build==1.2.2 && python3 -m build

FROM python:3.9-slim-bookworm
ARG TZ
Expand Down
75 changes: 75 additions & 0 deletions python/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
[build-system]
requires = ["setuptools>=72", "wheel", "setuptools_scm[toml]>=8"]

[project]
name = "etos_api"
dynamic = ["version"]
description = "ETOS API"
authors = [{name = "Tobias Persson", email = "[email protected]"}]
license = { text = "Apache License, Version 2.0" }
readme = "README.rst"
classifiers = [
"Development Status :: 4 - Beta",
"Programming Language :: Python :: 3",
"License :: OSI Approved :: Apache Software License"
]
dependencies = [
"etos_lib==4.3.1",
"etcd3gw~=2.3",
"uvicorn~=0.22",
"fastapi~=0.109.1",
"aiohttp[speedups]~=3.8",
"gql[requests]~=3.4",
"httpx~=0.24",
"kubernetes~=26.1",
"sse-starlette~=1.6",
"opentelemetry-api~=1.21",
"opentelemetry-exporter-otlp~=1.21",
"opentelemetry-instrumentation-fastapi==0.46b0",
"opentelemetry-sdk~=1.21",
"jsontas~=1.4",
"packageurl-python~=0.11",
"cryptography>=42.0.4,<43.0.0",
"setuptools_scm~=8.0"
]

[options]
zip_safe = false
include_package_data = true
python_requires = ">=3.4"

[options.packages.find]
where = "src"
exclude = ["tests"]

[project.urls]
Documentation = "https://etos.readthedocs.io/"
Homepage = "https://github.com/eiffel-community/etos-api"
Repository = "https://github.com/eiffel-community/etos-api"

[project.scripts]

[project.optional-dependencies]
testing = ["pytest", "pytest-cov"]

[test]
extras = true

[tool.build_sphinx]
source_dir = "docs"
build_dir = "build/sphinx"

[tool.devpi.upload]
no-vcs = 1
formats = "bdist_wheel"

[tool.flake8]
exclude = [".tox", "build", "dist", ".eggs", "docs/conf.py"]

[tool.pytest.ini_options]
addopts = "--cov etos_api --cov-report term-missing --verbose"
norecursedirs = ["dist", "build", ".tox"]
testpaths = ["tests"]

[tool.setuptools_scm]
root = ".."
31 changes: 0 additions & 31 deletions python/requirements.txt

This file was deleted.

103 changes: 0 additions & 103 deletions python/setup.cfg

This file was deleted.

49 changes: 34 additions & 15 deletions python/setup.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,42 @@
# -*- coding: utf-8 -*-
"""Setup file for etos_api.
"""Setup file for etos-api."""
from setuptools import setup
from setuptools_scm.version import get_local_dirty_tag

Use setup.cfg to configure your project.

This file was generated with PyScaffold 3.2.3.
PyScaffold helps you to put up the scaffold of your new Python project.
Learn more under: https://pyscaffold.org/
"""
import sys
def version_scheme(version) -> str:
"""Get version component for the current commit.

from pkg_resources import VersionConflict, require
from setuptools import setup
Used by setuptools_scm.
"""
if version.tag and version.distance == 0:
# If the current commit has a tag, use the tag as version, regardless of branch.
# Note: Github CI creates releases from detached HEAD, not from a particular branch.
return f"{version.tag}"
elif version.branch == "main" and version.tag and version.distance > 0:
# For untagged commits on the release branch always add a distance like ".post3"
return f"{version.tag}.post{version.distance}"
else:
# For non-release branches, mark the version as dev and distance:
return f"{version.tag}.dev{version.distance}"


def local_scheme(version) -> str:
"""Get local version component for the current Git commit.

Used by setuptools_scm.
"""
# If current version is dirty, always add dirty suffix, regardless of branch.
dirty_tag = get_local_dirty_tag(version) if version.dirty else ""
if dirty_tag:
return f"{dirty_tag}.{version.node}"

try:
require("setuptools>=38.3")
except VersionConflict:
print("Error: version of setuptools is too old (<38.3)!")
sys.exit(1)
if version.distance == 0:
# If the current commit has a tag, do not add a local component, regardless of branch.
return ""
# For all other cases, always add the git reference (like "g7839952")
return f"+{version.node}"


if __name__ == "__main__":
setup(use_pyscaffold=True)
setup(use_scm_version={"local_scheme": local_scheme, "version_scheme": version_scheme})
Loading