This is an automated email from the ASF dual-hosted git repository.
janhoy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr-orbit.git
The following commit(s) were added to refs/heads/main by this push:
new 7d7455fd Migrate packaging from setup.py to pyproject.toml (#22)
7d7455fd is described below
commit 7d7455fd14f631924348bd4c287de002eb235462
Author: Jan Høydahl <[email protected]>
AuthorDate: Tue May 26 00:30:08 2026 +0200
Migrate packaging from setup.py to pyproject.toml (#22)
---
.coveragerc | 1 -
MANIFEST.in | 3 +-
Makefile | 12 +--
PYTHON_SUPPORT_GUIDE.md | 6 +-
pyproject.toml | 215 ++++++++++++++++++++++++++++++++++++++++++++++++
run.sh | 11 ++-
setup.cfg | 11 ---
setup.py | 211 -----------------------------------------------
tox.ini | 39 ---------
9 files changed, 229 insertions(+), 280 deletions(-)
diff --git a/.coveragerc b/.coveragerc
index 8a671d36..6253d373 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -3,6 +3,5 @@ omit =
# omit everything in /usr
/usr/local/lib/python*
tests/*
- setup.py
branch = True
diff --git a/MANIFEST.in b/MANIFEST.in
index 9e21c90d..4df15203 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -3,9 +3,8 @@ include CONTRIBUTING.md
include LICENSE
include MANIFEST.in
include README.md
-include setup.py
include version.txt
-include osbenchmark/min-os-version.txt
+include osbenchmark/min-version.txt
recursive-include docs *
recursive-include osbenchmark/resources *
# recursive-exclude * __pycache__
diff --git a/Makefile b/Makefile
index e6c75fa7..61a9661a 100644
--- a/Makefile
+++ b/Makefile
@@ -70,9 +70,9 @@ python-caches-clean:
-@find . -name "__pycache__" -prune -exec rm -rf -- \{\} \;
-@find . -name ".pyc" -prune -exec rm -rf -- \{\} \;
-# Note: pip will not update project dependencies (specified either in the
install_requires or the extras
-# section of the setup.py) if any version is already installed; therefore we
recommend
-# recreating your environments whenever your project dependencies change.
+# Note: pip will not update project dependencies (specified in pyproject.toml)
if any version is
+# already installed; therefore we recommend recreating your environments
whenever your project
+# dependencies change.
tox-env-clean:
rm -rf .tox
@@ -83,18 +83,18 @@ test: develop
pytest tests/
it: pyinst check-java python-caches-clean tox-env-clean
- @which tox || $(PIP) install tox
+ @tox --version 2>/dev/null | grep -qE '^[4-9]\.' || $(PIP) install
"tox>=4"
tox
it312 it313: pyinst check-java python-caches-clean tox-env-clean
- @which tox || $(PIP) install tox
+ @tox --version 2>/dev/null | grep -qE '^[4-9]\.' || $(PIP) install
"tox>=4"
tox -e $(@:it%=py%)
benchmark:
pytest benchmarks/
coverage:
- coverage run setup.py test
+ coverage run -m pytest tests/
coverage html
release-checks:
diff --git a/PYTHON_SUPPORT_GUIDE.md b/PYTHON_SUPPORT_GUIDE.md
index e7a5f5cf..e4423fe4 100644
--- a/PYTHON_SUPPORT_GUIDE.md
+++ b/PYTHON_SUPPORT_GUIDE.md
@@ -11,10 +11,8 @@ Make changes to the following files and open a PR titled
* `.ci/variables.json`: Update Python variables and `MIN_PY_VER` as needed.
For example: to add Python `3.13`, ensure there is a `PY313` variable set
to the latest patch release such as `3.13.1`.
-* `.github/workflows/integ-tests.yml`: Update supported Python versions in
- the `python-versions` section.
-* `setup.py`: Update `supported_python_versions`.
-* `tox.ini`: Update `env_list`.
+* `pyproject.toml`: Update `requires-python` and the `classifiers` list under
`[project]`.
+* `pyproject.toml`: Update `envlist` in the `[tool.tox]` `legacy_tox_ini`
section.
* `Makefile`: If updating the minimum supported Python version, update the
`pyinst<MIN_VERSION>` target and `check-pip`:
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 00000000..91cc3800
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,215 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+[build-system]
+requires = ["setuptools>=68", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "solr-orbit"
+dynamic = ["version"]
+description = "Macrobenchmarking framework for Apache Solr"
+readme = {file = "README.md", content-type = "text/markdown"}
+license = {text = "Apache License, Version 2.0"}
+requires-python = ">=3.12,<3.14"
+classifiers = [
+ "Topic :: System :: Benchmark",
+ "Development Status :: 5 - Production/Stable",
+ "License :: OSI Approved :: Apache Software License",
+ "Intended Audience :: Developers",
+ "Operating System :: MacOS :: MacOS X",
+ "Operating System :: POSIX",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
+]
+dependencies = [
+ # License: BSD
+ # Solr HTTP client for data operations (indexing, search, commit, optimize)
+ "pysolr>=3.10.0",
+ # License: Apache 2.0
+ # HTTP client for Solr V2 API admin operations
+ # transitive dependencies:
+ # urllib3: MIT
+ "requests>=2.28.0",
+ # License: BSD
+ "psutil>=5.8.0",
+ # License: MIT
+ "py-cpuinfo>=7.0.0",
+ # License: MIT
+ "tabulate>=0.9.0",
+ # License: MIT
+ "jsonschema>=3.1.1",
+ # License: BSD
+ "Jinja2>=3.1.3",
+ # License: BSD
+ "markupsafe>=2.0.1",
+ # License: MIT
+ # With 3.10.7, we get InvalidActorAddress exception while initialize Actor
+ "thespian>=3.10.1,<3.10.7",
+ # always use the latest version, these are certificate files...
+ # License: MPL 2.0
+ "certifi",
+ # License: Apache 2.0
+ "yappi>=1.4.0",
+ # License: BSD
+ "ijson>=2.6.1",
+ # License: Apache 2.0
+ # transitive dependencies:
+ # google-crc32c: Apache 2.0
+ "google-resumable-media>=1.1.0",
+ # License: Apache 2.0
+ "google-auth>=1.22.1",
+ # License: MIT
+ "wheel>=0.38.4",
+ # License: Apache 2.0
+ # transitive dependencies:
+ # botocore: Apache 2.0
+ # jmespath: MIT
+ # s3transfer: Apache 2.0
+ "boto3>=1.28.62",
+ # Licence: BSD-3-Clause
+ "zstandard>=0.22.0",
+ # License: BSD
+ # Required for knnvector workload
+ "h5py>=3.10.0",
+ # License: BSD
+ # Required for knnvector workload
+ "numpy>=1.24.2,<=1.26.4",
+ # License: MIT
+ "tqdm",
+ # License: MIT
+ "faker",
+ # License: BSD
+ "pandas>=1.4.3",
+ # License: MIT
+ "mimesis==11.1.0",
+ # Licence: BSD-3-Clause
+ "dask",
+ # Licence: BSD-3-Clause
+ "dask[distributed]",
+ # Licence: BSD-3-Clause
+ "bokeh!=3.0.*,>=2.4.2",
+ # License: MIT
+ "pydantic>=2.10.6",
+ # License: MIT
+ "pydantic_core>=2.27.2",
+ # License: MIT
+ "PyYAML>=5.4",
+]
+
+[project.urls]
+Homepage = "https://github.com/apache/solr-orbit"
+
+[project.scripts]
+solr-orbit = "osbenchmark.benchmark:main"
+solr-orbitd = "osbenchmark.benchmarkd:main"
+
+[project.optional-dependencies]
+test = [
+ "ujson",
+ "pytest==7.2.2",
+ # Upgraded from 3.2.2: py.io.TerminalWriter was removed in py 1.11+,
+ # making 3.x incompatible with Python 3.12. 4.0+ dropped the py dependency.
+ "pytest-benchmark>=4.0.0",
+ "pytest-asyncio==0.14.0",
+]
+develop = [
+ "ujson",
+ "pytest==7.2.2",
+ # Upgraded from 3.2.2: py.io.TerminalWriter was removed in py 1.11+,
+ # making 3.x incompatible with Python 3.12. 4.0+ dropped the py dependency.
+ "pytest-benchmark>=4.0.0",
+ "pytest-asyncio==0.14.0",
+ "tox>=4.0",
+ "coverage==5.5",
+ "twine==6.0.1",
+ "wheel>=0.38.4",
+ "github3.py==1.3.0",
+ "pylint==3.3.9",
+]
+
+# ---------------------------------------------------------------------------
+# Setuptools configuration
+# ---------------------------------------------------------------------------
+
+[tool.setuptools]
+include-package-data = true
+script-files = ["scripts/expand-data-corpus.py"]
+
+[tool.setuptools.packages.find]
+where = ["."]
+exclude = ["tests*", "benchmarks*", "it*"]
+
+[tool.setuptools.package-data]
+"*" = ["*.json", "*.yml"]
+
+[tool.setuptools.dynamic]
+version = {file = "version.txt"}
+
+# ---------------------------------------------------------------------------
+# pytest
+# ---------------------------------------------------------------------------
+
+[tool.pytest.ini_options]
+log_cli = false
+log_level = "INFO"
+addopts = "--verbose --color=yes"
+testpaths = ["tests"]
+junit_family = "xunit2"
+junit_logging = "all"
+
+# ---------------------------------------------------------------------------
+# tox
+# ---------------------------------------------------------------------------
+
+[tool.tox]
+legacy_tox_ini = """
+[tox]
+envlist =
+ py312,py313
+platform =
+ linux|darwin
+
+[testenv]
+deps=
+ pytest
+passenv =
+ HOME
+ JAVA*_HOME
+ BENCHMARK_HOME
+ SSH_AUTH_SOCK
+ THESPLOG_FILE
+ THESPLOG_FILE_MAXSIZE
+ THESPLOG_THRESHOLD
+# we do not pass LANG and LC_ALL anymore in order to isolate integration tests
+# from the test environment. OSBenchmark needs to enforce UTF-8 encoding in
every
+# place so we intentionally set LC_ALL to C.
+setenv =
+ LC_ALL=C
+ # According to http://pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html
+ # LC_ALL should have priority but to ensure that non-confirming
+ # applications behave identically, we also set LANG explicitly.
+ LANG=C
+commands =
+ python -V
+ pytest -s it --junitxml=junit-{envname}-it.xml
+
+allowlist_externals =
+ pytest
+"""
diff --git a/run.sh b/run.sh
index f93f3c6e..23fa7272 100755
--- a/run.sh
+++ b/run.sh
@@ -28,15 +28,14 @@
readonly BINARY_NAME="${__BENCHMARK_INTERNAL_BINARY_NAME}"
readonly HUMAN_NAME="${__BENCHMARK_INTERNAL_HUMAN_NAME}"
-install_osbenchmark_with_setuptools () {
+install_osbenchmark () {
# Check if optional parameter with benchmark binary path, points to an
existing executable file.
if [[ $# -ge 1 && -n $1 ]]; then
if [[ -f $1 && -x $1 ]]; then return; fi
fi
+ # Workaround system pip conflicts, https://github.com/pypa/pip/issues/5599
if [[ ${IN_VIRTUALENV} == 0 ]]; then
- # https://setuptools.readthedocs.io/en/latest/setuptools.html suggests
not invoking setup.py directly
- # Also workaround system pip conflicts,
https://github.com/pypa/pip/issues/5599
python3 -m pip install --quiet --user --upgrade --editable .[develop]
else
python3 -m pip install --quiet --upgrade --editable .[develop]
@@ -99,7 +98,7 @@ then
then
echo "Auto-updating solr-orbit from ${REMOTE}"
git rebase ${REMOTE}/master --quiet
- install_osbenchmark_with_setuptools
+ install_osbenchmark
#else
# offline - skipping update
fi
@@ -125,14 +124,14 @@ if [[ $IN_VIRTUALENV == 0 ]]
then
BENCHMARK_ROOT=$(python3 -c "import site; print(site.USER_BASE)")
BENCHMARK_BIN=${BENCHMARK_ROOT}/bin/${BINARY_NAME}
- install_osbenchmark_with_setuptools "${BENCHMARK_BIN}"
+ install_osbenchmark "${BENCHMARK_BIN}"
if [[ -x $BENCHMARK_BIN ]]; then
${BENCHMARK_BIN} "$@"
else
echo "Cannot execute ${HUMAN_NAME} in ${BENCHMARK_BIN}."
fi
else
- install_osbenchmark_with_setuptools "${BINARY_NAME}"
+ install_osbenchmark "${BINARY_NAME}"
${BINARY_NAME} "$@"
fi
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index d4e57b23..00000000
--- a/setup.cfg
+++ /dev/null
@@ -1,11 +0,0 @@
-[aliases]
-test=pytest
-
-[tool:pytest]
-# set to true for more verbose output of tests
-log_cli=false
-log_level=INFO
-addopts = --verbose --color=yes
-testpaths = tests
-junit_family = xunit2
-junit_logging = all
diff --git a/setup.py b/setup.py
deleted file mode 100644
index bd332d69..00000000
--- a/setup.py
+++ /dev/null
@@ -1,211 +0,0 @@
-# SPDX-License-Identifier: Apache-2.0
-#
-# Modifications by Apache Solr contributors; see git log for details.
-# Licensed under the Apache License, Version 2.0.
-#
-# The OpenSearch Contributors require contributions made to
-# this file be licensed under the Apache-2.0 license or a
-# compatible open source license.
-# Modifications Copyright OpenSearch Contributors. See
-# GitHub history for details.
-# Licensed to Elasticsearch B.V. under one or more contributor
-# license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright
-# ownership. Elasticsearch B.V. licenses this file to you under
-# the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-from os.path import join, dirname
-
-try:
- from setuptools import setup, find_packages
-except ImportError:
- print("*** Could not find setuptools. Did you install pip3? *** \n\n")
- raise
-
-
-def str_from_file(name):
- with open(join(dirname(__file__), name)) as f:
- return f.read().strip()
-
-
-raw_version = str_from_file("version.txt")
-VERSION = raw_version.split(".")
-__version__ = VERSION
-__versionstr__ = raw_version
-
-long_description = str_from_file("README.md")
-
-# tuples of (major, minor) of supported Python versions ordered from lowest to
highest
-supported_python_versions = [(3, 12), (3, 13)]
-
-################################################################################################
-#
-# Adapt `create-notice.sh` whenever changing dependencies here. Also, rerun
-# `pip install -e .` after changing dependencies to ensure that all
-# dependencies are up to date when testing in the virtual environment
-#
-# That script grabs all license files so we include them in the notice file.
-#
-################################################################################################
-install_requires = [
- # License: BSD
- # Solr HTTP client for data operations (indexing, search, commit, optimize)
- "pysolr>=3.10.0",
- # License: Apache 2.0
- # HTTP client for Solr V2 API admin operations
- # transitive dependencies:
- # urllib3: MIT
- "requests>=2.28.0",
- # License: BSD
- "psutil>=5.8.0",
- # License: MIT
- "py-cpuinfo>=7.0.0",
- # License: MIT
- "tabulate>=0.9.0",
- # License: MIT
- "jsonschema>=3.1.1",
- # License: BSD
- "Jinja2>=3.1.3",
- # License: BSD
- "markupsafe>=2.0.1",
- # License: MIT
- # With 3.10.7, we get InvalidActorAddress exception while initialize Actor
- "thespian>=3.10.1,<3.10.7",
- # recommended library for thespian to identify actors more easily with `ps`
- # "setproctitle==1.1.10",
- # always use the latest version, these are certificate files...
- # License: MPL 2.0
- "certifi",
- # License: Apache 2.0
- "yappi>=1.4.0",
- # License: BSD
- "ijson>=2.6.1",
- # License: Apache 2.0
- # transitive dependencies:
- # google-crc32c: Apache 2.0
- "google-resumable-media>=1.1.0",
- # License: Apache 2.0
- "google-auth>=1.22.1",
- # License: MIT
- "wheel>=0.38.4",
- # License: Apache 2.0
- # transitive dependencies:
- # botocore: Apache 2.0
- # jmespath: MIT
- # s3transfer: Apache 2.0
- "boto3>=1.28.62",
- # Licence: BSD-3-Clause
- "zstandard>=0.22.0",
- # License: BSD
- # Required for knnvector workload
- "h5py>=3.10.0",
- # License: BSD
- # Required for knnvector workload
- "numpy>=1.24.2,<=1.26.4",
- # License: MIT
- "tqdm",
- # License: MIT
- "faker",
- # License: BSD
- "pandas>=1.4.3",
- # License: MIT
- "mimesis==11.1.0",
- # Licence: BSD-3-Clause
- "dask",
- # Licence: BSD-3-Clause
- "dask[distributed]",
- # Licence: BSD-3-Clause
- "bokeh!=3.0.*,>=2.4.2",
- # License: MIT
- "pydantic>=2.10.6",
- # License: MIT
- "pydantic_core>=2.27.2",
- # License: MIT
- "PyYAML>=5.4",
-]
-
-tests_require = [
- "ujson",
- "pytest==7.2.2",
- "pytest-benchmark==3.2.2",
- "pytest-asyncio==0.14.0"
-]
-
-# These packages are only required when developing solr-orbit
-develop_require = [
- "tox==3.14.0",
- "coverage==5.5",
- "twine==6.0.1",
- "wheel>=0.38.4",
- "github3.py==1.3.0",
- "pylint==3.3.9"
-]
-
-python_version_classifiers = ["Programming Language :: Python ::
{}.{}".format(major, minor)
- for major, minor in supported_python_versions]
-
-first_supported_version = "{}.{}".format(supported_python_versions[0][0],
supported_python_versions[0][1])
-# next minor after the latest supported version
-first_unsupported_version = "{}.{}".format(supported_python_versions[-1][0],
supported_python_versions[-1][1] + 1)
-
-setup(name="solr-orbit",
- version=__versionstr__,
- description="Macrobenchmarking framework for Apache Solr",
- long_description=long_description,
- long_description_content_type='text/markdown',
- url="https://github.com/apache/solr-orbit",
- license="Apache License, Version 2.0",
- packages=find_packages(
- where=".",
- exclude=("tests*", "benchmarks*", "it*")
- ),
- include_package_data=True,
- # supported Python versions. This will prohibit pip (> 9.0.0) from even
installing solr-orbit on an unsupported
- # Python version.
- # See also
https://packaging.python.org/guides/distributing-packages-using-setuptools/#python-requires
- #
- # According to
https://www.python.org/dev/peps/pep-0440/#version-matching, a trailing ".*"
should
- # ignore patch versions:
- #
- # "additional trailing segments will be ignored when determining whether
or not a version identifier matches
- # the clause"
- #
- # However, with the pattern ">=3.5.*,<=3.8.*", the version "3.8.0" is
not accepted. Therefore, we match
- # the minor version after the last supported one (i.e. if 3.8 is the
last supported, we'll emit "<3.9")
- python_requires=">={},<{}".format(first_supported_version,
first_unsupported_version),
- package_data={"": ["*.json", "*.yml"]},
- install_requires=install_requires,
- test_suite="tests",
- tests_require=tests_require,
- extras_require={
- "develop": tests_require + develop_require
- },
- entry_points={
- "console_scripts": [
- "solr-orbit=osbenchmark.benchmark:main",
- "solr-orbitd=osbenchmark.benchmarkd:main",
- ],
- },
- scripts=['scripts/expand-data-corpus.py'],
- classifiers=[
- "Topic :: System :: Benchmark",
- "Development Status :: 5 - Production/Stable",
- "License :: OSI Approved :: Apache Software License",
- "Intended Audience :: Developers",
- "Operating System :: MacOS :: MacOS X",
- "Operating System :: POSIX",
- "Programming Language :: Python",
- "Programming Language :: Python :: 3",
- ] + python_version_classifiers,
- zip_safe=False)
diff --git a/tox.ini b/tox.ini
deleted file mode 100644
index 5a35ca92..00000000
--- a/tox.ini
+++ /dev/null
@@ -1,39 +0,0 @@
-###############################################################################
-#
-# tox configuration for Apache Solr Orbit.
-#
-# Invocation: Run `make it`
-#
-###############################################################################
-[tox]
-envlist =
- py312,py313
-platform =
- linux|darwin
-
-[testenv]
-deps=
- pytest
-passenv =
- HOME
- JAVA*_HOME
- BENCHMARK_HOME
- SSH_AUTH_SOCK
- THESPLOG_FILE
- THESPLOG_FILE_MAXSIZE
- THESPLOG_THRESHOLD
-# we do not pass LANG and LC_ALL anymore in order to isolate integration tests
-# from the test environment. OSBenchmark needs to enforce UTF-8 encoding in
every
-# place so we intentionally set LC_ALL to C.
-setenv =
- LC_ALL=C
- # According to http://pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html
- # LC_ALL should have priority but to ensure that non-confirming
- # applications behave identically, we also set LANG explicitly.
- LANG=C
-commands =
- python -V
- pytest -s it --junitxml=junit-{envname}-it.xml
-
-whitelist_externals =
- pytest