diff --git a/.github/workflows/publishing.yml b/.github/workflows/publishing.yml index f3bf1529..893536a4 100644 --- a/.github/workflows/publishing.yml +++ b/.github/workflows/publishing.yml @@ -62,20 +62,26 @@ jobs: matrix: os: [ubuntu-24.04, ubuntu-24.04-arm, windows-2019, macos-14] env: - CIBW_SKIP: cp27-* + CIBW_ENABLE: pypy + CIBW_ENVIRONMENT: >- + PIP_CONFIG_SETTINGS="build_ext=-j4" + DEPENDENCY_INJECTOR_LIMITED_API="1" steps: - uses: actions/checkout@v3 - name: Build wheels - uses: pypa/cibuildwheel@v2.20.0 + uses: pypa/cibuildwheel@v2.23.3 - uses: actions/upload-artifact@v4 with: name: cibw-wheels-x86-${{ matrix.os }}-${{ strategy.job-index }} path: ./wheelhouse/*.whl - publish: - name: Publish on PyPI + test-publish: + name: Upload release to TestPyPI needs: [build-sdist, build-wheels] - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest + environment: test-pypi + permissions: + id-token: write steps: - uses: actions/download-artifact@v4 with: @@ -84,11 +90,22 @@ jobs: merge-multiple: true - uses: pypa/gh-action-pypi-publish@release/v1 with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} -# For publishing to Test PyPI, uncomment next two lines: -# password: ${{ secrets.TEST_PYPI_API_TOKEN }} -# repository_url: https://test.pypi.org/legacy/ + repository-url: https://test.pypi.org/legacy/ + + publish: + name: Upload release to PyPI + needs: [build-sdist, build-wheels, test-publish] + runs-on: ubuntu-latest + environment: pypi + permissions: + id-token: write + steps: + - uses: actions/download-artifact@v4 + with: + pattern: cibw-* + path: dist + merge-multiple: true + - uses: pypa/gh-action-pypi-publish@release/v1 publish-docs: name: Publish docs diff --git a/.github/workflows/tests-and-linters.yml b/.github/workflows/tests-and-linters.yml index f43a2db8..4ee0d192 100644 --- a/.github/workflows/tests-and-linters.yml +++ b/.github/workflows/tests-and-linters.yml @@ -44,7 +44,7 @@ jobs: - uses: actions/setup-python@v4 with: python-version: 3.12 - - run: pip install tox 'cython>=3,<4' + - run: pip install tox - run: tox -vv env: TOXENV: coveralls diff --git a/.gitignore b/.gitignore index a9f80bee..86ecf7c7 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ lib64/ parts/ sdist/ var/ +wheelhouse/ *.egg-info/ .installed.cfg *.egg diff --git a/MANIFEST.in b/MANIFEST.in index b29eeb36..7205ddc5 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,9 +1,7 @@ -recursive-include src/dependency_injector *.py* *.c +recursive-include src/dependency_injector *.py* *.c py.typed recursive-include tests *.py include README.rst include CONTRIBUTORS.rst include LICENSE.rst -include requirements.txt include setup.py include tox.ini -include py.typed diff --git a/pyproject.toml b/pyproject.toml index ec5daadd..7512cb94 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools", "Cython"] +requires = ["setuptools", "Cython>=3.1.1"] build-backend = "setuptools.build_meta" [project] @@ -102,6 +102,7 @@ max-public-methods = 30 [tool.pytest.ini_options] testpaths = ["tests/unit/"] asyncio_mode = "auto" +asyncio_default_fixture_loop_scope = "function" markers = [ "pydantic: Tests with Pydantic as a dependency", ] diff --git a/requirements-dev.txt b/requirements-dev.txt index e0def494..47e3ca42 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,4 +1,4 @@ -cython==3.1.0 +cython==3.1.1 setuptools pytest pytest-asyncio @@ -13,7 +13,8 @@ mypy pyyaml httpx fastapi -pydantic==1.10.17 +pydantic +pydantic-settings numpy scipy boto3 diff --git a/setup.py b/setup.py index 877d9472..5f4669e4 100644 --- a/setup.py +++ b/setup.py @@ -1,13 +1,17 @@ """`Dependency injector` setup script.""" import os +import sys from Cython.Build import cythonize from Cython.Compiler import Options from setuptools import Extension, setup debug = os.environ.get("DEPENDENCY_INJECTOR_DEBUG_MODE") == "1" -limited_api = os.environ.get("DEPENDENCY_INJECTOR_LIMITED_API") == "1" +limited_api = ( + os.environ.get("DEPENDENCY_INJECTOR_LIMITED_API") == "1" + and sys.implementation.name == "cpython" +) defined_macros = [] options = {} compiler_directives = { @@ -31,7 +35,7 @@ if limited_api: options.setdefault("bdist_wheel", {}) options["bdist_wheel"]["py_limited_api"] = "cp38" - defined_macros.append(("Py_LIMITED_API", 0x03080000)) + defined_macros.append(("Py_LIMITED_API", "0x03080000")) setup( options=options, diff --git a/src/dependency_injector/__init__.py b/src/dependency_injector/__init__.py index faa905f5..b8352f95 100644 --- a/src/dependency_injector/__init__.py +++ b/src/dependency_injector/__init__.py @@ -1,6 +1,6 @@ """Top-level package.""" -__version__ = "4.46.0" +__version__ = "4.47.0a3" """Version number. :type: str diff --git a/tox.ini b/tox.ini index b524b88d..705ea890 100644 --- a/tox.ini +++ b/tox.ini @@ -1,7 +1,7 @@ [tox] parallel_show_output = true envlist= - coveralls, pylint, flake8, pydocstyle, pydantic-v1, pydantic-v2, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, pypy3.9, pypy3.10 + coveralls, pylint, flake8, pydocstyle, pydantic-v1, pydantic-v2, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, pypy3.9, pypy3.10, pypy3.11 [testenv] deps= @@ -20,7 +20,6 @@ deps= extras= yaml commands = pytest -python_files = test_*_py3*.py setenv = COVERAGE_RCFILE = pyproject.toml @@ -61,22 +60,6 @@ commands= coverage report coveralls -[testenv:pypy3.9] -deps= - pytest - pytest-asyncio - httpx - flask - pydantic-settings - werkzeug - fastapi - boto3 - mypy_boto3_s3 -extras= - yaml -commands = pytest - - [testenv:pylint] deps= pylint