You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2026/08/05 09:08:06 UTC
(airflow) branch exclude-not-ready-providers-from-all created (now a0de5f4dc2b)
This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a change to branch exclude-not-ready-providers-from-all
in repository https://gitbox.apache.org/repos/asf/airflow.git
at a0de5f4dc2b Keep not-ready providers out of the all extra
This branch includes the following new commits:
new a0de5f4dc2b Keep not-ready providers out of the all extra
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(airflow) 01/01: Keep not-ready providers out of the all extra
Posted by po...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch exclude-not-ready-providers-from-all
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit a0de5f4dc2bbc7bce4b257564af659d0f5a2abd8
Author: Jarek Potiuk <ja...@potiuk.com>
AuthorDate: Wed Aug 5 17:07:01 2026 +0800
Keep not-ready providers out of the all extra
A not-ready provider has never been published, so naming it in an extra makes
that extra impossible to satisfy - there is no version on PyPI to resolve to.
It broke constraints generation for 3.3.1rc1, where apache-airflow[all] could
not resolve because it required apache-airflow-providers-ibm-mq.
---
pyproject.toml | 20 ----
scripts/ci/prek/common_prek_utils.py | 17 +++-
scripts/ci/prek/update_airflow_pyproject_toml.py | 13 ++-
uv.lock | 111 +----------------------
4 files changed, 27 insertions(+), 134 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index be805a23ca0..eaaab506557 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -191,9 +191,6 @@ apache-airflow = "airflow.__main__:main"
"common.compat" = [
"apache-airflow-providers-common-compat>=1.2.1"
]
-"common.dataquality" = [
- "apache-airflow-providers-common-dataquality>=0.1.0"
-]
"common.io" = [
"apache-airflow-providers-common-io>=1.4.2"
]
@@ -257,9 +254,6 @@ apache-airflow = "airflow.__main__:main"
"http" = [
"apache-airflow-providers-http>=4.13.2"
]
-"ibm.mq" = [
- "apache-airflow-providers-ibm-mq>=0.1.0; platform_machine !=\"aarch64\" and platform_machine !=\"arm64\""
-]
"imap" = [
"apache-airflow-providers-imap>=3.8.0"
]
@@ -444,7 +438,6 @@ apache-airflow = "airflow.__main__:main"
"apache-airflow-providers-cohere>=1.4.0",
"apache-airflow-providers-common-ai>=0.1.0",
"apache-airflow-providers-common-compat>=1.2.1",
- "apache-airflow-providers-common-dataquality>=0.1.0",
"apache-airflow-providers-common-io>=1.4.2",
"apache-airflow-providers-common-messaging>=2.0.0", # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
"apache-airflow-providers-common-sql>=1.18.0",
@@ -466,7 +459,6 @@ apache-airflow = "airflow.__main__:main"
"apache-airflow-providers-grpc>=3.7.0",
"apache-airflow-providers-hashicorp>=4.0.0",
"apache-airflow-providers-http>=4.13.2",
- "apache-airflow-providers-ibm-mq>=0.1.0; platform_machine !=\"aarch64\" and platform_machine !=\"arm64\"",
"apache-airflow-providers-imap>=3.8.0",
"apache-airflow-providers-influxdb>=2.8.0",
"apache-airflow-providers-informatica>=0.1.1",
@@ -1154,8 +1146,6 @@ mypy_path = [
"$MYPY_CONFIG_FILE_DIR/providers/common/ai/tests",
"$MYPY_CONFIG_FILE_DIR/providers/common/compat/src",
"$MYPY_CONFIG_FILE_DIR/providers/common/compat/tests",
- "$MYPY_CONFIG_FILE_DIR/providers/common/dataquality/src",
- "$MYPY_CONFIG_FILE_DIR/providers/common/dataquality/tests",
"$MYPY_CONFIG_FILE_DIR/providers/common/io/src",
"$MYPY_CONFIG_FILE_DIR/providers/common/io/tests",
"$MYPY_CONFIG_FILE_DIR/providers/common/messaging/src",
@@ -1198,8 +1188,6 @@ mypy_path = [
"$MYPY_CONFIG_FILE_DIR/providers/hashicorp/tests",
"$MYPY_CONFIG_FILE_DIR/providers/http/src",
"$MYPY_CONFIG_FILE_DIR/providers/http/tests",
- "$MYPY_CONFIG_FILE_DIR/providers/ibm/mq/src",
- "$MYPY_CONFIG_FILE_DIR/providers/ibm/mq/tests",
"$MYPY_CONFIG_FILE_DIR/providers/imap/src",
"$MYPY_CONFIG_FILE_DIR/providers/imap/tests",
"$MYPY_CONFIG_FILE_DIR/providers/influxdb/src",
@@ -1468,7 +1456,6 @@ apache-airflow-providers-cncf-kubernetes = false
apache-airflow-providers-cohere = false
apache-airflow-providers-common-ai = false
apache-airflow-providers-common-compat = false
-apache-airflow-providers-common-dataquality = false
apache-airflow-providers-common-io = false
apache-airflow-providers-common-messaging = false
apache-airflow-providers-common-sql = false
@@ -1490,7 +1477,6 @@ apache-airflow-providers-google = false
apache-airflow-providers-grpc = false
apache-airflow-providers-hashicorp = false
apache-airflow-providers-http = false
-apache-airflow-providers-ibm-mq = false
apache-airflow-providers-imap = false
apache-airflow-providers-influxdb = false
apache-airflow-providers-informatica = false
@@ -1620,7 +1606,6 @@ apache-airflow-providers-cncf-kubernetes = false
apache-airflow-providers-cohere = false
apache-airflow-providers-common-ai = false
apache-airflow-providers-common-compat = false
-apache-airflow-providers-common-dataquality = false
apache-airflow-providers-common-io = false
apache-airflow-providers-common-messaging = false
apache-airflow-providers-common-sql = false
@@ -1642,7 +1627,6 @@ apache-airflow-providers-google = false
apache-airflow-providers-grpc = false
apache-airflow-providers-hashicorp = false
apache-airflow-providers-http = false
-apache-airflow-providers-ibm-mq = false
apache-airflow-providers-imap = false
apache-airflow-providers-influxdb = false
apache-airflow-providers-informatica = false
@@ -1783,7 +1767,6 @@ apache-airflow-providers-cncf-kubernetes = { workspace = true }
apache-airflow-providers-cohere = { workspace = true }
apache-airflow-providers-common-ai = { workspace = true }
apache-airflow-providers-common-compat = { workspace = true }
-apache-airflow-providers-common-dataquality = { workspace = true }
apache-airflow-providers-common-io = { workspace = true }
apache-airflow-providers-common-messaging = { workspace = true }
apache-airflow-providers-common-sql = { workspace = true }
@@ -1805,7 +1788,6 @@ apache-airflow-providers-google = { workspace = true }
apache-airflow-providers-grpc = { workspace = true }
apache-airflow-providers-hashicorp = { workspace = true }
apache-airflow-providers-http = { workspace = true }
-apache-airflow-providers-ibm-mq = { workspace = true }
apache-airflow-providers-imap = { workspace = true }
apache-airflow-providers-influxdb = { workspace = true }
apache-airflow-providers-informatica = { workspace = true }
@@ -1924,7 +1906,6 @@ members = [
"providers/cohere",
"providers/common/ai",
"providers/common/compat",
- "providers/common/dataquality",
"providers/common/io",
"providers/common/messaging",
"providers/common/sql",
@@ -1946,7 +1927,6 @@ members = [
"providers/grpc",
"providers/hashicorp",
"providers/http",
- "providers/ibm/mq",
"providers/imap",
"providers/influxdb",
"providers/informatica",
diff --git a/scripts/ci/prek/common_prek_utils.py b/scripts/ci/prek/common_prek_utils.py
index e316eb154ae..559c2f0a047 100644
--- a/scripts/ci/prek/common_prek_utils.py
+++ b/scripts/ci/prek/common_prek_utils.py
@@ -591,19 +591,30 @@ def get_provider_base_dir_from_path(file_path: Path) -> Path | None:
return None
-def get_all_provider_ids(exclude_suspended_providers: bool = False) -> list[str]:
+def get_all_provider_ids(
+ exclude_suspended_providers: bool = False, exclude_not_ready_providers: bool = False
+) -> list[str]:
"""
Get all providers from the new provider structure
+
+ :param exclude_suspended_providers: skip providers whose state is ``suspended``
+ :param exclude_not_ready_providers: skip providers whose state is ``not-ready`` - those have
+ never been published, so anything describing what is installable must leave them out
"""
all_provider_ids = []
+ excluded_states = set()
+ if exclude_suspended_providers:
+ excluded_states.add("suspended")
+ if exclude_not_ready_providers:
+ excluded_states.add("not-ready")
for provider_file in AIRFLOW_PROVIDERS_ROOT_PATH.rglob("provider.yaml"):
if provider_file.is_relative_to(AIRFLOW_PROVIDERS_ROOT_PATH / "src"):
continue
- if exclude_suspended_providers:
+ if excluded_states:
import yaml
provider_info = yaml.safe_load(provider_file.read_text())
- if provider_info.get("state") == "suspended":
+ if provider_info.get("state") in excluded_states:
continue
provider_id = get_provider_id_from_path(provider_file)
if provider_id:
diff --git a/scripts/ci/prek/update_airflow_pyproject_toml.py b/scripts/ci/prek/update_airflow_pyproject_toml.py
index 2313790e0a5..39a82a96062 100755
--- a/scripts/ci/prek/update_airflow_pyproject_toml.py
+++ b/scripts/ci/prek/update_airflow_pyproject_toml.py
@@ -269,7 +269,11 @@ if __name__ == "__main__":
all_optional_dependencies.append(f'"{optional}" = [\n "apache-airflow-core[{optional}]"\n]\n')
optional_airflow_task_sdk_dependencies = get_optional_dependencies(AIRFLOW_TASK_SDK_PYPROJECT_TOML_FILE)
all_optional_dependencies.append('"all-task-sdk" = [\n "apache-airflow-task-sdk[all]"\n]\n')
- all_providers = sorted(get_all_provider_ids(exclude_suspended_providers=True))
+ # A not-ready provider has never been released, so naming it in an extra makes that extra
+ # unsatisfiable - there is no version of it on PyPI to resolve to.
+ all_providers = sorted(
+ get_all_provider_ids(exclude_suspended_providers=True, exclude_not_ready_providers=True)
+ )
all_provider_lines = []
for provider_id in all_providers:
distribution_name = provider_distribution_name(provider_id)
@@ -288,10 +292,15 @@ if __name__ == "__main__":
all_provider_lines.append(f' "{distribution_name}",\n')
all_optional_dependencies.append('"all" = [\n')
optional_apache_airflow_dependencies = get_optional_dependencies(AIRFLOW_PYPROJECT_TOML_FILE)
+ # Filtered against every provider id rather than against `all_providers`: a provider left out of
+ # `all_providers` still has an extra named after it, and testing only against the included ones
+ # would sweep that extra in here instead of dropping it - which is how a not-ready provider would
+ # come back into `all` through the side door.
+ every_provider_id = set(get_all_provider_ids())
all_local_extras = [
extra
for extra in sorted(optional_apache_airflow_dependencies)
- if extra not in all_providers and not extra.startswith("all")
+ if extra not in every_provider_id and not extra.startswith("all")
]
all_optional_dependencies.append(f' "apache-airflow[{",".join(all_local_extras)}]",\n')
all_optional_dependencies.append(' "apache-airflow-core[all]",\n')
diff --git a/uv.lock b/uv.lock
index 3b52d8d26c2..532992ded2b 100644
--- a/uv.lock
+++ b/uv.lock
@@ -33,7 +33,6 @@ apache-airflow-providers-openlineage = false
apache-airflow-providers-sftp = false
apache-airflow-e2e-tests = false
apache-airflow-shared-logging = false
-apache-airflow-providers-common-dataquality = false
apache-airflow-providers-apache-drill = false
apache-airflow-providers-pgvector = false
apache-airflow-providers-imap = false
@@ -64,9 +63,9 @@ apache-airflow-providers-apache-cassandra = false
apache-airflow-providers-asana = false
apache-airflow-providers-oracle = false
apache-airflow-providers-mysql = false
-apache-airflow-providers-teradata = false
apache-airflow-providers-alibaba = false
apache-airflow-providers-microsoft-mssql = false
+apache-airflow-providers-teradata = false
apache-airflow-providers-jdbc = false
apache-airflow-helm-chart = false
apache-airflow-providers-anthropic = false
@@ -96,7 +95,6 @@ apache-airflow-providers-databricks = false
apache-airflow-shared-state = false
apache-airflow-docker-stack = false
apache-airflow-providers-sqlite = false
-apache-airflow-providers-ibm-mq = false
apache-airflow-shared-module-loading = false
apache-airflow-providers-yandex = false
apache-airflow-shared-serialization = false
@@ -205,7 +203,6 @@ members = [
"apache-airflow-providers-cohere",
"apache-airflow-providers-common-ai",
"apache-airflow-providers-common-compat",
- "apache-airflow-providers-common-dataquality",
"apache-airflow-providers-common-io",
"apache-airflow-providers-common-messaging",
"apache-airflow-providers-common-sql",
@@ -227,7 +224,6 @@ members = [
"apache-airflow-providers-grpc",
"apache-airflow-providers-hashicorp",
"apache-airflow-providers-http",
- "apache-airflow-providers-ibm-mq",
"apache-airflow-providers-imap",
"apache-airflow-providers-influxdb",
"apache-airflow-providers-informatica",
@@ -1032,7 +1028,6 @@ all = [
{ name = "apache-airflow-providers-cohere" },
{ name = "apache-airflow-providers-common-ai" },
{ name = "apache-airflow-providers-common-compat" },
- { name = "apache-airflow-providers-common-dataquality" },
{ name = "apache-airflow-providers-common-io" },
{ name = "apache-airflow-providers-common-messaging" },
{ name = "apache-airflow-providers-common-sql", extra = ["pandas", "polars"] },
@@ -1054,7 +1049,6 @@ all = [
{ name = "apache-airflow-providers-grpc" },
{ name = "apache-airflow-providers-hashicorp" },
{ name = "apache-airflow-providers-http" },
- { name = "apache-airflow-providers-ibm-mq", marker = "platform_machine != 'aarch64' and platform_machine != 'arm64'" },
{ name = "apache-airflow-providers-imap" },
{ name = "apache-airflow-providers-influxdb" },
{ name = "apache-airflow-providers-informatica" },
@@ -1217,9 +1211,6 @@ common-ai = [
common-compat = [
{ name = "apache-airflow-providers-common-compat" },
]
-common-dataquality = [
- { name = "apache-airflow-providers-common-dataquality" },
-]
common-io = [
{ name = "apache-airflow-providers-common-io" },
]
@@ -1297,9 +1288,6 @@ hashicorp = [
http = [
{ name = "apache-airflow-providers-http" },
]
-ibm-mq = [
- { name = "apache-airflow-providers-ibm-mq", marker = "platform_machine != 'aarch64' and platform_machine != 'arm64'" },
-]
imap = [
{ name = "apache-airflow-providers-imap" },
]
@@ -1632,8 +1620,6 @@ requires-dist = [
{ name = "apache-airflow-providers-common-ai", marker = "extra == 'common-ai'", editable = "providers/common/ai" },
{ name = "apache-airflow-providers-common-compat", marker = "extra == 'all'", editable = "providers/common/compat" },
{ name = "apache-airflow-providers-common-compat", marker = "extra == 'common-compat'", editable = "providers/common/compat" },
- { name = "apache-airflow-providers-common-dataquality", marker = "extra == 'all'", editable = "providers/common/dataquality" },
- { name = "apache-airflow-providers-common-dataquality", marker = "extra == 'common-dataquality'", editable = "providers/common/dataquality" },
{ name = "apache-airflow-providers-common-io", marker = "extra == 'all'", editable = "providers/common/io" },
{ name = "apache-airflow-providers-common-io", marker = "extra == 'common-io'", editable = "providers/common/io" },
{ name = "apache-airflow-providers-common-messaging", marker = "extra == 'all'", editable = "providers/common/messaging" },
@@ -1680,8 +1666,6 @@ requires-dist = [
{ name = "apache-airflow-providers-hashicorp", marker = "extra == 'hashicorp'", editable = "providers/hashicorp" },
{ name = "apache-airflow-providers-http", marker = "extra == 'all'", editable = "providers/http" },
{ name = "apache-airflow-providers-http", marker = "extra == 'http'", editable = "providers/http" },
- { name = "apache-airflow-providers-ibm-mq", marker = "platform_machine != 'aarch64' and platform_machine != 'arm64' and extra == 'all'", editable = "providers/ibm/mq" },
- { name = "apache-airflow-providers-ibm-mq", marker = "platform_machine != 'aarch64' and platform_machine != 'arm64' and extra == 'ibm-mq'", editable = "providers/ibm/mq" },
{ name = "apache-airflow-providers-imap", marker = "extra == 'all'", editable = "providers/imap" },
{ name = "apache-airflow-providers-imap", marker = "extra == 'imap'", editable = "providers/imap" },
{ name = "apache-airflow-providers-influxdb", marker = "extra == 'all'", editable = "providers/influxdb" },
@@ -1792,7 +1776,7 @@ requires-dist = [
{ name = "sentry-sdk", marker = "extra == 'sentry'", specifier = ">=2.30.0" },
{ name = "uv", marker = "extra == 'uv'", specifier = ">=0.11.29" },
]
-provides-extras = ["all-core", "async", "graphviz", "gunicorn", "kerberos", "memray", "otel", "statsd", "all-task-sdk", "airbyte", "akeyless", "alibaba", "amazon", "anthropic", "apache-cassandra", "apache-drill", "apache-druid", "apache-flink", "apache-hdfs", "apache-hive", "apache-iceberg", "apache-impala", "apache-kafka", "apache-kylin", "apache-livy", "apache-pig", "apache-pinot", "apache-spark", "apache-tinkerpop", "apprise", "arangodb", "asana", "atlassian-jira", "celery", "clickhou [...]
+provides-extras = ["all-core", "async", "graphviz", "gunicorn", "kerberos", "memray", "otel", "statsd", "all-task-sdk", "airbyte", "akeyless", "alibaba", "amazon", "anthropic", "apache-cassandra", "apache-drill", "apache-druid", "apache-flink", "apache-hdfs", "apache-hive", "apache-iceberg", "apache-impala", "apache-kafka", "apache-kylin", "apache-livy", "apache-pig", "apache-pinot", "apache-spark", "apache-tinkerpop", "apprise", "arangodb", "asana", "atlassian-jira", "celery", "clickhou [...]
[package.metadata.requires-dev]
ci-image = [
@@ -4574,35 +4558,6 @@ dev = [
]
docs = [{ name = "apache-airflow-devel-common", extras = ["docs"], editable = "devel-common" }]
-[[package]]
-name = "apache-airflow-providers-common-dataquality"
-version = "0.1.0"
-source = { editable = "providers/common/dataquality" }
-dependencies = [
- { name = "apache-airflow" },
-]
-
-[package.dev-dependencies]
-dev = [
- { name = "apache-airflow" },
- { name = "apache-airflow-devel-common" },
- { name = "apache-airflow-task-sdk" },
-]
-docs = [
- { name = "apache-airflow-devel-common", extra = ["docs"] },
-]
-
-[package.metadata]
-requires-dist = [{ name = "apache-airflow", editable = "." }]
-
-[package.metadata.requires-dev]
-dev = [
- { name = "apache-airflow", editable = "." },
- { name = "apache-airflow-devel-common", editable = "devel-common" },
- { name = "apache-airflow-task-sdk", editable = "task-sdk" },
-]
-docs = [{ name = "apache-airflow-devel-common", extras = ["docs"], editable = "devel-common" }]
-
[[package]]
name = "apache-airflow-providers-common-io"
version = "1.8.0"
@@ -5947,57 +5902,6 @@ dev = [
]
docs = [{ name = "apache-airflow-devel-common", extras = ["docs"], editable = "devel-common" }]
-[[package]]
-name = "apache-airflow-providers-ibm-mq"
-version = "0.1.0"
-source = { editable = "providers/ibm/mq" }
-dependencies = [
- { name = "apache-airflow" },
- { name = "apache-airflow-providers-common-compat" },
- { name = "asgiref" },
-]
-
-[package.optional-dependencies]
-common-messaging = [
- { name = "apache-airflow-providers-common-messaging" },
-]
-ibmmq = [
- { name = "ibmmq", marker = "platform_machine != 'aarch64' and platform_machine != 'arm64'" },
-]
-
-[package.dev-dependencies]
-dev = [
- { name = "apache-airflow" },
- { name = "apache-airflow-devel-common" },
- { name = "apache-airflow-providers-common-compat" },
- { name = "apache-airflow-providers-common-messaging" },
- { name = "apache-airflow-task-sdk" },
-]
-docs = [
- { name = "apache-airflow-devel-common", extra = ["docs"] },
-]
-
-[package.metadata]
-requires-dist = [
- { name = "apache-airflow", editable = "." },
- { name = "apache-airflow-providers-common-compat", editable = "providers/common/compat" },
- { name = "apache-airflow-providers-common-messaging", marker = "extra == 'common-messaging'", editable = "providers/common/messaging" },
- { name = "asgiref", marker = "python_full_version < '3.14'", specifier = ">=2.3.0" },
- { name = "asgiref", marker = "python_full_version >= '3.14'", specifier = ">=3.11.1" },
- { name = "ibmmq", marker = "platform_machine != 'aarch64' and platform_machine != 'arm64' and extra == 'ibmmq'", specifier = ">=2.0.6" },
-]
-provides-extras = ["ibmmq", "common-messaging"]
-
-[package.metadata.requires-dev]
-dev = [
- { name = "apache-airflow", editable = "." },
- { name = "apache-airflow-devel-common", editable = "devel-common" },
- { name = "apache-airflow-providers-common-compat", editable = "providers/common/compat" },
- { name = "apache-airflow-providers-common-messaging", editable = "providers/common/messaging" },
- { name = "apache-airflow-task-sdk", editable = "task-sdk" },
-]
-docs = [{ name = "apache-airflow-devel-common", extras = ["docs"], editable = "devel-common" }]
-
[[package]]
name = "apache-airflow-providers-imap"
version = "3.12.1"
@@ -14336,17 +14240,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/88/50/c94fc1cbe59c33b561e0d8e327172a4f451ff9f13b497c04149c6de0f76a/ibmcloudant-0.11.9-py3-none-any.whl", hash = "sha256:1738e0dcf888a88fbe0c8ddd3640aa0fa2c17e19cd916415aada7af0a889d8b5", size = 120805, upload-time = "2026-07-07T09:37:02.045Z" },
]
-[[package]]
-name = "ibmmq"
-version = "2.1.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/6a/6b/e8e38a3e1b828c029e4b0aa39ecdd940319ffe725273a0f8be6efae88a7c/ibmmq-2.1.0.tar.gz", hash = "sha256:63ac906290700b55e88cc7c32232579e4419aba209830b6009d6d89cbb089555", size = 436005, upload-time = "2026-06-17T11:48:41.238Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/2d/e6/d17301d1171dea40b6ed642557174c0de78fea46568756106d143e98cc88/ibmmq-2.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:9dbb2b509ec1e86a8111480e35c5b346fa21bae7266c35634d76dd377da80fdb", size = 395482, upload-time = "2026-06-17T11:48:36.803Z" },
- { url = "https://files.pythonhosted.org/packages/d1/2e/f8b4f8088ca697d9d5978fba6e5d9a1adf83421346c51800b3700b179f52/ibmmq-2.1.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:81c65da995be055d4fe02eb65ab05b8c5465324d3c320d5def63bbea32c08087", size = 435602, upload-time = "2026-07-06T08:02:24.283Z" },
- { url = "https://files.pythonhosted.org/packages/20/09/e833b4e18115c94df8b3e6c293755a1cdb5bbd30b935ecc71b89e0206874/ibmmq-2.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:5d68c837f216721b2d6d7495cf91c717670a5cec383b28aa584616a9c48c1c30", size = 400532, upload-time = "2026-06-17T11:48:38.923Z" },
-]
-
[[package]]
name = "icalendar"
version = "7.2.0"