Skip to content

Commit

Permalink
Migrate to pyproject.toml, remove setup.cfg, pyscaffold (#79)
Browse files Browse the repository at this point in the history
  • Loading branch information
andmat900 authored Oct 3, 2024
1 parent 46fab6f commit 9dbab0c
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 150 deletions.
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})

0 comments on commit 9dbab0c

Please sign in to comment.