This is an automated email from the ASF dual-hosted git repository.
PsiACE pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/libcloud.git
The following commit(s) were added to refs/heads/trunk by this push:
new b743157f7 Move tests to py3.12. Implements #2146 (#2152)
b743157f7 is described below
commit b743157f7f2c9638ef2aceb20abbae90502182b3
Author: Miguel Caballer Fernandez <[email protected]>
AuthorDate: Wed Jul 8 10:59:03 2026 +0200
Move tests to py3.12. Implements #2146 (#2152)
* Move tests to py3.12
* Add missing py321 package
* Update reqs
* Update reqs
* Update base image to ubuntu 24
* Update required_status_checks to 3.12
---
.asf.yaml | 4 +-
.github/workflows/integration-tests.yml | 2 +-
.github/workflows/main.yml | 18 ++--
.github/workflows/publish_dev_artifact.yml | 2 +-
.github/workflows/publish_pricing_to_s3.yml | 2 +-
contrib/Dockerfile | 11 ++-
pyproject.toml | 8 +-
scripts/time_imports.sh | 4 +-
tox.ini | 14 +--
uv.lock | 128 ++++++++++++++++++++++++----
10 files changed, 145 insertions(+), 48 deletions(-)
diff --git a/.asf.yaml b/.asf.yaml
index 43f40aa41..4ea704327 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -48,8 +48,8 @@ github:
- "Unit Tests (Python 3.12)"
- "Unit Tests (Python 3.13)"
- "Dependency Review"
-# - "Run Various Lint and Other Checks (3.10)"
-# - "Build and upload Documentation (3.10)"
+ - "Run Various Lint and Other Checks (3.12)"
+ - "Build and upload Documentation (3.12)"
notifications:
jobs: [email protected]
diff --git a/.github/workflows/integration-tests.yml
b/.github/workflows/integration-tests.yml
index eb6621cf3..450a46c03 100644
--- a/.github/workflows/integration-tests.yml
+++ b/.github/workflows/integration-tests.yml
@@ -30,7 +30,7 @@ jobs:
strategy:
matrix:
- python_version: [ "3.10" ]
+ python_version: [ "3.12" ]
steps:
- uses: actions/checkout@v7
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 1c57badf3..9a0f6b16e 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -83,7 +83,7 @@ jobs:
strategy:
matrix:
- python_version: [ "3.10" ]
+ python_version: [ "3.12" ]
steps:
- uses: actions/checkout@v7
@@ -131,7 +131,7 @@ jobs:
strategy:
matrix:
- python_version: [ "3.10" ]
+ python_version: [ "3.12" ]
steps:
- uses: actions/checkout@v7
@@ -173,7 +173,7 @@ jobs:
strategy:
matrix:
- python_version: [ "3.10" ]
+ python_version: [ "3.12" ]
steps:
- uses: actions/checkout@v7
@@ -231,7 +231,7 @@ jobs:
tar -xzvf "${TARBALL_FILENAME}"
cd "apache_libcloud-${VERSION}/"
- tox -c tox.ini -epy3.10
+ tox -c tox.ini -epy3.12
- name: Verify Wheel Release Artifact
run: |
@@ -251,7 +251,7 @@ jobs:
cp ../../tox.ini .
cp ../../pyproject.toml .
cp ../../libcloud/test/secrets.py-dist libcloud/test/secrets.py-dist
- tox -c tox.ini -epy3.10
+ tox -c tox.ini -epy3.12
build_test_docker_image:
name: Build and Verify Docker Image
@@ -259,7 +259,7 @@ jobs:
strategy:
matrix:
- python_version: [ "3.10" ]
+ python_version: [ "3.12" ]
steps:
- uses: actions/checkout@v7
@@ -278,7 +278,7 @@ jobs:
strategy:
matrix:
- python_version: [ "3.10" ]
+ python_version: [ "3.12" ]
steps:
- uses: actions/checkout@v7
@@ -351,7 +351,7 @@ jobs:
strategy:
matrix:
- python_version: [ "3.10" ]
+ python_version: [ "3.12" ]
steps:
- uses: actions/checkout@v7
@@ -390,7 +390,7 @@ jobs:
strategy:
matrix:
- python_version: [ "3.10" ]
+ python_version: [ "3.12" ]
steps:
- uses: actions/checkout@v7
diff --git a/.github/workflows/publish_dev_artifact.yml
b/.github/workflows/publish_dev_artifact.yml
index 0072459f6..7ec513574 100644
--- a/.github/workflows/publish_dev_artifact.yml
+++ b/.github/workflows/publish_dev_artifact.yml
@@ -27,7 +27,7 @@ jobs:
- name: Use Python ${{ matrix.python_version }}
uses: actions/setup-python@v6
with:
- python-version: "3.10"
+ python-version: "3.12"
- name: Install uv
uses: astral-sh/setup-uv@d31148d669074a8d0a63714ba94f3201e7020bc3
diff --git a/.github/workflows/publish_pricing_to_s3.yml
b/.github/workflows/publish_pricing_to_s3.yml
index 4d1ad932c..9a7c33d56 100644
--- a/.github/workflows/publish_pricing_to_s3.yml
+++ b/.github/workflows/publish_pricing_to_s3.yml
@@ -17,7 +17,7 @@ jobs:
strategy:
matrix:
- python_version: [ "3.10" ]
+ python_version: [ "3.12" ]
steps:
- uses: actions/checkout@v7
diff --git a/contrib/Dockerfile b/contrib/Dockerfile
index ba492f40b..9e72120fe 100644
--- a/contrib/Dockerfile
+++ b/contrib/Dockerfile
@@ -15,7 +15,7 @@
# Docker image used for running tests the under all the supported Python
# versions
-FROM ubuntu:22.04
+FROM ubuntu:24.04
ARG DEBIAN_FRONTEND=noninteractive
@@ -42,8 +42,6 @@ RUN set -e && \
pypy3 \
pypy3-dev \
python3-pip \
- python3-distutils \
- python3.10-distutils \
libvirt-dev \
# Needed by libvirt driver
pkg-config
@@ -54,9 +52,10 @@ COPY . /libcloud
RUN if [ ! -f "/libcloud/README.rst" ]; then echo "libcloud/README.rst file
not found, you are likely not running docker build from the repository root
directory"; exit 1; fi
WORKDIR /libcloud
+ENV PATH="/libcloud/.venv/bin:${PATH}"
RUN set -e && \
- python3.10 -m pip install uv && \
- python3.10 -m uv pip install --no-cache-dir --group ci "."
+ python3.12 -m pip install --break-system-packages uv && \
+ python3.12 -m uv sync --group ci --no-dev
-CMD ["tox", "-e",
"lint,isort-check,black-check,bandit,py3.10,py3.11,py3.12,py3.13,pypypy3.10"]
+CMD ["tox", "-e",
"lint,isort-check,black-check,bandit,py3.12,py3.10,py3.11,py3.13,pypypy3.10"]
diff --git a/pyproject.toml b/pyproject.toml
index 44bf33fbe..344ed731d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -86,8 +86,10 @@ test = [
"pytest-xdist==3.6.1",
"pytest-timeout==2.4.0",
"pytest-benchmark[histogram]==5.1.0; python_version >= '3.10'",
- "cryptography==46.0.7",
- "pyopenssl==26.0.0",
+ "cryptography==49.0.0; python_version >= '3.11'",
+ "pyopenssl==26.3.0; python_version >= '3.11'",
+ "cryptography==46.0.7; python_version < '3.11'",
+ "pyopenssl==26.0.0; python_version < '3.11'",
"fasteners",
"paramiko==5.0.0; platform_python_implementation != 'PyPy'",
"libvirt-python==12.0.0",
@@ -238,7 +240,7 @@ indent-string = " "
[tool.mypy]
-python_version = "3.10"
+python_version = "3.12"
platform = "linux"
show_error_context = true
show_column_numbers = true
diff --git a/scripts/time_imports.sh b/scripts/time_imports.sh
index 89585a732..43ab40def 100755
--- a/scripts/time_imports.sh
+++ b/scripts/time_imports.sh
@@ -26,7 +26,7 @@ find . -name "*.pyc" -print0 | xargs -0 rm
# Example line:
# import time: 1112 | 70127 | libcloud
-LIBCLOUD_IMPORT_TIMINGS=$(python3.10 -X importtime -c "import libcloud" 2>&1)
+LIBCLOUD_IMPORT_TIMINGS=$(python3.12 -X importtime -c "import libcloud" 2>&1)
LIBCLOUD_IMPORT_TIME_CUMULATIVE_US=$(echo -e "${LIBCLOUD_IMPORT_TIMINGS}" |
tail -1 | grep "| libcloud" | awk '{print $5}')
echo "Import timings for \"libcloud\" module"
@@ -40,7 +40,7 @@ fi
# Clean up any cached files to ensure consistent and clean environment
find . -name "*.pyc" -print0 | xargs -0 rm
-EC2_DRIVER_IMPORT_TIMINGS=$(python3.10 -X importtime -c "import
libcloud.compute.drivers.ec2" 2>&1)
+EC2_DRIVER_IMPORT_TIMINGS=$(python3.12 -X importtime -c "import
libcloud.compute.drivers.ec2" 2>&1)
EC2_DRIVER_IMPORT_TIME_CUMULATIVE_US=$(echo -e "$EC2_DRIVER_IMPORT_TIMINGS}" |
tail -1 | grep "| libcloud.compute.drivers.ec2" | awk '{print $5}')
echo ""
diff --git a/tox.ini b/tox.ini
index a48bd1158..d37911c23 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
[tox]
-envlist =
py{pypy3,3.10,3.11,pyjion},checks,lint,pylint,pyupgrade,isort,black,mypy,docs,coverage,integration-storage
+envlist =
py{pypy3,3.12,3.11,pyjion},checks,lint,pylint,pyupgrade,isort,black,mypy,docs,coverage,integration-storage
skipsdist = true
requires =
wheel
@@ -25,7 +25,7 @@ basepython =
pypypy3.10: pypy3.10
pypypy-3.10: pypy3.10
pypyjion: pyjion
-
{docs,checks,black,black-check,bandit,lint,pylint,mypy,micro-benchmarks,coverage,import-timings,isort,isort-check,pyupgrade,integration-storage}:
python3.10
+
{docs,checks,black,black-check,bandit,lint,pylint,mypy,micro-benchmarks,coverage,import-timings,isort,isort-check,pyupgrade,integration-storage}:
python3.12
{py3.10,py3.10-dist,py3.10-dist-wheel}: python3.10
{py3.11,py3.11-dist,py3.11-dist-wheel}: python3.11
{py3.12,py3.12-dist,py3.12-dist-wheel}: python3.12
@@ -139,11 +139,11 @@ commands = rstcheck --report-level warning ../README.rst
sphinx-build -j auto -b html -d {envtmpdir}/doctrees . _build/html
[testenv:provider-tables]
-basepython: python3.10
+basepython: python3.12
commands = python ./contrib/generate_provider_feature_matrix_table.py
[testenv:scrape-and-publish-provider-prices]
-basepython: python3.10
+basepython: python3.12
# Needed to avoid urllib3 errors related to old openssl version
# https://github.com/urllib3/urllib3/issues/2168
dependency_groups =
@@ -178,7 +178,7 @@ commands =
echo "https://libcloud-pricing-data.s3.amazonaws.com/pricing.json.sha512"
[testenv:scrape-provider-prices]
-basepython: python3.10
+basepython: python3.12
# Needed to avoid urllib3 errors related to old openssl version
# https://github.com/urllib3/urllib3/issues/2168
dependency_groups =
@@ -202,7 +202,7 @@ commands =
bash -c "(cd libcloud/data/ ; sha512sum pricing.json >
{toxinidir}/libcloud/data/pricing.json.sha512)"
[testenv:scrape-ec2-prices]
-basepython: python3.10
+basepython: python3.12
# Needed to avoid urllib3 errors related to old openssl version
# https://github.com/urllib3/urllib3/issues/2168
dependency_groups =
@@ -214,7 +214,7 @@ deps = urllib3==1.26.6
commands = python contrib/scrape-ec2-prices.py
[testenv:scrape-ec2-sizes]
-basepython: python3.10
+basepython: python3.12
# Needed to avoid urllib3 errors related to old openssl version
# https://github.com/urllib3/urllib3/issues/2168
dependency_groups =
diff --git a/uv.lock b/uv.lock
index 1a7f18e54..cf7965ee4 100644
--- a/uv.lock
+++ b/uv.lock
@@ -45,7 +45,8 @@ dev = [
{ name = "black", marker = "implementation_name == 'cpython'" },
{ name = "codespell" },
{ name = "coverage", extra = ["toml"] },
- { name = "cryptography" },
+ { name = "cryptography", version = "46.0.7", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "cryptography", version = "49.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
{ name = "fasteners" },
{ name = "flake8" },
{ name = "idna" },
@@ -56,7 +57,8 @@ dev = [
{ name = "pep8" },
{ name = "prek" },
{ name = "pylint" },
- { name = "pyopenssl" },
+ { name = "pyopenssl", version = "26.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "pyopenssl", version = "26.3.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
{ name = "pytest" },
{ name = "pytest-benchmark", extra = ["histogram"] },
{ name = "pytest-timeout" },
@@ -117,12 +119,14 @@ publish = [
]
test = [
{ name = "coverage", extra = ["toml"] },
- { name = "cryptography" },
+ { name = "cryptography", version = "46.0.7", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "cryptography", version = "49.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
{ name = "fasteners" },
{ name = "idna" },
{ name = "libvirt-python" },
{ name = "paramiko", marker = "platform_python_implementation != 'PyPy'" },
- { name = "pyopenssl" },
+ { name = "pyopenssl", version = "26.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "pyopenssl", version = "26.3.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
{ name = "pytest" },
{ name = "pytest-benchmark", extra = ["histogram"] },
{ name = "pytest-timeout" },
@@ -144,7 +148,8 @@ dev = [
{ name = "black", marker = "python_full_version >= '3.10' and
implementation_name == 'cpython'", specifier = "==26.3.1" },
{ name = "codespell", specifier = "==2.4.1" },
{ name = "coverage", extras = ["toml"], marker = "python_full_version >=
'3.10'", specifier = "==7.2.7" },
- { name = "cryptography", specifier = "==46.0.7" },
+ { name = "cryptography", marker = "python_full_version < '3.11'",
specifier = "==46.0.7" },
+ { name = "cryptography", marker = "python_full_version >= '3.11'",
specifier = "==49.0.0" },
{ name = "fasteners" },
{ name = "flake8", specifier = "==5.0.4" },
{ name = "idna", specifier = ">=3.15" },
@@ -155,7 +160,8 @@ dev = [
{ name = "pep8", specifier = "==1.7.1" },
{ name = "prek", specifier = ">=0.2.17" },
{ name = "pylint", marker = "python_full_version >= '3.10'", specifier =
"==3.3.4" },
- { name = "pyopenssl", specifier = "==26.0.0" },
+ { name = "pyopenssl", marker = "python_full_version < '3.11'", specifier =
"==26.0.0" },
+ { name = "pyopenssl", marker = "python_full_version >= '3.11'", specifier
= "==26.3.0" },
{ name = "pytest", specifier = "==9.0.3" },
{ name = "pytest-benchmark", extras = ["histogram"], marker =
"python_full_version >= '3.10'", specifier = "==5.1.0" },
{ name = "pytest-timeout", specifier = "==2.3.1" },
@@ -213,12 +219,14 @@ mypy = [
publish = [{ name = "twine", specifier = "==5.1.1" }]
test = [
{ name = "coverage", extras = ["toml"], marker = "python_full_version >=
'3.10'", specifier = "==7.2.7" },
- { name = "cryptography", specifier = "==46.0.7" },
+ { name = "cryptography", marker = "python_full_version < '3.11'",
specifier = "==46.0.7" },
+ { name = "cryptography", marker = "python_full_version >= '3.11'",
specifier = "==49.0.0" },
{ name = "fasteners" },
{ name = "idna", specifier = ">=3.15" },
{ name = "libvirt-python", specifier = "==12.0.0" },
{ name = "paramiko", marker = "platform_python_implementation != 'PyPy'",
specifier = "==5.0.0" },
- { name = "pyopenssl", specifier = "==26.0.0" },
+ { name = "pyopenssl", marker = "python_full_version < '3.11'", specifier =
"==26.0.0" },
+ { name = "pyopenssl", marker = "python_full_version >= '3.11'", specifier
= "==26.3.0" },
{ name = "pytest", specifier = "==9.0.3" },
{ name = "pytest-benchmark", extras = ["histogram"], marker =
"python_full_version >= '3.10'", specifier = "==5.1.0" },
{ name = "pytest-timeout", specifier = "==2.3.1" },
@@ -268,7 +276,8 @@ version = "1.25.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "azure-core" },
- { name = "cryptography" },
+ { name = "cryptography", version = "46.0.7", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "cryptography", version = "49.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
{ name = "msal" },
{ name = "msal-extensions" },
{ name = "typing-extensions" },
@@ -798,8 +807,11 @@ toml = [
name = "cryptography"
version = "46.0.7"
source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.11'",
+]
dependencies = [
- { name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
+ { name = "cffi", marker = "python_full_version < '3.11' and
platform_python_implementation != 'PyPy'" },
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
sdist = { url =
"https://files.pythonhosted.org/packages/47/93/ac8f3d5ff04d54bc814e961a43ae5b0b146154c89c61b47bb07557679b18/cryptography-46.0.7.tar.gz",
hash =
"sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5", size
= 750652, upload-time = "2026-04-08T01:57:54.692Z" }
@@ -854,6 +866,66 @@ wheels = [
{ url =
"https://files.pythonhosted.org/packages/20/2a/1b016902351a523aa2bd446b50a5bc1175d7a7d1cf90fe2ef904f9b84ebc/cryptography-46.0.7-pp311-pypy311_pp73-win_amd64.whl",
hash =
"sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4", size
= 3412829, upload-time = "2026-04-08T01:57:48.874Z" },
]
+[[package]]
+name = "cryptography"
+version = "49.0.0"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+]
+dependencies = [
+ { name = "cffi", marker = "python_full_version >= '3.11' and
platform_python_implementation != 'PyPy'" },
+]
+sdist = { url =
"https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz",
hash =
"sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size
= 854345, upload-time = "2026-06-12T20:02:30.512Z" }
+wheels = [
+ { url =
"https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl",
hash =
"sha256:966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db", size
= 4032100, upload-time = "2026-06-12T20:02:32.143Z" },
+ { url =
"https://files.pythonhosted.org/packages/09/41/3797cfaf69cae04a13ee78ebd83f0678d9c02b4779d21ce24445326f1a69/cryptography-49.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
hash =
"sha256:36d1709f992593689b45bda411498d62c6e365f2ca00b84657d4dadd24de16db", size
= 4692978, upload-time = "2026-06-12T20:01:21.305Z" },
+ { url =
"https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
hash =
"sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size
= 4716422, upload-time = "2026-06-12T20:01:48.566Z" },
+ { url =
"https://files.pythonhosted.org/packages/4a/91/01ce7303a4579e6d3a6abef01bd322848e9ea7a219adcabc5048b9033571/cryptography-49.0.0-cp311-abi3-manylinux_2_28_aarch64.whl",
hash =
"sha256:53ecee2e23f7169b6117e99fc8a944e5e50f79e69758a83b52a00cb98ab2b2d2", size
= 4700503, upload-time = "2026-06-12T20:02:47.091Z" },
+ { url =
"https://files.pythonhosted.org/packages/62/99/a2c95cf8293f07491e9e27c20cc4dcd18176d944e674679adeb1d0173fd6/cryptography-49.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl",
hash =
"sha256:2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b", size
= 5309779, upload-time = "2026-06-12T20:02:08.987Z" },
+ { url =
"https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl",
hash =
"sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size
= 4749683, upload-time = "2026-06-12T20:02:03.335Z" },
+ { url =
"https://files.pythonhosted.org/packages/a3/5b/c5246635d5fd3b64e0d45ae10e99fd32fe9676a79915ccfe5a61ba9af1a5/cryptography-49.0.0-cp311-abi3-manylinux_2_31_armv7l.whl",
hash =
"sha256:0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c", size
= 4337874, upload-time = "2026-06-12T20:02:54.323Z" },
+ { url =
"https://files.pythonhosted.org/packages/6d/88/05563c7fe2e914e87d1a536d06fe83e66b4e1d95cb593e05aea375531da8/cryptography-49.0.0-cp311-abi3-manylinux_2_34_aarch64.whl",
hash =
"sha256:ccac2bfebc306b862133e3bb71f3f6ee8bb525240089b2d952e4144b3a6d5da7", size
= 4700283, upload-time = "2026-06-12T20:01:34.822Z" },
+ { url =
"https://files.pythonhosted.org/packages/c4/b6/d7696e4e890d6ae1469935164c9e5215c557671cb78d6e3f458ccceaa632/cryptography-49.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl",
hash =
"sha256:d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68", size
= 5265844, upload-time = "2026-06-12T20:01:24.09Z" },
+ { url =
"https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl",
hash =
"sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size
= 4749290, upload-time = "2026-06-12T20:01:30.848Z" },
+ { url =
"https://files.pythonhosted.org/packages/4f/01/339573cf1023163a400b0b5d16f6d507de413b9f60be6fd1b77feeaf6737/cryptography-49.0.0-cp311-abi3-musllinux_1_2_aarch64.whl",
hash =
"sha256:b87e65d263b3e5d3bb92a57e2a6638e2f31110fa7aa890c7b2dbba42248d0a3f", size
= 4834612, upload-time = "2026-06-12T20:01:29.246Z" },
+ { url =
"https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl",
hash =
"sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size
= 4980804, upload-time = "2026-06-12T20:01:42.853Z" },
+ { url =
"https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl",
hash =
"sha256:e5dfc1e64de5677cec922ffa8da89c546d0415bf6efdf081842e5d44c84e1f0e", size
= 3810026, upload-time = "2026-06-12T20:02:39.262Z" },
+ { url =
"https://files.pythonhosted.org/packages/ec/9e/db72b3ae7fc9cfad53e630e56c6ae83b9b6ff0bf3718ffb8012d20b3aabf/cryptography-49.0.0-cp314-cp314t-macosx_11_0_arm64.whl",
hash =
"sha256:73a205dce83953d131a4aa1e0fd917a2fd1c5b1eef251e9d7152efefcbf5caf7", size
= 4013892, upload-time = "2026-06-12T20:02:10.735Z" },
+ { url =
"https://files.pythonhosted.org/packages/86/12/c48a424f38db03027be9f7ed5c7dc5de9933dbee992865f98b13727a009d/cryptography-49.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
hash =
"sha256:196ecd6a36e4e9aa10270393bb98d8df88fccee0bf1e5128b91ae4eb4375896d", size
= 4678835, upload-time = "2026-06-12T20:02:48.743Z" },
+ { url =
"https://files.pythonhosted.org/packages/68/28/8a3ad4653662c93fc44dc4e5d8fd374c25c42e07b34bbfbadf49cf57a5a8/cryptography-49.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
hash =
"sha256:7abcee80084cda3f7691f3eb1ce480d8df49cec637b429aa35986c1de71738aa", size
= 4697239, upload-time = "2026-06-12T20:02:56.03Z" },
+ { url =
"https://files.pythonhosted.org/packages/a8/b2/2193fc74f81aee4f9b62733133b73b5176718932ed8f2e4b03fa040480a6/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl",
hash =
"sha256:4ae387c9cb68ea569ca17e490d66d8142b81c3cc814bf179974b7d146e490bbb", size
= 4685593, upload-time = "2026-06-12T20:02:50.666Z" },
+ { url =
"https://files.pythonhosted.org/packages/47/f1/1d3eaa243bfc5de4a187b22aa8c048b3e4980bfbe830ac46e6bac2e66947/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl",
hash =
"sha256:f37d847238971164fdbc68ade6f6574aecc9c0af714190e2083429ff68f4ce9d", size
= 5289961, upload-time = "2026-06-12T20:01:46.468Z" },
+ { url =
"https://files.pythonhosted.org/packages/58/39/2d51306721330c486495853eda1c567880ff036de15a14c4b74f399934af/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl",
hash =
"sha256:c2bc30226390d60ea19d9f82b19db005fe0452154a23c1c410c12ea801e43561", size
= 4731145, upload-time = "2026-06-12T20:02:16.832Z" },
+ { url =
"https://files.pythonhosted.org/packages/17/50/983e838c7fd0d87fd8c969bcdd328edaf5f756e38df5281637424c155873/cryptography-49.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl",
hash =
"sha256:07cab27cc7b7e0fd28e5e26bb9eeedde5c135c868b46de4a27845abe94af6122", size
= 4321719, upload-time = "2026-06-12T20:02:52.611Z" },
+ { url =
"https://files.pythonhosted.org/packages/a7/f5/8f571d7e27c55bce9f76f026143bcb1e040a4233149ecca0bea5fa5dd5f7/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl",
hash =
"sha256:b20133d204d2bb56ba047642199603876c872026ca53e79c35b83772ab2cc505", size
= 4685209, upload-time = "2026-06-12T20:02:07.282Z" },
+ { url =
"https://files.pythonhosted.org/packages/e7/84/0e27016a6fc5a0886f797018b26aa42f40c09a82332bff77822a451deaaa/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl",
hash =
"sha256:b970c6da94d5bb18629db453d14f2a1300f6bf59b61e9b82377931ef95504866", size
= 5246285, upload-time = "2026-06-12T20:01:32.439Z" },
+ { url =
"https://files.pythonhosted.org/packages/11/2d/5e1fb307cb5931881516b464c98774b3f2c36b5d4bb9a2830253cf553cad/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl",
hash =
"sha256:d8ecde755e2e91bf773fc94e8c9d730cd7f2007004cb492263a794ec3899a1c8", size
= 4730441, upload-time = "2026-06-12T20:02:01.469Z" },
+ { url =
"https://files.pythonhosted.org/packages/e4/c0/bff5a02ee731d207d6a1ed51732549d8c53d2bc8da1d10ec6f2844201d68/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl",
hash =
"sha256:e3fb64c420688e5319ae25113a354015abbd8dffbfbc41781a1ea66fc7622ac3", size
= 4815869, upload-time = "2026-06-12T20:01:36.574Z" },
+ { url =
"https://files.pythonhosted.org/packages/b9/26/814681d14248d95d73d5c3eea0c39a94eb8302df966f670a2c60de90974b/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl",
hash =
"sha256:32703d93296f5c1f4b53349ad3a250c2cae0fdecd3a3dd5d47e616d8d616af27", size
= 4960948, upload-time = "2026-06-12T20:02:18.688Z" },
+ { url =
"https://files.pythonhosted.org/packages/4c/fe/93ecac273d3738939d023612ad12cca9a3740a5345d69fda04134c43fd96/cryptography-49.0.0-cp314-cp314t-win_amd64.whl",
hash =
"sha256:33cd0565932807baddb67b96dbee92f2c374b5c89dee09fd74079aeb8c8dba61", size
= 3799153, upload-time = "2026-06-12T20:01:39.059Z" },
+ { url =
"https://files.pythonhosted.org/packages/19/2a/5bb823f5bedcf80718cea7fbc95ec5515cca3769633c4b01a32be7f30e7c/cryptography-49.0.0-cp39-abi3-macosx_11_0_arm64.whl",
hash =
"sha256:ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a", size
= 4025947, upload-time = "2026-06-12T20:01:25.745Z" },
+ { url =
"https://files.pythonhosted.org/packages/3d/df/40577043ca124e17012f408ddddaeb213b856336ac82ddb3bc915f39e29f/cryptography-49.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
hash =
"sha256:f78ff2c9ed8dc2d036b0f4d640e22522213d047c1b14e61205a7e55c80a494d4", size
= 4692429, upload-time = "2026-06-12T20:01:53.628Z" },
+ { url =
"https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
hash =
"sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size
= 4700968, upload-time = "2026-06-12T20:02:45.383Z" },
+ { url =
"https://files.pythonhosted.org/packages/a5/4d/9c0cd02f95e2602dd5e563da149ee0830abef3537be8b34dc56281ebe27a/cryptography-49.0.0-cp39-abi3-manylinux_2_28_aarch64.whl",
hash =
"sha256:0f21641cf4b30fca7aee061ced0ec7ad7b073518088b7c9969a297c0ae796c69", size
= 4697758, upload-time = "2026-06-12T20:01:41.13Z" },
+ { url =
"https://files.pythonhosted.org/packages/24/01/186c825898477d77e2324d5360fefe622ff1d8d1963ec0554e2cada8ec77/cryptography-49.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl",
hash =
"sha256:9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64", size
= 5298863, upload-time = "2026-06-12T20:02:24.579Z" },
+ { url =
"https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl",
hash =
"sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size
= 4735983, upload-time = "2026-06-12T20:01:50.14Z" },
+ { url =
"https://files.pythonhosted.org/packages/6c/72/3e798c064bc39e471008075d0f9bc9daf77a80879c092e4a8e170c585ed4/cryptography-49.0.0-cp39-abi3-manylinux_2_31_armv7l.whl",
hash =
"sha256:8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9", size
= 4334173, upload-time = "2026-06-12T20:01:44.743Z" },
+ { url =
"https://files.pythonhosted.org/packages/f0/ee/6fca21d1ac73e06f8bef71940abfd4d2f6472b4bca284d770f32bd4086f6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_aarch64.whl",
hash =
"sha256:28d8b15e6275f12c8a207dc309dfa957903c927d08d0cc937ee3f63f200693cc", size
= 4697298, upload-time = "2026-06-12T20:02:20.918Z" },
+ { url =
"https://files.pythonhosted.org/packages/67/d0/a5fcd3515f0bae49a7b6d0413cc1bdccdcc1fc0047037a0d480642cdc5d6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl",
hash =
"sha256:6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8", size
= 5254338, upload-time = "2026-06-12T20:02:22.737Z" },
+ { url =
"https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl",
hash =
"sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size
= 4735650, upload-time = "2026-06-12T20:02:41.389Z" },
+ { url =
"https://files.pythonhosted.org/packages/6c/a0/db537264e234f7273a73ec020873d6d6b39dfd8a53db78b550ca8320440e/cryptography-49.0.0-cp39-abi3-musllinux_1_2_aarch64.whl",
hash =
"sha256:67e1d20ad9ef3a563c59ef22e7a8a0b8210bd26604369ea4a30a7c66aefe504e", size
= 4834820, upload-time = "2026-06-12T20:01:51.847Z" },
+ { url =
"https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl",
hash =
"sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size
= 4967968, upload-time = "2026-06-12T20:02:12.524Z" },
+ { url =
"https://files.pythonhosted.org/packages/c2/e6/f60198ea8d9dfa15fff9ed4ca02ce362f6eadd9ba757dcc50634c4257b63/cryptography-49.0.0-cp39-abi3-win_amd64.whl",
hash =
"sha256:026ac7423e6fa66872d3bf889be5974507da3944f866f704fa200eadacd00001", size
= 3785547, upload-time = "2026-06-12T20:02:26.847Z" },
+ { url =
"https://files.pythonhosted.org/packages/63/d3/4a83af35d65e3fad632c926fad684c193ea4398569ccb0bbbc7fe8f5dc9a/cryptography-49.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl",
hash =
"sha256:fc1e275c2f1d97b1a6450b8b0ea3ebfa6e087a611c2b26cb2404d48588abab7b", size
= 3993685, upload-time = "2026-06-12T20:02:14.883Z" },
+ { url =
"https://files.pythonhosted.org/packages/d6/a7/f9dac0ab7f80368c56993a7bf638ef9935f825c91902798481fac0898138/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl",
hash =
"sha256:c83782480a4a9da4d0feb51950131ba32e12e70813848b3343f6e18c28a66838", size
= 4676239, upload-time = "2026-06-12T20:02:28.793Z" },
+ { url =
"https://files.pythonhosted.org/packages/d7/70/2ba3769dd0ae167e2f33dfa9592d45db6ff9a61d62ca1a5b3d1bdd09068f/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl",
hash =
"sha256:b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5", size
= 4715584, upload-time = "2026-06-12T20:01:27.495Z" },
+ { url =
"https://files.pythonhosted.org/packages/94/64/2923570ac1c0bd3a737aa366ac3abbbbde273042308b8cde95e2364a6e6a/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl",
hash =
"sha256:b47db11c2c3525083296069b98ac5221907455e989ae0c2e3008bde851921615", size
= 4675885, upload-time = "2026-06-12T20:01:55.49Z" },
+ { url =
"https://files.pythonhosted.org/packages/ab/f8/614dc7e051418cfe53d55173c1e24c6b0085e89996fe90508c2fdf769aef/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl",
hash =
"sha256:084ef1af862eb07ec46d25f68689f2102a9fc0e05ce7b80f14f5fe51e4eef0f6", size
= 4715449, upload-time = "2026-06-12T20:02:05.469Z" },
+ { url =
"https://files.pythonhosted.org/packages/aa/50/a9caea39ad19c431c1a3f8a31114df65b260cdfe67786b6c7e7c040c4c44/cryptography-49.0.0-pp311-pypy311_pp73-win_amd64.whl",
hash =
"sha256:be9fcb48a55f023493482827d4f459bd263cc20efde64f204b97c123201850c6", size
= 3783731, upload-time = "2026-06-12T20:02:43.319Z" },
+]
+
[[package]]
name = "dill"
version = "0.4.0"
@@ -1233,7 +1305,8 @@ name = "msal"
version = "1.37.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cryptography" },
+ { name = "cryptography", version = "46.0.7", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "cryptography", version = "49.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
{ name = "pyjwt", extra = ["crypto"] },
{ name = "requests" },
]
@@ -1374,7 +1447,8 @@ version = "5.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "bcrypt" },
- { name = "cryptography" },
+ { name = "cryptography", version = "46.0.7", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "cryptography", version = "49.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
{ name = "invoke" },
{ name = "pynacl" },
]
@@ -1662,7 +1736,8 @@ wheels = [
[package.optional-dependencies]
crypto = [
- { name = "cryptography" },
+ { name = "cryptography", version = "46.0.7", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "cryptography", version = "49.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
]
[[package]]
@@ -1723,15 +1798,35 @@ wheels = [
name = "pyopenssl"
version = "26.0.0"
source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.11'",
+]
dependencies = [
- { name = "cryptography" },
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+ { name = "cryptography", version = "46.0.7", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
sdist = { url =
"https://files.pythonhosted.org/packages/8e/11/a62e1d33b373da2b2c2cd9eb508147871c80f12b1cacde3c5d314922afdd/pyopenssl-26.0.0.tar.gz",
hash =
"sha256:f293934e52936f2e3413b89c6ce36df66a0b34ae1ea3a053b8c5020ff2f513fc", size
= 185534, upload-time = "2026-03-15T14:28:26.353Z" }
wheels = [
{ url =
"https://files.pythonhosted.org/packages/fb/7d/d4f7d908fa8415571771b30669251d57c3cf313b36a856e6d7548ae01619/pyopenssl-26.0.0-py3-none-any.whl",
hash =
"sha256:df94d28498848b98cc1c0ffb8ef1e71e40210d3b0a8064c9d29571ed2904bf81", size
= 57969, upload-time = "2026-03-15T14:28:24.864Z" },
]
+[[package]]
+name = "pyopenssl"
+version = "26.3.0"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+]
+dependencies = [
+ { name = "cryptography", version = "49.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
+ { name = "typing-extensions", marker = "python_full_version >= '3.11' and
python_full_version < '3.13'" },
+]
+sdist = { url =
"https://files.pythonhosted.org/packages/74/b7/da07bae88f5a9506b4def6f2f4903cf4c3b8831e560dba8fa18ca08f758f/pyopenssl-26.3.0.tar.gz",
hash =
"sha256:589de7fae1c9ea670d18422ed00fc04da787bbde8e1454aea872aa57b49ad341", size
= 182024, upload-time = "2026-06-12T20:28:07.458Z" }
+wheels = [
+ { url =
"https://files.pythonhosted.org/packages/54/18/1dd71c9b43192ab83f1d531ad6002dc81108ac36c475f79fb7a295abe2f4/pyopenssl-26.3.0-py3-none-any.whl",
hash =
"sha256:46367f8f66b92271e6d218da9c87607e1ef5a0bc5c8dea5bb3db82f395c385a3", size
= 56008, upload-time = "2026-06-12T20:28:05.999Z" },
+]
+
[[package]]
name = "pyproject-api"
version = "1.10.0"
@@ -2106,7 +2201,8 @@ name = "secretstorage"
version = "3.5.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cryptography" },
+ { name = "cryptography", version = "46.0.7", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "cryptography", version = "49.0.0", source = { registry =
"https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
{ name = "jeepney" },
]
sdist = { url =
"https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz",
hash =
"sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size
= 19884, upload-time = "2025-11-23T19:02:53.191Z" }