From 87cdbf05e60059f82d877d25ddf618fd9e4a366b Mon Sep 17 00:00:00 2001 From: fossdd Date: Sat, 25 May 2024 10:35:40 +0000 Subject: [PATCH] community/aws-cli: enable, upgrade to 2.15.57 --- community/aws-cli/APKBUILD | 25 +- community/aws-cli/allow-egg-info.patch | 13 + .../aws-cli/aws-cli-v2-ruamel-yaml-v4.patch | 111 ++++++ community/aws-cli/aws-cli-v2-tz-fix.patch | 42 ++ community/aws-cli/botocore-2551.patch | 367 ++++++++++++++++++ community/aws-cli/botocore-2922.patch | 36 ++ community/aws-cli/botocore-2924.patch | 27 ++ community/aws-cli/botocore-2967.patch | 85 ++++ community/aws-cli/botocore-2990-rebased.patch | 77 ++++ 9 files changed, 778 insertions(+), 5 deletions(-) create mode 100644 community/aws-cli/allow-egg-info.patch create mode 100644 community/aws-cli/aws-cli-v2-ruamel-yaml-v4.patch create mode 100644 community/aws-cli/aws-cli-v2-tz-fix.patch create mode 100644 community/aws-cli/botocore-2551.patch create mode 100644 community/aws-cli/botocore-2922.patch create mode 100644 community/aws-cli/botocore-2924.patch create mode 100644 community/aws-cli/botocore-2967.patch create mode 100644 community/aws-cli/botocore-2990-rebased.patch diff --git a/community/aws-cli/APKBUILD b/community/aws-cli/APKBUILD index c2f831cb3a5..350e9353f7f 100644 --- a/community/aws-cli/APKBUILD +++ b/community/aws-cli/APKBUILD @@ -1,15 +1,14 @@ # Contributor: Valery Kartel # Maintainer: pkgname=aws-cli -pkgver=2.15.30 +pkgver=2.15.57 pkgrel=0 pkgdesc="Universal Command Line Interface for Amazon Web Services (v2)" url="https://github.com/aws/aws-cli" # s390x: py3-awscrt doesn't support big-endian # arm*, ppc64le: py3-awscrt # x86: fails check, so most likely not supported on 32-bit anymore -# no python 3.12 support: https://github.com/aws/aws-cli/issues/8342 -#arch="all !x86 !armhf !armv7 !ppc64le !s390x" +arch="all !x86 !armhf !armv7 !ppc64le !s390x" license="Apache-2.0" depends=" py3-awscrt @@ -45,6 +44,14 @@ subpackages=" $pkgname-bash-completion:bashcomp " source="$pkgname-$pkgver.tar.gz::https://github.com/aws/aws-cli/archive/$pkgver.tar.gz + allow-egg-info.patch + aws-cli-v2-ruamel-yaml-v4.patch + aws-cli-v2-tz-fix.patch + botocore-2551.patch + botocore-2922.patch + botocore-2924.patch + botocore-2967.patch + botocore-2990-rebased.patch fix-env.patch tmpfile-index.patch " @@ -74,7 +81,7 @@ check() { # each core takes like 2gb, so be a little conservative local cores cores="$(nproc)" - cores="$((cores / 2))" + cores="$((cores / 3))" python3 -m venv --clear --without-pip --system-site-packages .testenv .testenv/bin/python3 -m installer .dist/*.whl @@ -130,7 +137,15 @@ doc() { } sha512sums=" -eedf2027a36122bad94e6090a4511fc9438f509a19d97b57fc79ec9b4f7df88003f04584fc9ecbf499b7d37430bf00d2eba333f1354dea8c69805b7bdffa8406 aws-cli-2.15.30.tar.gz +cd35ed602d9a06a58fb16ded5f1f559c9d1841fc96fdad8402e625aa56b2ca246a5b631f0915ec091591ac63cce296842f0a87b26c77c9b83a81bcbb2e1d0e15 aws-cli-2.15.57.tar.gz +ed05961344a0acb8c7b8aaf913f8e782c90ece23aa89006112e9b1c2ea6d0cfa21efc6b38ac1f6b604182b09824675fe6ef68f6394c3b10dfa9e75f82c7cd387 aws-cli-v2-ruamel-yaml-v4.patch +66c813b52d1fa402d89cd4381237175b3c8f52546e60f4a9703c27281f4a27d579751b90468a84208f94743b3c58e041cf9e9c9f28387ea06897575db8e46946 aws-cli-v2-tz-fix.patch +e0647b8690c139617da696318124b74a19b938c56d836f6531a86e031ec9fd9e43798807a3519d78c9abba59aa8b6679623dc75b579ce57ebb4dff55569fa18d botocore-2551.patch +0b47b8329863dd71e4aeac18eb1175b47a68e45df0becae738ec3bf72f908cf96f99dffd7714c3835e014b1c100701a6652e1db3d2e415162fcc9c8a098cf201 botocore-2922.patch +99d8e7755149033fa86ae246de07f6c320991d111affd9a98618182fa1fdebf466e3be693671bb1dda4d5ac514f001446ff68cf156b98f33dc48c9a541d89c53 botocore-2924.patch +506733c13d1034684baf771c872aadbc4bad8037e05f588acde68071b73bd2d8fcf41a21562324210316cbdd1929c44ceca3273f174caf7af6470d8b27518fb1 botocore-2967.patch +79ff2138a7b9dbddedd059f0e1e3ef8f92708a93e2c65293de33298de65e5a3360e6e8af05c18b4763f1a7221198f4aa1ca2afd901fd748ad545ffea5fe8471a botocore-2990-rebased.patch 850b4ca6e09f96cba8968d2d7a3b60bd5206d7c4c257ba927b576336a992796b51263506cdd100314604ec7ad493a26326bf059ccd7f96772ad9326aa68ee41e fix-env.patch ecfad03dafbdc8cdc73f41a432f0acb53ce3636f58a8b3d0cfcef06617f24ee8588e0648ee7290148bcfc8a3007d00b865899d473a6653d970a55be63760551f tmpfile-index.patch +3780a1b8af4d0098315beacd9a6a7cb4ebac08d4c1194dc55b5db6f0a28c46e45da85f0b94da2e005c5327686f8c4a2b99ee45b3cf847b3bbf5d82c80b433f50 allow-egg-info.patch " diff --git a/community/aws-cli/allow-egg-info.patch b/community/aws-cli/allow-egg-info.patch new file mode 100644 index 00000000000..145ef7f40ec --- /dev/null +++ b/community/aws-cli/allow-egg-info.patch @@ -0,0 +1,13 @@ +diff --git a/tests/dependencies/test_closure.py b/tests/dependencies/test_closure.py +index 6231438cd..b5f2b0515 100644 +--- a/tests/dependencies/test_closure.py ++++ b/tests/dependencies/test_closure.py +@@ -83,7 +83,7 @@ class Package: + snake_case_name = name.replace("-", "_") + for sitepackages in site.getsitepackages(): + for filename in os.listdir(sitepackages): +- if fnmatch.fnmatch(filename, f"{snake_case_name}-*.dist-info"): ++ if fnmatch.fnmatch(filename, f"{snake_case_name}-*.dist-info") or fnmatch.fnmatch(filename, f"{snake_case_name}-*.egg-info"): + return importlib.metadata.Distribution.at( + os.path.join(sitepackages, filename) + ) diff --git a/community/aws-cli/aws-cli-v2-ruamel-yaml-v4.patch b/community/aws-cli/aws-cli-v2-ruamel-yaml-v4.patch new file mode 100644 index 00000000000..0972e8d3707 --- /dev/null +++ b/community/aws-cli/aws-cli-v2-ruamel-yaml-v4.patch @@ -0,0 +1,111 @@ +From 0331e399231b6cdb54b7b3bdd01a793647053cdd Mon Sep 17 00:00:00 2001 +From: Chih-Hsuan Yen <645432-yan12125@users.noreply.gitlab.com> +Date: Sat, 29 Jul 2023 17:32:06 +0800 +Subject: [PATCH] Support newer ruamel-yaml + +* ruamel-yaml 0.17.22 comes with a style change that affects test results. + From https://sourceforge.net/p/ruamel-yaml/code/ci/0.17.22/tree/CHANGES + +> plain scalars: put single words longer than width on a line of their own, instead of after the previous line + +* ruamel-yaml 0.17.29 introduces an issue with add_constructor and + DEFAULT_MAPPING_TAG, and the issue is fixed with 0.17.36 [1], hence the + new lower bound. + +[1] https://sourceforge.net/p/ruamel-yaml/tickets/482/ +--- + pyproject.toml | 4 ++-- + tests/functional/eks/testdata/output_combined | 6 ++++-- + .../eks/testdata/output_combined_changed_ordering | 6 ++++-- + tests/functional/eks/testdata/output_single | 3 ++- + tests/functional/eks/testdata/valid_old_api_version_updated | 3 ++- + 5 files changed, 14 insertions(+), 8 deletions(-) + +diff --git a/pyproject.toml b/pyproject.toml +index fef9a3068d5..1e436a88149 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -31,7 +31,7 @@ dependencies = [ + "colorama>=0.2.5,<0.4.7", + "docutils>=0.10,<0.20", + "cryptography>=3.3.2,<40.0.2", +- "ruamel.yaml>=0.15.0,<=0.17.21", ++ "ruamel.yaml>=0.17.36,<=0.17.39", + # ruamel.yaml only requires ruamel.yaml.clib for Python versions + # less than or equal to Python 3.10. In order to ensure we have + # a consistent dependency closure across all Python versions, +@@ -98,4 +98,4 @@ filterwarnings = [ + ] + + [tool.black] +-line-length = 80 +\ No newline at end of file ++line-length = 80 +diff --git a/tests/functional/eks/testdata/output_combined b/tests/functional/eks/testdata/output_combined +index 8e9ce098f72..8e30727da6e 100644 +--- a/tests/functional/eks/testdata/output_combined ++++ b/tests/functional/eks/testdata/output_combined +@@ -1,11 +1,13 @@ + apiVersion: v1 + clusters: + - cluster: +- certificate-authority-data: DATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATA= ++ certificate-authority-data: ++ DATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATA= + server: https://existingEndpoint.eks.amazonaws.com + name: arn:aws:eks:us-west-2:111222333444:cluster/Existing + - cluster: +- certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpWR1Z6ZEdsdVp5QkVZWFJoRFFwVVpYTjBhVzVuSUVSaGRHRU5DbFJsYzNScGJtY2dSR0YwWVEwS2EzVmlaWEp1WlhSbGN6QWVGdzBLVkdWemRHbHVaeUJFWVhSaERRcFVaWE4wYVc1bklFUmhkR0ZWQkFNVERRcHJkV0psY201bGRHVnpNQUVpTUEwS1ZHVnpkR2x1WnlCRVlYUmhEUXBVWlhOMGFXNW5JRVJoZEdFTkNsUmxjM1JwYm1jZ1JHRjBZY3UvR1FnbmFTcDNZaHBDTWhGVVpYTjBhVzVuSUVSaGRHRXl3clZqeEpWNjNwNFVHRmpZdHdGR1drUldJVkV1VkdWemRHbHVaeUJFWVhSaGJzT0MxSVJiTDhPd0lpMVhiWGg2VkdWemRHbHVaeUJFWVhSaFpXVndTTk9VVUZKNmN5QWJaaFpnWVNkTUV3MEtGMVJsYzNScGJtY2dSR0YwWVFZRFZSMFBBUUVFQkFNQ0FsUmxjM1JwYm1jZ1JHRjBZUUV3RFFvR0NTcElEUXBVWlhOMGFXNW5JRVJoZEdGcEgxc1pPRTNMa3lrMU9DWUNHUloyTEZjM3paOCtHell3WEZSbGMzUnBibWNnUkdGMFlYMUR5NjFNMVlGV1AxWVRIMVJsYzNScGJtY2dSR0YwWVd0aE5oMVphM2dWUDBGaGNSWjdKaW9oZVc4N1JsUmxjM1JwYm1jZ1JHRjBZUVpIVHd4NE9IdzZmZz09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t ++ certificate-authority-data: ++ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpWR1Z6ZEdsdVp5QkVZWFJoRFFwVVpYTjBhVzVuSUVSaGRHRU5DbFJsYzNScGJtY2dSR0YwWVEwS2EzVmlaWEp1WlhSbGN6QWVGdzBLVkdWemRHbHVaeUJFWVhSaERRcFVaWE4wYVc1bklFUmhkR0ZWQkFNVERRcHJkV0psY201bGRHVnpNQUVpTUEwS1ZHVnpkR2x1WnlCRVlYUmhEUXBVWlhOMGFXNW5JRVJoZEdFTkNsUmxjM1JwYm1jZ1JHRjBZY3UvR1FnbmFTcDNZaHBDTWhGVVpYTjBhVzVuSUVSaGRHRXl3clZqeEpWNjNwNFVHRmpZdHdGR1drUldJVkV1VkdWemRHbHVaeUJFWVhSaGJzT0MxSVJiTDhPd0lpMVhiWGg2VkdWemRHbHVaeUJFWVhSaFpXVndTTk9VVUZKNmN5QWJaaFpnWVNkTUV3MEtGMVJsYzNScGJtY2dSR0YwWVFZRFZSMFBBUUVFQkFNQ0FsUmxjM1JwYm1jZ1JHRjBZUUV3RFFvR0NTcElEUXBVWlhOMGFXNW5JRVJoZEdGcEgxc1pPRTNMa3lrMU9DWUNHUloyTEZjM3paOCtHell3WEZSbGMzUnBibWNnUkdGMFlYMUR5NjFNMVlGV1AxWVRIMVJsYzNScGJtY2dSR0YwWVd0aE5oMVphM2dWUDBGaGNSWjdKaW9oZVc4N1JsUmxjM1JwYm1jZ1JHRjBZUVpIVHd4NE9IdzZmZz09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t + server: https://endpoint.amazonaws.com + name: arn:aws:eks:region:111222333444:cluster/ExampleCluster + contexts: +diff --git a/tests/functional/eks/testdata/output_combined_changed_ordering b/tests/functional/eks/testdata/output_combined_changed_ordering +index 79da5622cb0..d016d87d72b 100644 +--- a/tests/functional/eks/testdata/output_combined_changed_ordering ++++ b/tests/functional/eks/testdata/output_combined_changed_ordering +@@ -29,11 +29,13 @@ users: + command: aws + clusters: + - cluster: +- certificate-authority-data: DATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATA= ++ certificate-authority-data: ++ DATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATA= + server: https://existingEndpoint.eks.amazonaws.com + name: arn:aws:eks:us-west-2:111222333444:cluster/Existing + - cluster: +- certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpWR1Z6ZEdsdVp5QkVZWFJoRFFwVVpYTjBhVzVuSUVSaGRHRU5DbFJsYzNScGJtY2dSR0YwWVEwS2EzVmlaWEp1WlhSbGN6QWVGdzBLVkdWemRHbHVaeUJFWVhSaERRcFVaWE4wYVc1bklFUmhkR0ZWQkFNVERRcHJkV0psY201bGRHVnpNQUVpTUEwS1ZHVnpkR2x1WnlCRVlYUmhEUXBVWlhOMGFXNW5JRVJoZEdFTkNsUmxjM1JwYm1jZ1JHRjBZY3UvR1FnbmFTcDNZaHBDTWhGVVpYTjBhVzVuSUVSaGRHRXl3clZqeEpWNjNwNFVHRmpZdHdGR1drUldJVkV1VkdWemRHbHVaeUJFWVhSaGJzT0MxSVJiTDhPd0lpMVhiWGg2VkdWemRHbHVaeUJFWVhSaFpXVndTTk9VVUZKNmN5QWJaaFpnWVNkTUV3MEtGMVJsYzNScGJtY2dSR0YwWVFZRFZSMFBBUUVFQkFNQ0FsUmxjM1JwYm1jZ1JHRjBZUUV3RFFvR0NTcElEUXBVWlhOMGFXNW5JRVJoZEdGcEgxc1pPRTNMa3lrMU9DWUNHUloyTEZjM3paOCtHell3WEZSbGMzUnBibWNnUkdGMFlYMUR5NjFNMVlGV1AxWVRIMVJsYzNScGJtY2dSR0YwWVd0aE5oMVphM2dWUDBGaGNSWjdKaW9oZVc4N1JsUmxjM1JwYm1jZ1JHRjBZUVpIVHd4NE9IdzZmZz09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t ++ certificate-authority-data: ++ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpWR1Z6ZEdsdVp5QkVZWFJoRFFwVVpYTjBhVzVuSUVSaGRHRU5DbFJsYzNScGJtY2dSR0YwWVEwS2EzVmlaWEp1WlhSbGN6QWVGdzBLVkdWemRHbHVaeUJFWVhSaERRcFVaWE4wYVc1bklFUmhkR0ZWQkFNVERRcHJkV0psY201bGRHVnpNQUVpTUEwS1ZHVnpkR2x1WnlCRVlYUmhEUXBVWlhOMGFXNW5JRVJoZEdFTkNsUmxjM1JwYm1jZ1JHRjBZY3UvR1FnbmFTcDNZaHBDTWhGVVpYTjBhVzVuSUVSaGRHRXl3clZqeEpWNjNwNFVHRmpZdHdGR1drUldJVkV1VkdWemRHbHVaeUJFWVhSaGJzT0MxSVJiTDhPd0lpMVhiWGg2VkdWemRHbHVaeUJFWVhSaFpXVndTTk9VVUZKNmN5QWJaaFpnWVNkTUV3MEtGMVJsYzNScGJtY2dSR0YwWVFZRFZSMFBBUUVFQkFNQ0FsUmxjM1JwYm1jZ1JHRjBZUUV3RFFvR0NTcElEUXBVWlhOMGFXNW5JRVJoZEdGcEgxc1pPRTNMa3lrMU9DWUNHUloyTEZjM3paOCtHell3WEZSbGMzUnBibWNnUkdGMFlYMUR5NjFNMVlGV1AxWVRIMVJsYzNScGJtY2dSR0YwWVd0aE5oMVphM2dWUDBGaGNSWjdKaW9oZVc4N1JsUmxjM1JwYm1jZ1JHRjBZUVpIVHd4NE9IdzZmZz09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t + server: https://endpoint.amazonaws.com + name: arn:aws:eks:region:111222333444:cluster/ExampleCluster + kind: Config +diff --git a/tests/functional/eks/testdata/output_single b/tests/functional/eks/testdata/output_single +index fb1e0b9b1ef..cdf5fb6523e 100644 +--- a/tests/functional/eks/testdata/output_single ++++ b/tests/functional/eks/testdata/output_single +@@ -1,7 +1,8 @@ + apiVersion: v1 + clusters: + - cluster: +- certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpWR1Z6ZEdsdVp5QkVZWFJoRFFwVVpYTjBhVzVuSUVSaGRHRU5DbFJsYzNScGJtY2dSR0YwWVEwS2EzVmlaWEp1WlhSbGN6QWVGdzBLVkdWemRHbHVaeUJFWVhSaERRcFVaWE4wYVc1bklFUmhkR0ZWQkFNVERRcHJkV0psY201bGRHVnpNQUVpTUEwS1ZHVnpkR2x1WnlCRVlYUmhEUXBVWlhOMGFXNW5JRVJoZEdFTkNsUmxjM1JwYm1jZ1JHRjBZY3UvR1FnbmFTcDNZaHBDTWhGVVpYTjBhVzVuSUVSaGRHRXl3clZqeEpWNjNwNFVHRmpZdHdGR1drUldJVkV1VkdWemRHbHVaeUJFWVhSaGJzT0MxSVJiTDhPd0lpMVhiWGg2VkdWemRHbHVaeUJFWVhSaFpXVndTTk9VVUZKNmN5QWJaaFpnWVNkTUV3MEtGMVJsYzNScGJtY2dSR0YwWVFZRFZSMFBBUUVFQkFNQ0FsUmxjM1JwYm1jZ1JHRjBZUUV3RFFvR0NTcElEUXBVWlhOMGFXNW5JRVJoZEdGcEgxc1pPRTNMa3lrMU9DWUNHUloyTEZjM3paOCtHell3WEZSbGMzUnBibWNnUkdGMFlYMUR5NjFNMVlGV1AxWVRIMVJsYzNScGJtY2dSR0YwWVd0aE5oMVphM2dWUDBGaGNSWjdKaW9oZVc4N1JsUmxjM1JwYm1jZ1JHRjBZUVpIVHd4NE9IdzZmZz09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t ++ certificate-authority-data: ++ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpWR1Z6ZEdsdVp5QkVZWFJoRFFwVVpYTjBhVzVuSUVSaGRHRU5DbFJsYzNScGJtY2dSR0YwWVEwS2EzVmlaWEp1WlhSbGN6QWVGdzBLVkdWemRHbHVaeUJFWVhSaERRcFVaWE4wYVc1bklFUmhkR0ZWQkFNVERRcHJkV0psY201bGRHVnpNQUVpTUEwS1ZHVnpkR2x1WnlCRVlYUmhEUXBVWlhOMGFXNW5JRVJoZEdFTkNsUmxjM1JwYm1jZ1JHRjBZY3UvR1FnbmFTcDNZaHBDTWhGVVpYTjBhVzVuSUVSaGRHRXl3clZqeEpWNjNwNFVHRmpZdHdGR1drUldJVkV1VkdWemRHbHVaeUJFWVhSaGJzT0MxSVJiTDhPd0lpMVhiWGg2VkdWemRHbHVaeUJFWVhSaFpXVndTTk9VVUZKNmN5QWJaaFpnWVNkTUV3MEtGMVJsYzNScGJtY2dSR0YwWVFZRFZSMFBBUUVFQkFNQ0FsUmxjM1JwYm1jZ1JHRjBZUUV3RFFvR0NTcElEUXBVWlhOMGFXNW5JRVJoZEdGcEgxc1pPRTNMa3lrMU9DWUNHUloyTEZjM3paOCtHell3WEZSbGMzUnBibWNnUkdGMFlYMUR5NjFNMVlGV1AxWVRIMVJsYzNScGJtY2dSR0YwWVd0aE5oMVphM2dWUDBGaGNSWjdKaW9oZVc4N1JsUmxjM1JwYm1jZ1JHRjBZUVpIVHd4NE9IdzZmZz09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t + server: https://endpoint.amazonaws.com + name: arn:aws:eks:region:111222333444:cluster/ExampleCluster + contexts: +diff --git a/tests/functional/eks/testdata/valid_old_api_version_updated b/tests/functional/eks/testdata/valid_old_api_version_updated +index fb1e0b9b1ef..cdf5fb6523e 100644 +--- a/tests/functional/eks/testdata/valid_old_api_version_updated ++++ b/tests/functional/eks/testdata/valid_old_api_version_updated +@@ -1,7 +1,8 @@ + apiVersion: v1 + clusters: + - cluster: +- certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpWR1Z6ZEdsdVp5QkVZWFJoRFFwVVpYTjBhVzVuSUVSaGRHRU5DbFJsYzNScGJtY2dSR0YwWVEwS2EzVmlaWEp1WlhSbGN6QWVGdzBLVkdWemRHbHVaeUJFWVhSaERRcFVaWE4wYVc1bklFUmhkR0ZWQkFNVERRcHJkV0psY201bGRHVnpNQUVpTUEwS1ZHVnpkR2x1WnlCRVlYUmhEUXBVWlhOMGFXNW5JRVJoZEdFTkNsUmxjM1JwYm1jZ1JHRjBZY3UvR1FnbmFTcDNZaHBDTWhGVVpYTjBhVzVuSUVSaGRHRXl3clZqeEpWNjNwNFVHRmpZdHdGR1drUldJVkV1VkdWemRHbHVaeUJFWVhSaGJzT0MxSVJiTDhPd0lpMVhiWGg2VkdWemRHbHVaeUJFWVhSaFpXVndTTk9VVUZKNmN5QWJaaFpnWVNkTUV3MEtGMVJsYzNScGJtY2dSR0YwWVFZRFZSMFBBUUVFQkFNQ0FsUmxjM1JwYm1jZ1JHRjBZUUV3RFFvR0NTcElEUXBVWlhOMGFXNW5JRVJoZEdGcEgxc1pPRTNMa3lrMU9DWUNHUloyTEZjM3paOCtHell3WEZSbGMzUnBibWNnUkdGMFlYMUR5NjFNMVlGV1AxWVRIMVJsYzNScGJtY2dSR0YwWVd0aE5oMVphM2dWUDBGaGNSWjdKaW9oZVc4N1JsUmxjM1JwYm1jZ1JHRjBZUVpIVHd4NE9IdzZmZz09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t ++ certificate-authority-data: ++ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpWR1Z6ZEdsdVp5QkVZWFJoRFFwVVpYTjBhVzVuSUVSaGRHRU5DbFJsYzNScGJtY2dSR0YwWVEwS2EzVmlaWEp1WlhSbGN6QWVGdzBLVkdWemRHbHVaeUJFWVhSaERRcFVaWE4wYVc1bklFUmhkR0ZWQkFNVERRcHJkV0psY201bGRHVnpNQUVpTUEwS1ZHVnpkR2x1WnlCRVlYUmhEUXBVWlhOMGFXNW5JRVJoZEdFTkNsUmxjM1JwYm1jZ1JHRjBZY3UvR1FnbmFTcDNZaHBDTWhGVVpYTjBhVzVuSUVSaGRHRXl3clZqeEpWNjNwNFVHRmpZdHdGR1drUldJVkV1VkdWemRHbHVaeUJFWVhSaGJzT0MxSVJiTDhPd0lpMVhiWGg2VkdWemRHbHVaeUJFWVhSaFpXVndTTk9VVUZKNmN5QWJaaFpnWVNkTUV3MEtGMVJsYzNScGJtY2dSR0YwWVFZRFZSMFBBUUVFQkFNQ0FsUmxjM1JwYm1jZ1JHRjBZUUV3RFFvR0NTcElEUXBVWlhOMGFXNW5JRVJoZEdGcEgxc1pPRTNMa3lrMU9DWUNHUloyTEZjM3paOCtHell3WEZSbGMzUnBibWNnUkdGMFlYMUR5NjFNMVlGV1AxWVRIMVJsYzNScGJtY2dSR0YwWVd0aE5oMVphM2dWUDBGaGNSWjdKaW9oZVc4N1JsUmxjM1JwYm1jZ1JHRjBZUVpIVHd4NE9IdzZmZz09DQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t + server: https://endpoint.amazonaws.com + name: arn:aws:eks:region:111222333444:cluster/ExampleCluster + contexts: diff --git a/community/aws-cli/aws-cli-v2-tz-fix.patch b/community/aws-cli/aws-cli-v2-tz-fix.patch new file mode 100644 index 00000000000..a9db045ce2c --- /dev/null +++ b/community/aws-cli/aws-cli-v2-tz-fix.patch @@ -0,0 +1,42 @@ +From 95aa5ccc7bfaeafc0373e8472c8459030ac18920 Mon Sep 17 00:00:00 2001 +From: Avimitin +Date: Tue, 21 Mar 2023 12:36:48 +0800 +Subject: [PATCH] Force timezone info to fix possible test failure + +This commit will affects the test +`test_credentials.py::SSOSessionTest::test_token_chosen_from_provider`. +This test will throw a `RuntimeError: Credentials were refreshed, but +the refreshed credentials are still expired` because the timestamp call +uses system local time, which is different from UTC time. And this will +cause an unexpected failure if the test is not run in a system configured +with `TZ=UTC`. + +Signed-off-by: Avimitin +--- + tests/functional/botocore/test_credentials.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/tests/functional/botocore/test_credentials.py b/tests/functional/botocore/test_credentials.py +index 843be90e484..9da9bf2b443 100644 +--- a/tests/functional/botocore/test_credentials.py ++++ b/tests/functional/botocore/test_credentials.py +@@ -19,7 +19,7 @@ + import mock + import tempfile + import shutil +-from datetime import datetime, timedelta ++from datetime import datetime, timedelta, timezone + import sys + + import pytest +@@ -47,8 +47,8 @@ + from botocore.tokens import SSOTokenProvider + from botocore.utils import datetime2timestamp + +-TIME_IN_ONE_HOUR = datetime.utcnow() + timedelta(hours=1) +-TIME_IN_SIX_MONTHS = datetime.utcnow() + timedelta(hours=4320) ++TIME_IN_ONE_HOUR = datetime.now(tz=timezone.utc) + timedelta(hours=1) ++TIME_IN_SIX_MONTHS = datetime.now(tz=timezone.utc) + timedelta(hours=4320) + + + class TestCredentialRefreshRaces(unittest.TestCase): diff --git a/community/aws-cli/botocore-2551.patch b/community/aws-cli/botocore-2551.patch new file mode 100644 index 00000000000..2ce7efbfbb9 --- /dev/null +++ b/community/aws-cli/botocore-2551.patch @@ -0,0 +1,367 @@ +From c6c63e7b7e248966503d8ff4ac2dfe9e43f1862d Mon Sep 17 00:00:00 2001 +From: Nate Prewitt +Date: Mon, 1 Nov 2021 11:32:35 -0700 +Subject: [PATCH] Update six from 1.10.0 to 1.16.0 + +--- + .changes/next-release/feature-six-62143.json | 5 + + awscli/botocore/vendored/six.py | 186 ++++++++++++++++--- + 2 files changed, 163 insertions(+), 28 deletions(-) + create mode 100644 .changes/next-release/feature-six-62143.json + +diff --git a/.changes/next-release/feature-six-62143.json b/.changes/next-release/feature-six-62143.json +new file mode 100644 +index 0000000000..c4393201ee +--- /dev/null ++++ b/.changes/next-release/feature-six-62143.json +@@ -0,0 +1,5 @@ ++{ ++ "type": "feature", ++ "category": "``six``", ++ "description": "Updated vendored version of ``six`` from 1.10.0 to 1.16.0" ++} +diff --git a/awscli/botocore/vendored/six.py b/awscli/botocore/vendored/six.py +index 190c0239cd..4e15675d8b 100644 +--- a/awscli/botocore/vendored/six.py ++++ b/awscli/botocore/vendored/six.py +@@ -1,6 +1,4 @@ +-"""Utilities for writing code that runs on Python 2 and 3""" +- +-# Copyright (c) 2010-2015 Benjamin Peterson ++# Copyright (c) 2010-2020 Benjamin Peterson + # + # Permission is hereby granted, free of charge, to any person obtaining a copy + # of this software and associated documentation files (the "Software"), to deal +@@ -20,6 +18,8 @@ + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + # SOFTWARE. + ++"""Utilities for writing code that runs on Python 2 and 3""" ++ + from __future__ import absolute_import + + import functools +@@ -29,7 +29,7 @@ + import types + + __author__ = "Benjamin Peterson " +-__version__ = "1.10.0" ++__version__ = "1.16.0" + + + # Useful for very coarse version differentiation. +@@ -71,6 +71,11 @@ def __len__(self): + MAXSIZE = int((1 << 63) - 1) + del X + ++if PY34: ++ from importlib.util import spec_from_loader ++else: ++ spec_from_loader = None ++ + + def _add_doc(func, doc): + """Add documentation to a function.""" +@@ -186,6 +191,11 @@ def find_module(self, fullname, path=None): + return self + return None + ++ def find_spec(self, fullname, path, target=None): ++ if fullname in self.known_modules: ++ return spec_from_loader(fullname, self) ++ return None ++ + def __get_module(self, fullname): + try: + return self.known_modules[fullname] +@@ -223,6 +233,12 @@ def get_code(self, fullname): + return None + get_source = get_code # same as get_code + ++ def create_module(self, spec): ++ return self.load_module(spec.name) ++ ++ def exec_module(self, module): ++ pass ++ + _importer = _SixMetaPathImporter(__name__) + + +@@ -241,6 +257,7 @@ class _MovedItems(_LazyModule): + MovedAttribute("map", "itertools", "builtins", "imap", "map"), + MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), + MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), ++ MovedAttribute("getoutput", "commands", "subprocess"), + MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), + MovedAttribute("reduce", "__builtin__", "functools"), +@@ -254,18 +271,21 @@ class _MovedItems(_LazyModule): + MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), + MovedModule("builtins", "__builtin__"), + MovedModule("configparser", "ConfigParser"), ++ MovedModule("collections_abc", "collections", "collections.abc" if sys.version_info >= (3, 3) else "collections"), + MovedModule("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), +- MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), ++ MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"), ++ MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread" if sys.version_info < (3, 9) else "_thread"), + MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), + MovedModule("http_cookies", "Cookie", "http.cookies"), + MovedModule("html_entities", "htmlentitydefs", "html.entities"), + MovedModule("html_parser", "HTMLParser", "html.parser"), + MovedModule("http_client", "httplib", "http.client"), ++ MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), ++ MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), + MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), + MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), + MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), +- MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), + MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), + MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), + MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), +@@ -337,10 +357,12 @@ class Module_six_moves_urllib_parse(_LazyModule): + MovedAttribute("quote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote", "urllib", "urllib.parse"), + MovedAttribute("unquote_plus", "urllib", "urllib.parse"), ++ MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"), + MovedAttribute("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "urllib", "urllib.parse"), ++ MovedAttribute("splitvalue", "urllib", "urllib.parse"), + MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), + MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), + MovedAttribute("uses_params", "urlparse", "urllib.parse"), +@@ -416,6 +438,8 @@ class Module_six_moves_urllib_request(_LazyModule): + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + MovedAttribute("proxy_bypass", "urllib", "urllib.request"), ++ MovedAttribute("parse_http_list", "urllib2", "urllib.request"), ++ MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), + ] + for attr in _urllib_request_moved_attributes: + setattr(Module_six_moves_urllib_request, attr.name, attr) +@@ -631,13 +655,16 @@ def u(s): + import io + StringIO = io.StringIO + BytesIO = io.BytesIO ++ del io + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" ++ _assertNotRegex = "assertNotRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" ++ _assertNotRegex = "assertNotRegex" + else: + def b(s): + return s +@@ -659,6 +686,7 @@ def indexbytes(buf, i): + _assertCountEqual = "assertItemsEqual" + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" ++ _assertNotRegex = "assertNotRegexpMatches" + _add_doc(b, """Byte literal""") + _add_doc(u, """Text literal""") + +@@ -675,15 +703,23 @@ def assertRegex(self, *args, **kwargs): + return getattr(self, _assertRegex)(*args, **kwargs) + + ++def assertNotRegex(self, *args, **kwargs): ++ return getattr(self, _assertNotRegex)(*args, **kwargs) ++ ++ + if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): +- if value is None: +- value = tp() +- if value.__traceback__ is not tb: +- raise value.with_traceback(tb) +- raise value ++ try: ++ if value is None: ++ value = tp() ++ if value.__traceback__ is not tb: ++ raise value.with_traceback(tb) ++ raise value ++ finally: ++ value = None ++ tb = None + + else: + def exec_(_code_, _globs_=None, _locs_=None): +@@ -699,19 +735,19 @@ def exec_(_code_, _globs_=None, _locs_=None): + exec("""exec _code_ in _globs_, _locs_""") + + exec_("""def reraise(tp, value, tb=None): +- raise tp, value, tb ++ try: ++ raise tp, value, tb ++ finally: ++ tb = None + """) + + +-if sys.version_info[:2] == (3, 2): ++if sys.version_info[:2] > (3,): + exec_("""def raise_from(value, from_value): +- if from_value is None: +- raise value +- raise value from from_value +-""") +-elif sys.version_info[:2] > (3, 2): +- exec_("""def raise_from(value, from_value): +- raise value from from_value ++ try: ++ raise value from from_value ++ finally: ++ value = None + """) + else: + def raise_from(value, from_value): +@@ -786,13 +822,33 @@ def print_(*args, **kwargs): + _add_doc(reraise, """Reraise an exception.""") + + if sys.version_info[0:2] < (3, 4): ++ # This does exactly the same what the :func:`py3:functools.update_wrapper` ++ # function does on Python versions after 3.2. It sets the ``__wrapped__`` ++ # attribute on ``wrapper`` object and it doesn't raise an error if any of ++ # the attributes mentioned in ``assigned`` and ``updated`` are missing on ++ # ``wrapped`` object. ++ def _update_wrapper(wrapper, wrapped, ++ assigned=functools.WRAPPER_ASSIGNMENTS, ++ updated=functools.WRAPPER_UPDATES): ++ for attr in assigned: ++ try: ++ value = getattr(wrapped, attr) ++ except AttributeError: ++ continue ++ else: ++ setattr(wrapper, attr, value) ++ for attr in updated: ++ getattr(wrapper, attr).update(getattr(wrapped, attr, {})) ++ wrapper.__wrapped__ = wrapped ++ return wrapper ++ _update_wrapper.__doc__ = functools.update_wrapper.__doc__ ++ + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): +- def wrapper(f): +- f = functools.wraps(wrapped, assigned, updated)(f) +- f.__wrapped__ = wrapped +- return f +- return wrapper ++ return functools.partial(_update_wrapper, wrapped=wrapped, ++ assigned=assigned, updated=updated) ++ wraps.__doc__ = functools.wraps.__doc__ ++ + else: + wraps = functools.wraps + +@@ -802,10 +858,22 @@ def with_metaclass(meta, *bases): + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. +- class metaclass(meta): ++ class metaclass(type): + + def __new__(cls, name, this_bases, d): +- return meta(name, bases, d) ++ if sys.version_info[:2] >= (3, 7): ++ # This version introduced PEP 560 that requires a bit ++ # of extra care (we mimic what is done by __build_class__). ++ resolved_bases = types.resolve_bases(bases) ++ if resolved_bases is not bases: ++ d['__orig_bases__'] = bases ++ else: ++ resolved_bases = bases ++ return meta(name, resolved_bases, d) ++ ++ @classmethod ++ def __prepare__(cls, name, this_bases): ++ return meta.__prepare__(name, bases) + return type.__new__(metaclass, 'temporary_class', (), {}) + + +@@ -821,13 +889,75 @@ def wrapper(cls): + orig_vars.pop(slots_var) + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) ++ if hasattr(cls, '__qualname__'): ++ orig_vars['__qualname__'] = cls.__qualname__ + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + ++def ensure_binary(s, encoding='utf-8', errors='strict'): ++ """Coerce **s** to six.binary_type. ++ ++ For Python 2: ++ - `unicode` -> encoded to `str` ++ - `str` -> `str` ++ ++ For Python 3: ++ - `str` -> encoded to `bytes` ++ - `bytes` -> `bytes` ++ """ ++ if isinstance(s, binary_type): ++ return s ++ if isinstance(s, text_type): ++ return s.encode(encoding, errors) ++ raise TypeError("not expecting type '%s'" % type(s)) ++ ++ ++def ensure_str(s, encoding='utf-8', errors='strict'): ++ """Coerce *s* to `str`. ++ ++ For Python 2: ++ - `unicode` -> encoded to `str` ++ - `str` -> `str` ++ ++ For Python 3: ++ - `str` -> `str` ++ - `bytes` -> decoded to `str` ++ """ ++ # Optimization: Fast return for the common case. ++ if type(s) is str: ++ return s ++ if PY2 and isinstance(s, text_type): ++ return s.encode(encoding, errors) ++ elif PY3 and isinstance(s, binary_type): ++ return s.decode(encoding, errors) ++ elif not isinstance(s, (text_type, binary_type)): ++ raise TypeError("not expecting type '%s'" % type(s)) ++ return s ++ ++ ++def ensure_text(s, encoding='utf-8', errors='strict'): ++ """Coerce *s* to six.text_type. ++ ++ For Python 2: ++ - `unicode` -> `unicode` ++ - `str` -> `unicode` ++ ++ For Python 3: ++ - `str` -> `str` ++ - `bytes` -> decoded to `str` ++ """ ++ if isinstance(s, binary_type): ++ return s.decode(encoding, errors) ++ elif isinstance(s, text_type): ++ return s ++ else: ++ raise TypeError("not expecting type '%s'" % type(s)) ++ ++ + def python_2_unicode_compatible(klass): + """ +- A decorator that defines __unicode__ and __str__ methods under Python 2. ++ A class decorator that defines __unicode__ and __str__ methods under Python 2. + Under Python 3 it does nothing. + + To support Python 2 and 3 with a single code base, define a __str__ method diff --git a/community/aws-cli/botocore-2922.patch b/community/aws-cli/botocore-2922.patch new file mode 100644 index 00000000000..f761a84b964 --- /dev/null +++ b/community/aws-cli/botocore-2922.patch @@ -0,0 +1,36 @@ +From 59489584f929b2893a5909c9009d3bdd556552a9 Mon Sep 17 00:00:00 2001 +From: Nate Prewitt +Date: Mon, 20 Feb 2023 11:17:51 -0700 +Subject: [PATCH] Defer to system defaults for cipher suites with urllib3 2.0+ + +--- + awscli/botocore/httpsession.py | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/awscli/botocore/httpsession.py b/awscli/botocore/httpsession.py +index 97a03644d6..48e2e5d269 100644 +--- a/awscli/botocore/httpsession.py ++++ b/awscli/botocore/httpsession.py +@@ -20,7 +20,6 @@ + from urllib3.exceptions import SSLError as URLLib3SSLError + from urllib3.util.retry import Retry + from urllib3.util.ssl_ import ( +- DEFAULT_CIPHERS, + OP_NO_COMPRESSION, + PROTOCOL_TLS, + OP_NO_SSLv2, +@@ -49,6 +48,14 @@ + except ImportError: + from urllib3.util.ssl_ import SSLContext + ++try: ++ from urllib3.util.ssl_ import DEFAULT_CIPHERS ++except ImportError: ++ # Defer to system configuration starting with ++ # urllib3 2.0. This will choose the ciphers provided by ++ # Openssl 1.1.1+ or secure system defaults. ++ DEFAULT_CIPHERS = None ++ + import botocore.awsrequest + from botocore.compat import ( + IPV6_ADDRZ_RE, diff --git a/community/aws-cli/botocore-2924.patch b/community/aws-cli/botocore-2924.patch new file mode 100644 index 00000000000..2c7cae35042 --- /dev/null +++ b/community/aws-cli/botocore-2924.patch @@ -0,0 +1,27 @@ +From 5ec04be95d1531bf551056f80d3f7d84d48e5138 Mon Sep 17 00:00:00 2001 +From: Thomas Grainger +Date: Fri, 28 Apr 2023 12:06:22 +0100 +Subject: [PATCH] Do not set_ciphers(DEFAULT_CIPHERS) if DEFAULT_CIPHERS is + None + +Fixes #2921 +--- + awscli/botocore/httpsession.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/awscli/botocore/httpsession.py b/awscli/botocore/httpsession.py +index 48e2e5d269..b3fe6e6c0c 100644 +--- a/awscli/botocore/httpsession.py ++++ b/awscli/botocore/httpsession.py +@@ -113,7 +113,10 @@ def create_urllib3_context( + + context = SSLContext(ssl_version) + +- context.set_ciphers(ciphers or DEFAULT_CIPHERS) ++ if ciphers: ++ context.set_ciphers(ciphers) ++ elif DEFAULT_CIPHERS: ++ context.set_ciphers(DEFAULT_CIPHERS) + + # Setting the default here, as we may have no ssl module on import + cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs diff --git a/community/aws-cli/botocore-2967.patch b/community/aws-cli/botocore-2967.patch new file mode 100644 index 00000000000..5045015a8cd --- /dev/null +++ b/community/aws-cli/botocore-2967.patch @@ -0,0 +1,85 @@ +diff -Naur tests/unit/botocore/test_client.py awscli-2.15.40_/tests/unit/botocore/test_client.py +--- tests/unit/botocore/test_client.py 2024-04-20 15:00:39.465686191 +0800 ++++ awscli-2.15.40_/tests/unit/botocore/test_client.py 2024-04-20 15:07:29.335115713 +0800 +@@ -960,7 +960,7 @@ + lines = [ + (' Creates an iterator that will paginate through responses ' + 'from :py:meth:`MyService.Client.test_operation`.'), +- ' **Request Syntax** ', ++ ' **Request Syntax**', + ' ::', + ' response_iterator = paginator.paginate(', + " Foo='string',", +@@ -976,17 +976,17 @@ + ' :type Bar: string', + ' :param Bar: Documents Bar', + ' :type PaginationConfig: dict', +- ' :param PaginationConfig: ', ++ ' :param PaginationConfig:', + (' A dictionary that provides parameters to control ' + 'pagination.'), +- ' - **MaxItems** *(integer) --* ', ++ ' - **MaxItems** *(integer) --*', + (' The total number of items to return. If the total ' + 'number of items available is more than the value specified ' + 'in max-items then a ``NextToken`` will be provided in the ' + 'output that you can use to resume pagination.'), +- ' - **PageSize** *(integer) --* ', ++ ' - **PageSize** *(integer) --*', + ' The size of each page.', +- ' - **StartingToken** *(string) --* ', ++ ' - **StartingToken** *(string) --*', + (' A token to specify where to start paginating. This is ' + 'the ``NextToken`` from a previous response.'), + ' :returns: None', +diff -Naur tests/unit/botocore/test_waiters.py awscli-2.15.40_/tests/unit/botocore/test_waiters.py +--- tests/unit/botocore/test_waiters.py 2024-04-20 15:00:39.469019486 +0800 ++++ awscli-2.15.40_/tests/unit/botocore/test_waiters.py 2024-04-20 15:04:08.810188250 +0800 +@@ -648,7 +648,7 @@ + (' Polls :py:meth:`MyService.Client.foo` every 1 ' + 'seconds until a successful state is reached. An error ' + 'is returned after 1 failed checks.'), +- ' **Request Syntax** ', ++ ' **Request Syntax**', + ' ::', + ' waiter.wait(', + " bar='string'", +diff -Naur tests/unit/botocore/test_utils.py awscli-2.15.40_/tests/unit/botocore/test_utils.py +--- tests/unit/botocore/test_utils.py 2024-04-20 12:09:38.883650919 +0800 ++++ awscli-2.15.40_/tests/unit/botocore/test_utils.py 2024-04-20 12:11:56.434812142 +0800 +@@ -1000,17 +1000,24 @@ + 'https://bucket.s3.amazonaws.com/key.txt') + + +-class TestSwitchToChunkedEncodingForNonSeekableObjects(unittest.TestCase): +- def test_switch_to_chunked_encodeing_for_stream_like_object(self): +- request = AWSRequest( +- method='POST', headers={}, +- data=io.BufferedIOBase(b"some initial binary data"), +- url='https://foo.amazonaws.com/bucket/key.txt' +- ) +- prepared_request = request.prepare() +- self.assertEqual( +- prepared_request.headers, {'Transfer-Encoding': 'chunked'} +- ) ++def test_chunked_encoding_used_for_stream_like_object(): ++ class BufferedStream(io.BufferedIOBase): ++ """Class to ensure seek/tell don't work, but read is implemented.""" ++ ++ def __init__(self, value): ++ self.value = io.BytesIO(value) ++ ++ def read(self, size=-1): ++ return self.value.read(size) ++ ++ request = AWSRequest( ++ method='POST', ++ headers={}, ++ data=BufferedStream(b"some initial binary data"), ++ url='https://foo.amazonaws.com/bucket/key.txt', ++ ) ++ prepared_request = request.prepare() ++ assert prepared_request.headers == {'Transfer-Encoding': 'chunked'} + + + class TestInstanceCache(unittest.TestCase): diff --git a/community/aws-cli/botocore-2990-rebased.patch b/community/aws-cli/botocore-2990-rebased.patch new file mode 100644 index 00000000000..5bc154e3b88 --- /dev/null +++ b/community/aws-cli/botocore-2990-rebased.patch @@ -0,0 +1,77 @@ +From 86564e713ba922feafe3feb7883d5305cb6a0ec2 Mon Sep 17 00:00:00 2001 +From: Nate Prewitt +Date: Wed, 26 Jul 2023 17:36:30 -0600 +Subject: [PATCH 1/3] Move 100-continue behavior to use request API + +--- + awscli/botocore/awsrequest.py | 37 +++++++++++++++++++++---------------- + 1 file changed, 21 insertions(+), 16 deletions(-) + +diff --git a/awscli/botocore/awsrequest.py b/awscli/botocore/awsrequest.py +index f00a0dde57..9123e65c9d 100644 +--- a/awscli/botocore/awsrequest.py ++++ b/awscli/botocore/awsrequest.py +@@ -66,33 +66,34 @@ class AWSConnection: + def __init__(self, *args, **kwargs): + super(AWSConnection, self).__init__(*args, **kwargs) + self._original_response_cls = self.response_class +- # We'd ideally hook into httplib's states, but they're all +- # __mangled_vars so we use our own state var. This variable is set +- # when we receive an early response from the server. If this value is +- # set to True, any calls to send() are noops. This value is reset to +- # false every time _send_request is called. This is to workaround the +- # fact that py2.6 (and only py2.6) has a separate send() call for the +- # body in _send_request, as opposed to endheaders(), which is where the +- # body is sent in all versions > 2.6. ++ # This variable is set when we receive an early response from the ++ # server. If this value is set to True, any calls to send() are noops. ++ # This value is reset to false every time _send_request is called. ++ # This is to workaround changes in urllib3 2.0 which uses separate ++ # send() calls in request() instead of delegating to endheaders(), ++ # which is where the body is sent in CPython's HTTPConnection. + self._response_received = False + self._expect_header_set = False ++ self._send_called = False + + def close(self): + super(AWSConnection, self).close() + # Reset all of our instance state we were tracking. + self._response_received = False + self._expect_header_set = False ++ self._send_called = False + self.response_class = self._original_response_cls + +- def _send_request(self, method, url, body, headers, *args, **kwargs): ++ def request(self, method, url, body=None, headers=None, *args, **kwargs): ++ if headers is None: ++ headers = {} + self._response_received = False + if headers.get('Expect', b'') == b'100-continue': + self._expect_header_set = True + else: + self._expect_header_set = False + self.response_class = self._original_response_cls +- rval = super(AWSConnection, self)._send_request( +- method, url, body, headers, *args, **kwargs) ++ rval = super().request(method, url, body, headers, *args, **kwargs) + self._expect_header_set = False + return rval + +@@ -210,8 +210,15 @@ def _send_message_body(self, message_body): + + def send(self, str): + if self._response_received: +- logger.debug("send() called, but reseponse already received. " +- "Not sending data.") ++ if not self._send_called: ++ # urllib3 2.0 chunks and calls send potentially ++ # thousands of times inside `request` unlike the ++ # standard library. Only log this once for sanity. ++ logger.debug( ++ "send() called, but response already received. " ++ "Not sending data." ++ ) ++ self._send_called = True + return + return super(AWSConnection, self).send(str) +