diff --git a/.github/workflows/check-code-and-docs-validation.yml b/.github/workflows/check-code-and-docs-validation.yml index 20221f40..b6825d8d 100644 --- a/.github/workflows/check-code-and-docs-validation.yml +++ b/.github/workflows/check-code-and-docs-validation.yml @@ -22,7 +22,7 @@ jobs: - name: Set up Python uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: "3.14" + python-version: "3.15" - name: Install uv from vendored wheel run: pip install --no-index --find-links=./thirdparty/dist uv diff --git a/Dockerfile b/Dockerfile index 058abaea..bd3baf36 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ # See https://aboutcode.org for more information about AboutCode FOSS projects. # -FROM python:3.14-slim +FROM python:3.15-slim-trixie LABEL org.opencontainers.image.source="https://github.com/aboutcode-org/dejacode" LABEL org.opencontainers.image.description="DejaCode" @@ -36,6 +36,7 @@ RUN apt-get update \ build-essential \ libldap2-dev \ libsasl2-dev \ + libyaml-dev \ slapd \ ldap-utils \ libpq5 \ diff --git a/Makefile b/Makefile index 00f8a74c..21e012f5 100644 --- a/Makefile +++ b/Makefile @@ -117,13 +117,13 @@ upgrade: --platform manylinux_2_28_x86_64 \ --platform manylinux_2_17_x86_64 \ --platform manylinux_2_12_x86_64 \ - --python-version 3.14 \ + --python-version 3.15 \ --dest ./thirdparty/dist/ @echo "-> Download $(PACKAGE) wheels for macOS ARM64" uvx pip download $(PACKAGE) \ --only-binary=:all: \ --platform macosx_11_0_arm64 \ - --python-version 3.14 \ + --python-version 3.15 \ --dest ./thirdparty/dist/ @echo "-> Update pyproject.toml and uv.lock" uvx uv add $(PACKAGE) diff --git a/pyproject.toml b/pyproject.toml index bd84a899..3f763570 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "dejacode" version = "6.0.1" description = "Automate open source license compliance and ensure supply chain integrity" readme = "README.rst" -requires-python = ">=3.14,<3.15" +requires-python = ">=3.15,<3.16" license = "AGPL-3.0-only" license-files = ["LICENSE", "NOTICE"] authors = [ @@ -26,7 +26,7 @@ classifiers = [ "Intended Audience :: Legal Industry", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Topic :: Utilities" ] dependencies = [ @@ -89,6 +89,10 @@ dependencies = [ "idna==3.20", "charset-normalizer==3.5.2", "PyYAML==6.0.3", + # Build requirement of the PyYAML sdist: PyYAML publishes no cp315 wheel, so pip + # builds it from source, and the offline install needs Cython in thirdparty/dist. + # libyaml-dev in the Dockerfile enables the PyYAML C extension. + "Cython==3.3.1", # Markdown "markdown==3.11.2", "bleach==6.4.0", diff --git a/thirdparty/dist/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl b/thirdparty/dist/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl deleted file mode 100644 index 1e677344..00000000 Binary files a/thirdparty/dist/charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl and /dev/null differ diff --git a/thirdparty/dist/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl b/thirdparty/dist/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl deleted file mode 100644 index 7e41beee..00000000 Binary files a/thirdparty/dist/charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl and /dev/null differ diff --git a/thirdparty/dist/charset_normalizer-3.5.2-cp315-cp315-macosx_10_15_universal2.whl b/thirdparty/dist/charset_normalizer-3.5.2-cp315-cp315-macosx_10_15_universal2.whl new file mode 100644 index 00000000..1029605a Binary files /dev/null and b/thirdparty/dist/charset_normalizer-3.5.2-cp315-cp315-macosx_10_15_universal2.whl differ diff --git a/thirdparty/dist/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl b/thirdparty/dist/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl new file mode 100644 index 00000000..3abcbace Binary files /dev/null and b/thirdparty/dist/charset_normalizer-3.5.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl differ diff --git a/thirdparty/dist/cython-3.3.1-cp315-cp315-macosx_11_0_arm64.whl b/thirdparty/dist/cython-3.3.1-cp315-cp315-macosx_11_0_arm64.whl new file mode 100644 index 00000000..95efd1a3 Binary files /dev/null and b/thirdparty/dist/cython-3.3.1-cp315-cp315-macosx_11_0_arm64.whl differ diff --git a/thirdparty/dist/cython-3.3.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl b/thirdparty/dist/cython-3.3.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl new file mode 100644 index 00000000..d8eeb9aa Binary files /dev/null and b/thirdparty/dist/cython-3.3.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl differ diff --git a/thirdparty/dist/lxml-6.1.3-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl b/thirdparty/dist/lxml-6.1.3-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl deleted file mode 100644 index 4593b21b..00000000 Binary files a/thirdparty/dist/lxml-6.1.3-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl and /dev/null differ diff --git a/thirdparty/dist/lxml-6.1.3-cp314-cp314-macosx_10_15_universal2.whl b/thirdparty/dist/lxml-6.1.3-cp315-cp315-macosx_10_15_universal2.whl similarity index 54% rename from thirdparty/dist/lxml-6.1.3-cp314-cp314-macosx_10_15_universal2.whl rename to thirdparty/dist/lxml-6.1.3-cp315-cp315-macosx_10_15_universal2.whl index 0cd3f07e..60bc0938 100644 Binary files a/thirdparty/dist/lxml-6.1.3-cp314-cp314-macosx_10_15_universal2.whl and b/thirdparty/dist/lxml-6.1.3-cp315-cp315-macosx_10_15_universal2.whl differ diff --git a/thirdparty/dist/lxml-6.1.3-cp315-cp315-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl b/thirdparty/dist/lxml-6.1.3-cp315-cp315-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl new file mode 100644 index 00000000..7c0c2b47 Binary files /dev/null and b/thirdparty/dist/lxml-6.1.3-cp315-cp315-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl differ diff --git a/thirdparty/dist/msgspec-0.22.0-cp314-cp314-macosx_11_0_arm64.whl b/thirdparty/dist/msgspec-0.22.0-cp314-cp314-macosx_11_0_arm64.whl deleted file mode 100644 index 837e9336..00000000 Binary files a/thirdparty/dist/msgspec-0.22.0-cp314-cp314-macosx_11_0_arm64.whl and /dev/null differ diff --git a/thirdparty/dist/msgspec-0.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl b/thirdparty/dist/msgspec-0.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl deleted file mode 100644 index d68df727..00000000 Binary files a/thirdparty/dist/msgspec-0.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl and /dev/null differ diff --git a/thirdparty/dist/msgspec-0.22.0-cp315-cp315-macosx_11_0_arm64.whl b/thirdparty/dist/msgspec-0.22.0-cp315-cp315-macosx_11_0_arm64.whl new file mode 100644 index 00000000..3e19401f Binary files /dev/null and b/thirdparty/dist/msgspec-0.22.0-cp315-cp315-macosx_11_0_arm64.whl differ diff --git a/thirdparty/dist/msgspec-0.22.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl b/thirdparty/dist/msgspec-0.22.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl new file mode 100644 index 00000000..59f259a3 Binary files /dev/null and b/thirdparty/dist/msgspec-0.22.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl differ diff --git a/thirdparty/dist/pydantic_core-2.50.2-cp314-cp314-macosx_11_0_arm64.whl b/thirdparty/dist/pydantic_core-2.50.2-cp314-cp314-macosx_11_0_arm64.whl deleted file mode 100644 index 952099b4..00000000 Binary files a/thirdparty/dist/pydantic_core-2.50.2-cp314-cp314-macosx_11_0_arm64.whl and /dev/null differ diff --git a/thirdparty/dist/pydantic_core-2.50.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl b/thirdparty/dist/pydantic_core-2.50.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl deleted file mode 100644 index d8bd3fcc..00000000 Binary files a/thirdparty/dist/pydantic_core-2.50.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl and /dev/null differ diff --git a/thirdparty/dist/pydantic_core-2.50.2-cp315-cp315-macosx_11_0_arm64.whl b/thirdparty/dist/pydantic_core-2.50.2-cp315-cp315-macosx_11_0_arm64.whl new file mode 100644 index 00000000..ae6fe52d Binary files /dev/null and b/thirdparty/dist/pydantic_core-2.50.2-cp315-cp315-macosx_11_0_arm64.whl differ diff --git a/thirdparty/dist/pydantic_core-2.50.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl b/thirdparty/dist/pydantic_core-2.50.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl new file mode 100644 index 00000000..977ad865 Binary files /dev/null and b/thirdparty/dist/pydantic_core-2.50.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl differ diff --git a/thirdparty/dist/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl b/thirdparty/dist/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl deleted file mode 100644 index ff9fd486..00000000 Binary files a/thirdparty/dist/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl and /dev/null differ diff --git a/thirdparty/dist/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl b/thirdparty/dist/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl deleted file mode 100644 index 61918450..00000000 Binary files a/thirdparty/dist/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl and /dev/null differ diff --git a/uv.lock b/uv.lock index 2d7812e1..8dccdeba 100644 --- a/uv.lock +++ b/uv.lock @@ -1,6 +1,6 @@ version = 1 revision = 5 -requires-python = "==3.14.*" +requires-python = "==3.15.*" resolution-markers = [ "sys_platform == 'linux'", "sys_platform == 'darwin'", @@ -70,8 +70,8 @@ name = "charset-normalizer" version = "3.5.2" source = { registry = "thirdparty/dist" } wheels = [ - { path = "charset_normalizer-3.5.2-cp314-cp314-macosx_10_15_universal2.whl" }, - { path = "charset_normalizer-3.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl" }, + { path = "charset_normalizer-3.5.2-cp315-cp315-macosx_10_15_universal2.whl" }, + { path = "charset_normalizer-3.5.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl" }, ] [[package]] @@ -127,6 +127,15 @@ wheels = [ { path = "cyclonedx_python_lib-11.12.0-py3-none-any.whl" }, ] +[[package]] +name = "cython" +version = "3.3.1" +source = { registry = "thirdparty/dist" } +wheels = [ + { path = "cython-3.3.1-cp315-cp315-macosx_11_0_arm64.whl" }, + { path = "cython-3.3.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl" }, +] + [[package]] name = "defusedxml" version = "0.7.1" @@ -152,6 +161,7 @@ dependencies = [ { name = "crispy-bootstrap5" }, { name = "croniter" }, { name = "cyclonedx-python-lib" }, + { name = "cython" }, { name = "defusedxml" }, { name = "django" }, { name = "django-altcha" }, @@ -229,6 +239,7 @@ requires-dist = [ { name = "crispy-bootstrap5", specifier = "==2026.9" }, { name = "croniter", specifier = "==6.2.4" }, { name = "cyclonedx-python-lib", specifier = "==11.12.0" }, + { name = "cython", specifier = "==3.3.1" }, { name = "defusedxml", specifier = "==0.7.1" }, { name = "django", specifier = "==6.1.2" }, { name = "django-altcha", specifier = "==1.0.0" }, @@ -522,8 +533,8 @@ name = "lxml" version = "6.1.3" source = { registry = "thirdparty/dist" } wheels = [ - { path = "lxml-6.1.3-cp314-cp314-macosx_10_15_universal2.whl" }, - { path = "lxml-6.1.3-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl" }, + { path = "lxml-6.1.3-cp315-cp315-macosx_10_15_universal2.whl" }, + { path = "lxml-6.1.3-cp315-cp315-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl" }, ] [[package]] @@ -550,8 +561,8 @@ name = "msgspec" version = "0.22.0" source = { registry = "thirdparty/dist" } wheels = [ - { path = "msgspec-0.22.0-cp314-cp314-macosx_11_0_arm64.whl" }, - { path = "msgspec-0.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl" }, + { path = "msgspec-0.22.0-cp315-cp315-macosx_11_0_arm64.whl" }, + { path = "msgspec-0.22.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl" }, ] [[package]] @@ -653,8 +664,8 @@ dependencies = [ { name = "typing-extensions" }, ] wheels = [ - { path = "pydantic_core-2.50.2-cp314-cp314-macosx_11_0_arm64.whl" }, - { path = "pydantic_core-2.50.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl" }, + { path = "pydantic_core-2.50.2-cp315-cp315-macosx_11_0_arm64.whl" }, + { path = "pydantic_core-2.50.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl" }, ] [[package]] @@ -692,10 +703,6 @@ name = "pyyaml" version = "6.0.3" source = { registry = "thirdparty/dist" } sdist = { path = "pyyaml-6.0.3.tar.gz" } -wheels = [ - { path = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl" }, - { path = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl" }, -] [[package]] name = "qrcode"