From c6bea52209881827ceea6dcd084aa6677f1e014d Mon Sep 17 00:00:00 2001 From: KUMAR SHIKHAR Date: Fri, 22 Nov 2024 17:13:32 +0530 Subject: [PATCH 1/9] feat(device): add option to exec commands asynchronously (#365) This commit adds the option to execute command on devices and deployments asynchronously. The default behaviour is still sync. However, users can simply add the --async flag to execute the command in the background. Fixes AB#16668 --- pyproject.toml | 2 +- riocli/deployment/execute.py | 19 ++++++++++++++++++- riocli/device/execute.py | 30 ++++++++++++++++++++++++------ riocli/utils/execute.py | 5 ++++- uv.lock | 8 ++++---- 5 files changed, 51 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a85f5ebb..345a8af9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ dependencies = [ "python-magic>=0.4.27", "pytz", "pyyaml>=5.4.1", - "rapyuta-io>=2.1.1", + "rapyuta-io>=2.2.0", "requests>=2.20.0", "semver>=3.0.0", "setuptools", diff --git a/riocli/deployment/execute.py b/riocli/deployment/execute.py index b149a325..5ec81629 100644 --- a/riocli/deployment/execute.py +++ b/riocli/deployment/execute.py @@ -36,6 +36,14 @@ ) @click.option("--user", default="root") @click.option("--shell", default="/bin/bash") +@click.option("--timeout", default=300) +@click.option( + "--async", + "run_async", + is_flag=True, + default=False, + help="Run the command asynchronously.", +) @click.option( "--exec", "exec_name", default=None, help="Name of a executable in the component" ) @@ -44,7 +52,9 @@ def execute_command( user: str, shell: str, + timeout: int, exec_name: str, + run_async: bool, deployment_name: str, command: typing.List[str], ) -> None: @@ -61,6 +71,12 @@ def execute_command( shell is ``/bin/bash``. You can also specify the user using the ``--user`` option. The default user is ``root``. + To run the command asynchronously, set the --async flag to true. + The default value is false. + + To specify the timeout, use the --timeout + flag, providing the duration in seconds. The default value is 300. + Please ensure that you enclose the command in quotes to avoid any issues with the command parsing. @@ -112,10 +128,11 @@ def execute_command( user=user, shell=shell, command=command, - background=False, + background=run_async, deployment=deployment, exec_name=exec_name, device_name=deployment.spec.device.depends.nameOrGUID, + timeout=timeout, ) click.echo(response) except Exception as e: diff --git a/riocli/device/execute.py b/riocli/device/execute.py index 1768fd71..97ad1a19 100644 --- a/riocli/device/execute.py +++ b/riocli/device/execute.py @@ -28,19 +28,36 @@ help_options_color=Colors.GREEN, ) @click.option("--user", default="root") +@click.option("--timeout", default=300) @click.option("--shell", default="/bin/bash") +@click.option( + "--async", + "run_async", + is_flag=True, + default=False, + help="Run the command asynchronously.", +) @click.argument("device-name", type=str) @click.argument("command", nargs=-1) @name_to_guid def execute_command( - device_name: str, device_guid: str, user: str, shell: str, command: typing.List[str] + device_name: str, + device_guid: str, + user: str, + timeout: int, + shell: str, + run_async: bool, + command: typing.List[str], ) -> None: """Execute commands on a device. - You can specify the user and shell to run the command in. - To specify the user, use the --user flag. The default is - root. To specify the shell, use the --shell flag. The default - shell is /bin/bash. + You can specify the user, shell, run-async, and timeout options to customize + the command execution. To specify the user, use the --user flag. + The default is 'root'. To specify the shell, use the --shell flag. + The default shell is '/bin/bash'. To run the command asynchronously, + set the --async flag to true. The default value is false. To + specify the timeout, use the --timeout flag, providing the duration + in seconds. The default value is 300. Make sure you put your command in quotes to avoid any issues. @@ -54,7 +71,8 @@ def execute_command( user=user, shell=shell, command=command, - background=False, + background=run_async, + timeout=timeout, ) click.secho(response) diff --git a/riocli/utils/execute.py b/riocli/utils/execute.py index 099cfc1f..e6409552 100644 --- a/riocli/utils/execute.py +++ b/riocli/utils/execute.py @@ -30,6 +30,7 @@ def run_on_device( deployment: str = None, exec_name: str = None, device_name: str = None, + timeout: int = 300, ) -> str: client = new_client() @@ -58,7 +59,9 @@ def run_on_device( if deployment: cmd = 'script -q -c "dectl exec {} -- {}"'.format(exec_name, cmd) - return device.execute_command(Command(cmd, shell=shell, bg=background, runas=user)) + return device.execute_command( + Command(cmd, shell=shell, bg=background, runas=user, timeout=timeout) + ) def apply_func( diff --git a/uv.lock b/uv.lock index 020e1060..c367c34d 100644 --- a/uv.lock +++ b/uv.lock @@ -703,7 +703,7 @@ wheels = [ [[package]] name = "rapyuta-io" -version = "2.1.1" +version = "2.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, @@ -714,9 +714,9 @@ dependencies = [ { name = "six" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/17/ab/dee990947ba02dbeaf8abf1b051ce7db0a9a5d2f846b7ab4512b3014ab1f/rapyuta_io-2.1.1.tar.gz", hash = "sha256:ddb1b60f6982f2628f6ec37f3a5e15b0cad6b0f9a0b461c3425c529da34e5c19", size = 51811 } +sdist = { url = "https://files.pythonhosted.org/packages/d1/46/5060b2467f6b917096f431d92871a7c0921c9470bd3bf6a2fe136336e0a7/rapyuta_io-2.2.0.tar.gz", hash = "sha256:198a86e8770448ad96cbfb9847e821934a27e10926c8fce0179693e183b962b1", size = 52374 } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/b3/c58a2f7f161495891ccabf2fc872e72a53b7637efc07066e6690cc93476d/rapyuta_io-2.1.1-py3-none-any.whl", hash = "sha256:1f9b6fa067efd4ff1801eaa2b65c36f5ddeabef722f8c3b2d4b0b428dca1a708", size = 60304 }, + { url = "https://files.pythonhosted.org/packages/44/42/97ebb12973b2d3d1f2426eb9731d228473932ff0600b41e44f7e90863958/rapyuta_io-2.2.0-py3-none-any.whl", hash = "sha256:54727a57cb84aa26c23acb5c35b20e6299b553a32dd9ff5a0aaec4e4b4eb907c", size = 60836 }, ] [[package]] @@ -792,7 +792,7 @@ requires-dist = [ { name = "python-magic", specifier = ">=0.4.27" }, { name = "pytz" }, { name = "pyyaml", specifier = ">=5.4.1" }, - { name = "rapyuta-io", specifier = ">=2.1.1" }, + { name = "rapyuta-io", specifier = ">=2.2.0" }, { name = "requests", specifier = ">=2.20.0" }, { name = "semver", specifier = ">=3.0.0" }, { name = "setuptools" }, From e03e09931b4c42895fcb0b9b1c944d81d45d80ab Mon Sep 17 00:00:00 2001 From: Pallab Pain Date: Sat, 23 Nov 2024 15:52:16 +0530 Subject: [PATCH 2/9] chore(hwil): supports Ubuntu 24.04 flavour --- riocli/apply/manifests/device.yaml | 2 +- riocli/hwil/create.py | 2 +- riocli/hwilclient/client.py | 11 ++++++----- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/riocli/apply/manifests/device.yaml b/riocli/apply/manifests/device.yaml index d9ab273d..c1f861ca 100644 --- a/riocli/apply/manifests/device.yaml +++ b/riocli/apply/manifests/device.yaml @@ -67,7 +67,7 @@ spec: product: "sootballs" # Required Options: ["sootballs", "flaptter", "oks", "platform"] arch: "amd64" # Options: ["amd64" (default), "arm64" ] os: "ubuntu" # Options: ["ubuntu" (default), "debian" ] - codename: "focal" # Options: ["bionic", "focal" (default), "jammy", "bullseye"] + codename: "focal" # Options: ["bionic", "focal" (default), "jammy", "noble", "bullseye"] highperf: False # Optional [True, False (default)] wait: True # Optional [True, False (default)] Wait until the device is ready. expireAfter: '12h' # Optional ["s", "m", "h", "d"] Expire after set duration. diff --git a/riocli/hwil/create.py b/riocli/hwil/create.py index fa3dd489..2f6be1cf 100644 --- a/riocli/hwil/create.py +++ b/riocli/hwil/create.py @@ -46,7 +46,7 @@ "--codename", "codename", help="Code name of the OS", - type=click.Choice(["bionic", "focal", "jammy", "bullseye"]), + type=click.Choice(["bionic", "focal", "jammy", "noble", "bullseye"]), default="focal", ) @click.option( diff --git a/riocli/hwilclient/client.py b/riocli/hwilclient/client.py index eba5982e..f4806ff4 100644 --- a/riocli/hwilclient/client.py +++ b/riocli/hwilclient/client.py @@ -63,14 +63,15 @@ class Client(object): ARCH_OS_DICT = { "amd64": { "ubuntu": { - "bionic": "ubuntu-bionic-ros-melodic-py3", - "focal": "ubuntu-focal-ros-noetic-py3", - "jammy": "ubuntu-jammy-plain-py3", + "bionic": "bionic", + "focal": "focal", + "jammy": "jammy", + "noble": "noble", } }, "arm64": { - "ubuntu": {"focal": "ubuntu-focal-ros-noetic-py3"}, - "debian": {"bullseye": "debian-bullseye-docker"}, + "ubuntu": {"focal": "focal"}, + "debian": {"bullseye": "bullseye"}, }, } From 06915769dc921a3f67ba8e53019524c8f0eec127 Mon Sep 17 00:00:00 2001 From: Pallab Pain Date: Sat, 23 Nov 2024 15:55:20 +0530 Subject: [PATCH 3/9] chore: fix formatting --- riocli/apply/filters.py | 1 + 1 file changed, 1 insertion(+) diff --git a/riocli/apply/filters.py b/riocli/apply/filters.py index c44cc0bc..145468a1 100644 --- a/riocli/apply/filters.py +++ b/riocli/apply/filters.py @@ -14,6 +14,7 @@ """ Filters to use in the manifests. """ + import os from riocli.config import new_client From d59049091011d88ec715f302701e425218ba4d9c Mon Sep 17 00:00:00 2001 From: Ankit R Gadiya Date: Wed, 4 Dec 2024 10:43:01 +0530 Subject: [PATCH 4/9] feat(apply): add support for ansible filters in Jinja2 (#394) Resolves AB#39151 --- pyproject.toml | 1 + riocli/apply/__init__.py | 24 ++++-- riocli/apply/util.py | 20 +++++ uv.lock | 154 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 190 insertions(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 345a8af9..e2fa3076 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,6 +55,7 @@ dependencies = [ "urllib3>=1.23", "waiting>=1.4.1", "yaspin==2.5.0", + "ansible-core>=2.13.13", ] [tool.uv] diff --git a/riocli/apply/__init__.py b/riocli/apply/__init__.py index f386c437..c8af371b 100644 --- a/riocli/apply/__init__.py +++ b/riocli/apply/__init__.py @@ -105,12 +105,15 @@ def apply( ) -> None: """Apply resource manifests. - The apply command provides the mechanism to create or update - resources on rapyuta.io. The resources are defined in YAML manifests allowing for - a declarative and repeatable process. The command can take multiple - files, paths or globs as arguments and parse the manifests to - create or update resources. It also supports Jinja templating - and secret management with sops. + The apply command provides the mechanism to create or update resources on + rapyuta.io. The resources are defined in YAML manifests allowing for a + declarative and repeatable process. The command can take multiple files, + paths or globs as arguments and parse the manifests to create or update + resources. + + The manifest files can optionally be templated using Jinja2 syntax. All the + Ansible filters are supported. The secret management with sops is also + supported. You can provide value files with the ``--values`` option and sops encrypted secret files with ``--secret`` option. @@ -146,6 +149,7 @@ def apply( Apply manifests with multiple value files. $ rio apply -v values1.yaml -v values2.yaml templates/** + """ glob_files, abs_values, abs_secrets = process_files_values_secrets( files, values, secrets @@ -257,8 +261,11 @@ def delete( The delete command provides the mechanism to remove resources on rapyuta.io defined in YAML manifests making the process declarative and repeatable. The command can take multiple files, paths or globs - as arguments and parse the manifests to remove resources. It also - supports Jinja templating and secret management with sops. + as arguments and parse the manifests to remove resources. + + The manifest files can optionally be templated using Jinja2 syntax. All the + Ansible filters are supported. The secret management with sops is also + supported. You can provide value files with the ``--values`` option and sops encrypted secret files with ``--secret`` option. @@ -291,6 +298,7 @@ def delete( Delete manifests with multiple value files. $ rio delete -v values1.yaml -v values2.yaml templates/** + """ glob_files, abs_values, abs_secrets = process_files_values_secrets( files, values, secrets diff --git a/riocli/apply/util.py b/riocli/apply/util.py index fb969099..669fab34 100644 --- a/riocli/apply/util.py +++ b/riocli/apply/util.py @@ -22,6 +22,11 @@ import click import jinja2 from yaspin.api import Yaspin +from ansible.plugins.filter.core import FilterModule as CoreFilterModule +from ansible.plugins.filter.urls import FilterModule as URLFilterModule +from ansible.plugins.filter.urlsplit import FilterModule as URLSplitFilterModule +from ansible.plugins.filter.mathstuff import FilterModule as MathFilterModule +from ansible.plugins.filter.encryption import FilterModule as EncryptionFilterModule from riocli.apply.filters import FILTERS from riocli.constants import Colors @@ -149,4 +154,19 @@ def init_jinja_environment(): for name, func in FILTERS.items(): environment.filters[name] = func + for name, func in CoreFilterModule().filters().items(): + environment.filters[name] = func + + for name, func in URLFilterModule().filters().items(): + environment.filters[name] = func + + for name, func in URLSplitFilterModule().filters().items(): + environment.filters[name] = func + + for name, func in MathFilterModule().filters().items(): + environment.filters[name] = func + + for name, func in EncryptionFilterModule().filters().items(): + environment.filters[name] = func + return environment diff --git a/uv.lock b/uv.lock index c367c34d..423759ca 100644 --- a/uv.lock +++ b/uv.lock @@ -10,6 +10,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/88/c7083fc61120ab661c5d0b82cb77079fc1429d3f913a456c1c82cf4658f7/alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3", size = 13857 }, ] +[[package]] +name = "ansible-core" +version = "2.13.13" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "resolvelib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/ae/6a63fffda71543858ea0e0d78698d86e7cbdbd91b00b5335fa3f10031246/ansible-core-2.13.13.tar.gz", hash = "sha256:7ad2d8c0a5fa4a59de1809a5f96d2dbf511189c834116f5c72aec9730b51074b", size = 3146514 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/c6/c5b0da259e583dbeaefdccdfe0a1e4fd7a342dba00e263183856290c7fc9/ansible_core-2.13.13-py3-none-any.whl", hash = "sha256:f50220254b8e13a79b68e68e759f5bf89f3f3584c907737985a017c699b1c3b6", size = 2115491 }, +] + [[package]] name = "argparse" version = "1.4.0" @@ -61,6 +77,83 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", size = 167321 }, ] +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, + { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, + { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, + { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, + { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, + { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 }, + { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 }, + { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, + { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, + { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, + { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, + { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, + { url = "https://files.pythonhosted.org/packages/48/08/15bf6b43ae9bd06f6b00ad8a91f5a8fe1069d4c9fab550a866755402724e/cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b", size = 182457 }, + { url = "https://files.pythonhosted.org/packages/c2/5b/f1523dd545f92f7df468e5f653ffa4df30ac222f3c884e51e139878f1cb5/cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964", size = 425932 }, + { url = "https://files.pythonhosted.org/packages/53/93/7e547ab4105969cc8c93b38a667b82a835dd2cc78f3a7dad6130cfd41e1d/cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9", size = 448585 }, + { url = "https://files.pythonhosted.org/packages/56/c4/a308f2c332006206bb511de219efeff090e9d63529ba0a77aae72e82248b/cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc", size = 456268 }, + { url = "https://files.pythonhosted.org/packages/ca/5b/b63681518265f2f4060d2b60755c1c77ec89e5e045fc3773b72735ddaad5/cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c", size = 436592 }, + { url = "https://files.pythonhosted.org/packages/bb/19/b51af9f4a4faa4a8ac5a0e5d5c2522dcd9703d07fac69da34a36c4d960d3/cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1", size = 446512 }, + { url = "https://files.pythonhosted.org/packages/e2/63/2bed8323890cb613bbecda807688a31ed11a7fe7afe31f8faaae0206a9a3/cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8", size = 171576 }, + { url = "https://files.pythonhosted.org/packages/2f/70/80c33b044ebc79527447fd4fbc5455d514c3bb840dede4455de97da39b4d/cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1", size = 181229 }, + { url = "https://files.pythonhosted.org/packages/b9/ea/8bb50596b8ffbc49ddd7a1ad305035daa770202a6b782fc164647c2673ad/cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", size = 182220 }, + { url = "https://files.pythonhosted.org/packages/ae/11/e77c8cd24f58285a82c23af484cf5b124a376b32644e445960d1a4654c3a/cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", size = 178605 }, + { url = "https://files.pythonhosted.org/packages/ed/65/25a8dc32c53bf5b7b6c2686b42ae2ad58743f7ff644844af7cdb29b49361/cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", size = 424910 }, + { url = "https://files.pythonhosted.org/packages/42/7a/9d086fab7c66bd7c4d0f27c57a1b6b068ced810afc498cc8c49e0088661c/cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", size = 447200 }, + { url = "https://files.pythonhosted.org/packages/da/63/1785ced118ce92a993b0ec9e0d0ac8dc3e5dbfbcaa81135be56c69cabbb6/cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", size = 454565 }, + { url = "https://files.pythonhosted.org/packages/74/06/90b8a44abf3556599cdec107f7290277ae8901a58f75e6fe8f970cd72418/cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", size = 435635 }, + { url = "https://files.pythonhosted.org/packages/bd/62/a1f468e5708a70b1d86ead5bab5520861d9c7eacce4a885ded9faa7729c3/cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", size = 445218 }, + { url = "https://files.pythonhosted.org/packages/5b/95/b34462f3ccb09c2594aa782d90a90b045de4ff1f70148ee79c69d37a0a5a/cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", size = 460486 }, + { url = "https://files.pythonhosted.org/packages/fc/fc/a1e4bebd8d680febd29cf6c8a40067182b64f00c7d105f8f26b5bc54317b/cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", size = 437911 }, + { url = "https://files.pythonhosted.org/packages/e6/c3/21cab7a6154b6a5ea330ae80de386e7665254835b9e98ecc1340b3a7de9a/cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", size = 460632 }, + { url = "https://files.pythonhosted.org/packages/cb/b5/fd9f8b5a84010ca169ee49f4e4ad6f8c05f4e3545b72ee041dbbcb159882/cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", size = 171820 }, + { url = "https://files.pythonhosted.org/packages/8c/52/b08750ce0bce45c143e1b5d7357ee8c55341b52bdef4b0f081af1eb248c2/cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", size = 181290 }, +] + [[package]] name = "charset-normalizer" version = "3.4.0" @@ -239,6 +332,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] +[[package]] +name = "cryptography" +version = "44.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/09/8cc67f9b84730ad330b3b72cf867150744bf07ff113cda21a15a1c6d2c7c/cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", size = 6541833 }, + { url = "https://files.pythonhosted.org/packages/7e/5b/3759e30a103144e29632e7cb72aec28cedc79e514b2ea8896bb17163c19b/cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", size = 3922710 }, + { url = "https://files.pythonhosted.org/packages/5f/58/3b14bf39f1a0cfd679e753e8647ada56cddbf5acebffe7db90e184c76168/cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", size = 4137546 }, + { url = "https://files.pythonhosted.org/packages/98/65/13d9e76ca19b0ba5603d71ac8424b5694415b348e719db277b5edc985ff5/cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", size = 3915420 }, + { url = "https://files.pythonhosted.org/packages/b1/07/40fe09ce96b91fc9276a9ad272832ead0fddedcba87f1190372af8e3039c/cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", size = 4154498 }, + { url = "https://files.pythonhosted.org/packages/75/ea/af65619c800ec0a7e4034207aec543acdf248d9bffba0533342d1bd435e1/cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", size = 3932569 }, + { url = "https://files.pythonhosted.org/packages/4e/d5/9cc182bf24c86f542129565976c21301d4ac397e74bf5a16e48241aab8a6/cryptography-44.0.0-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:60eb32934076fa07e4316b7b2742fa52cbb190b42c2df2863dbc4230a0a9b385", size = 4164756 }, + { url = "https://files.pythonhosted.org/packages/c7/af/d1deb0c04d59612e3d5e54203159e284d3e7a6921e565bb0eeb6269bdd8a/cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", size = 4016721 }, + { url = "https://files.pythonhosted.org/packages/bd/69/7ca326c55698d0688db867795134bdfac87136b80ef373aaa42b225d6dd5/cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", size = 4240915 }, + { url = "https://files.pythonhosted.org/packages/ef/d4/cae11bf68c0f981e0413906c6dd03ae7fa864347ed5fac40021df1ef467c/cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", size = 2757925 }, + { url = "https://files.pythonhosted.org/packages/64/b1/50d7739254d2002acae64eed4fc43b24ac0cc44bf0a0d388d1ca06ec5bb1/cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", size = 3202055 }, + { url = "https://files.pythonhosted.org/packages/11/18/61e52a3d28fc1514a43b0ac291177acd1b4de00e9301aaf7ef867076ff8a/cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", size = 6542801 }, + { url = "https://files.pythonhosted.org/packages/1a/07/5f165b6c65696ef75601b781a280fc3b33f1e0cd6aa5a92d9fb96c410e97/cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", size = 3922613 }, + { url = "https://files.pythonhosted.org/packages/28/34/6b3ac1d80fc174812486561cf25194338151780f27e438526f9c64e16869/cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", size = 4137925 }, + { url = "https://files.pythonhosted.org/packages/d0/c7/c656eb08fd22255d21bc3129625ed9cd5ee305f33752ef2278711b3fa98b/cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", size = 3915417 }, + { url = "https://files.pythonhosted.org/packages/ef/82/72403624f197af0db6bac4e58153bc9ac0e6020e57234115db9596eee85d/cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", size = 4155160 }, + { url = "https://files.pythonhosted.org/packages/a2/cd/2f3c440913d4329ade49b146d74f2e9766422e1732613f57097fea61f344/cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", size = 3932331 }, + { url = "https://files.pythonhosted.org/packages/31/d9/90409720277f88eb3ab72f9a32bfa54acdd97e94225df699e7713e850bd4/cryptography-44.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9abcc2e083cbe8dde89124a47e5e53ec38751f0d7dfd36801008f316a127d7ba", size = 4165207 }, + { url = "https://files.pythonhosted.org/packages/7f/df/8be88797f0a1cca6e255189a57bb49237402b1880d6e8721690c5603ac23/cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", size = 4017372 }, + { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 }, + { url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 }, + { url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 }, + { url = "https://files.pythonhosted.org/packages/77/d4/fea74422326388bbac0c37b7489a0fcb1681a698c3b875959430ba550daa/cryptography-44.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731", size = 3338857 }, + { url = "https://files.pythonhosted.org/packages/1a/aa/ba8a7467c206cb7b62f09b4168da541b5109838627f582843bbbe0235e8e/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4", size = 3850615 }, + { url = "https://files.pythonhosted.org/packages/89/fa/b160e10a64cc395d090105be14f399b94e617c879efd401188ce0fea39ee/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", size = 4081622 }, + { url = "https://files.pythonhosted.org/packages/47/8f/20ff0656bb0cf7af26ec1d01f780c5cfbaa7666736063378c5f48558b515/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", size = 3867546 }, + { url = "https://files.pythonhosted.org/packages/38/d9/28edf32ee2fcdca587146bcde90102a7319b2f2c690edfa627e46d586050/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa", size = 4090937 }, + { url = "https://files.pythonhosted.org/packages/cc/9d/37e5da7519de7b0b070a3fedd4230fe76d50d2a21403e0f2153d70ac4163/cryptography-44.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", size = 3128774 }, +] + [[package]] name = "dictdiffer" version = "0.9.0" @@ -546,6 +678,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a9/6a/fd08d94654f7e67c52ca30523a178b3f8ccc4237fce4be90d39c938a831a/prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e", size = 386595 }, ] +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + [[package]] name = "pygments" version = "2.18.0" @@ -721,9 +862,10 @@ wheels = [ [[package]] name = "rapyuta-io-cli" -version = "9.0.4" +version = "9.4.0" source = { editable = "." } dependencies = [ + { name = "ansible-core" }, { name = "argparse" }, { name = "click" }, { name = "click-completion" }, @@ -768,6 +910,7 @@ dev = [ [package.metadata] requires-dist = [ + { name = "ansible-core", specifier = ">=2.13.13" }, { name = "argparse", specifier = ">=1.4.0" }, { name = "click", specifier = ">=8.0.1" }, { name = "click-completion", specifier = ">=0.5.2" }, @@ -838,6 +981,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, ] +[[package]] +name = "resolvelib" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/20/9541749d77aebf66dd92e2b803f38a50e3a5c76e7876f45eb2b37e758d82/resolvelib-0.8.1.tar.gz", hash = "sha256:c6ea56732e9fb6fca1b2acc2ccc68a0b6b8c566d8f3e78e0443310ede61dbd37", size = 17308 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/c0/46cfa3f56e43033b705965120058c018375600fa8fdb44c4e53d75820673/resolvelib-0.8.1-py2.py3-none-any.whl", hash = "sha256:d9b7907f055c3b3a2cfc56c914ffd940122915826ff5fb5b1de0c99778f4de98", size = 16113 }, +] + [[package]] name = "rpds-py" version = "0.20.0" From 94bb48e54da70cbd767bd500104f957f429c81f7 Mon Sep 17 00:00:00 2001 From: Pallab Pain Date: Wed, 27 Nov 2024 14:16:49 +0530 Subject: [PATCH 5/9] feat(device): handles failed hwil devices during apply and delete --- riocli/device/model.py | 9 ++- riocli/device/util.py | 106 ++++++++++++++++++++---------------- riocli/hwilclient/client.py | 10 +++- 3 files changed, 75 insertions(+), 50 deletions(-) diff --git a/riocli/device/model.py b/riocli/device/model.py index ed077f86..7734b845 100644 --- a/riocli/device/model.py +++ b/riocli/device/model.py @@ -62,7 +62,7 @@ def apply(self, *args, **kwargs) -> ApplyResult: # Create the HWIL (virtual) device and then generate the labels # to store HWIL metadata in rapyuta.io device. - hwil_response = create_hwil_device(self.spec, self.metadata) + hwil_response = create_hwil_device(virtual, self.metadata) labels = make_device_labels_from_hwil_device(hwil_response) # Create the rapyuta.io device with labels if the @@ -100,10 +100,15 @@ def delete(self, *args, **kwargs) -> None: try: device = find_device_by_name(client, self.metadata.name) except DeviceNotFound: + # If it was a virtual device, try deleting the HWIL + # resource if it is present and raise ResourceNotFound. + if self.spec.get("virtual", {}).get("enabled", False): + delete_hwil_device(self.spec.virtual, self.metadata) + raise ResourceNotFound if self.spec.get("virtual", {}).get("enabled", False): - delete_hwil_device(device) + delete_hwil_device(self.spec.virtual, self.metadata) device.delete() diff --git a/riocli/device/util.py b/riocli/device/util.py index 70e4f2be..65450f42 100644 --- a/riocli/device/util.py +++ b/riocli/device/util.py @@ -226,26 +226,63 @@ def is_remote_path(src, devices=None): return None, src +def sanitize_hwil_device_name(name: str) -> str: + if len(name) == 0: + return name + + name = name[0:50] + name = trim_suffix(name) + name = trim_prefix(name) + + r = "" + for c in name: + if c.isalnum() or c in ["-", "_"]: + r = r + c + + return r + + +def generate_hwil_device_name( + name: str, + product: str, + user: str, + project_id: str, +) -> str: + """Generates a valid hardware-in-the-loop device name.""" + project = project_id.split("project-")[1] + return sanitize_hwil_device_name(f"{name}-{product}-{user}-{project}") + + def create_hwil_device(spec: dict, metadata: dict) -> Munch: """Create a new hardware-in-the-loop device.""" - virtual = spec["virtual"] - os = virtual["os"] - codename = virtual["codename"] - arch = virtual["arch"] - product = virtual["product"] + os = spec["os"] + codename = spec["codename"] + arch = spec["arch"] + product = spec["product"] name = metadata["name"] - labels = make_hwil_labels(virtual, name) - device_name = sanitize_hwil_device_name(f"{name}-{product}-{labels['user']}") + labels = make_hwil_labels(spec, name) + device_name = generate_hwil_device_name( + name, product, labels["user"], labels["project"] + ) client = new_hwil_client() + device = None try: device_id = find_device_id(client, device_name) - return client.get_device(device_id) + device = client.get_device(device_id) + if device and device.status != "FAILED": + return device except DeviceNotFound: pass # Do nothing and proceed. + if device and device.status == "FAILED": + try: + client.delete_device(device.id) + except Exception: + raise Exception("cannot delete previously failed device") + response = client.create_device(device_name, arch, os, codename, labels) client.poll_till_device_ready(response.id, sleep_interval=5, retry_limit=12) @@ -255,28 +292,21 @@ def create_hwil_device(spec: dict, metadata: dict) -> Munch: return response -def delete_hwil_device(device: Device) -> None: - """Delete a hardware-in-the-loop device. - - This is a helper method that deletes a HWIL device - associated with the rapyuta.io device. - """ - labels = device.get("labels", {}) - if not labels: - raise DeviceNotFound(message="hwil device not found") - - device_id = None - - for label in labels: - if label["key"] == "hwil_device_id": - device_id = label["value"] - break - - if device_id is None: - raise DeviceNotFound(message="hwil device not found") +def delete_hwil_device(spec: dict, metadata: dict) -> None: + """Delete a hardware-in-the-loop device by name.""" + product = spec["product"] + name = metadata["name"] + labels = make_hwil_labels(spec, name) + device_name = generate_hwil_device_name( + name, product, labels["user"], labels["project"] + ) client = new_hwil_client() - client.delete_device(device_id) + devices = client.list_devices(query={"name": device_name}) + if not devices: + return + + client.delete_device(devices[0].id) def execute_onboard_command(device_id: int, onboard_command: str) -> None: @@ -312,30 +342,14 @@ def make_hwil_labels(spec: dict, device_name: str) -> typing.Dict: def make_device_labels_from_hwil_device(d: Munch) -> dict: return { - "hwil_device_id": str(d.id), - "hwil_device_name": d.name, "arch": d.architecture, "flavor": d.flavor, + "hwil_device_id": str(d.id), + "hwil_device_name": d.name, "hwil_device_username": d.username, } -def sanitize_hwil_device_name(name): - if len(name) == 0: - return name - - name = name[0:50] - name = trim_suffix(name) - name = trim_prefix(name) - - r = "" - for c in name: - if c.isalnum() or c in ["-", "_"]: - r = r + c - - return r - - def wait_until_online(device: Device, timeout: int = 600) -> None: """Wait until the device is online. diff --git a/riocli/hwilclient/client.py b/riocli/hwilclient/client.py index f4806ff4..81f56560 100644 --- a/riocli/hwilclient/client.py +++ b/riocli/hwilclient/client.py @@ -212,11 +212,17 @@ def poll_till_device_ready( msg = f"Retries exhausted: Tried {retry_limit} times with {sleep_interval}s interval." raise RetriesExhausted(msg) - def list_devices(self: Client): + def list_devices(self: Client, query: dict = None) -> Munch: """Fetch all HWIL devices""" url = f"{self._host}/device/" headers = self._get_auth_header() - response = RestClient(url).method(HttpMethod.GET).headers(headers).execute() + response = ( + RestClient(url) + .method(HttpMethod.GET) + .headers(headers) + .query_param(query or {}) + .execute() + ) handle_server_errors(response) data = json.loads(response.text) From 2886c4db89be251e3a13c5446c597008043caac7 Mon Sep 17 00:00:00 2001 From: Pallab Pain Date: Wed, 4 Dec 2024 14:30:20 +0530 Subject: [PATCH 6/9] refactor(device): makes product optional in device manifest --- riocli/apply/manifests/device.yaml | 2 +- riocli/device/util.py | 15 +++++++++------ riocli/jsonschema/schemas/device-schema.yaml | 2 -- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/riocli/apply/manifests/device.yaml b/riocli/apply/manifests/device.yaml index c1f861ca..40c3eca8 100644 --- a/riocli/apply/manifests/device.yaml +++ b/riocli/apply/manifests/device.yaml @@ -64,7 +64,7 @@ spec: rosDistro: "melodic" # Options: ["kinetic", "melodic" (default), "noetic"] virtual: enabled: True # Required - product: "sootballs" # Required Options: ["sootballs", "flaptter", "oks", "platform"] + product: "sootballs" # Optional: ["sootballs", "flaptter", "oks"] arch: "amd64" # Options: ["amd64" (default), "arm64" ] os: "ubuntu" # Options: ["ubuntu" (default), "debian" ] codename: "focal" # Options: ["bionic", "focal" (default), "jammy", "noble", "bullseye"] diff --git a/riocli/device/util.py b/riocli/device/util.py index 65450f42..b19713ff 100644 --- a/riocli/device/util.py +++ b/riocli/device/util.py @@ -250,7 +250,11 @@ def generate_hwil_device_name( ) -> str: """Generates a valid hardware-in-the-loop device name.""" project = project_id.split("project-")[1] - return sanitize_hwil_device_name(f"{name}-{product}-{user}-{project}") + device_name = f"{name}-{product}-{user}-{project}" + if not product: + device_name = f"{name}-{user}-{project}" + + return sanitize_hwil_device_name(device_name) def create_hwil_device(spec: dict, metadata: dict) -> Munch: @@ -258,7 +262,7 @@ def create_hwil_device(spec: dict, metadata: dict) -> Munch: os = spec["os"] codename = spec["codename"] arch = spec["arch"] - product = spec["product"] + product = spec.get("product") name = metadata["name"] labels = make_hwil_labels(spec, name) @@ -294,7 +298,7 @@ def create_hwil_device(spec: dict, metadata: dict) -> Munch: def delete_hwil_device(spec: dict, metadata: dict) -> None: """Delete a hardware-in-the-loop device by name.""" - product = spec["product"] + product = spec.get("product") name = metadata["name"] labels = make_hwil_labels(spec, name) device_name = generate_hwil_device_name( @@ -329,13 +333,12 @@ def make_hwil_labels(spec: dict, device_name: str) -> typing.Dict: "user": user_email, "organization": data["organization_id"], "project": data["project_id"], - "product": spec["product"], "rapyuta_device_name": device_name, "expiry_after": spec["expireAfter"], } - if spec.get("highperf", False): - labels["highperf"] = "" + if "product" in spec: + labels["product"] = spec["product"] return labels diff --git a/riocli/jsonschema/schemas/device-schema.yaml b/riocli/jsonschema/schemas/device-schema.yaml index 45f9433a..2c82d8df 100644 --- a/riocli/jsonschema/schemas/device-schema.yaml +++ b/riocli/jsonschema/schemas/device-schema.yaml @@ -76,7 +76,6 @@ definitions: - sootballs - flaptter - oks - - platform arch: type: string enum: @@ -106,7 +105,6 @@ definitions: default: 12h required: - enabled - - product dependencies: docker: oneOf: From 387181cab56c7e5f9e1cf2b535245810cc597515 Mon Sep 17 00:00:00 2001 From: Pallab Pain Date: Tue, 5 Nov 2024 16:57:54 +0530 Subject: [PATCH 7/9] feat(deployment): adds an option to block paramsync until ready --- riocli/apply/manifests/deployment-nonros-device.yaml | 7 +++++++ riocli/apply/manifests/deployment.yaml | 7 +++++++ riocli/jsonschema/schemas/deployment-schema.yaml | 5 +++++ 3 files changed, 19 insertions(+) diff --git a/riocli/apply/manifests/deployment-nonros-device.yaml b/riocli/apply/manifests/deployment-nonros-device.yaml index f7a4e581..3241bdb4 100644 --- a/riocli/apply/manifests/deployment-nonros-device.yaml +++ b/riocli/apply/manifests/deployment-nonros-device.yaml @@ -16,6 +16,13 @@ spec: kind: device nameOrGUID: device-docker restart: always # Options: [always, onfailure, never] + features: + params: + enabled: true + trees: + - config01 + - config02 + blockUntilSynced: true # Optional [true, false]. Default is false. envArgs: - name: TEST_KEY value: test_value diff --git a/riocli/apply/manifests/deployment.yaml b/riocli/apply/manifests/deployment.yaml index d4d21f26..5f0c43f3 100644 --- a/riocli/apply/manifests/deployment.yaml +++ b/riocli/apply/manifests/deployment.yaml @@ -287,6 +287,13 @@ spec: kind: device nameOrGUID: device-docker restart: always # Options: [always, onfailure, never] + features: + params: + enabled: true + trees: + - config01 + - config02 + blockUntilSynced: true # Optional [true, false]. Default is false. envArgs: - name: TEST_KEY value: test_value diff --git a/riocli/jsonschema/schemas/deployment-schema.yaml b/riocli/jsonschema/schemas/deployment-schema.yaml index a0659565..0d580801 100755 --- a/riocli/jsonschema/schemas/deployment-schema.yaml +++ b/riocli/jsonschema/schemas/deployment-schema.yaml @@ -174,8 +174,12 @@ definitions: type: string disableSync: type: boolean + blockUntilSynced: + type: boolean + default: false required: - enabled + - trees type: object additionalProperties: false @@ -211,6 +215,7 @@ definitions: type: boolean required: - enabled + - trees envArgs: type: array items: From efbb1046e156d6223674b6c5e3784468264f678d Mon Sep 17 00:00:00 2001 From: KUMAR SHIKHAR Date: Wed, 11 Dec 2024 10:17:53 +0530 Subject: [PATCH 8/9] chore: bumps sdk version to 2.2.1 (#396) --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e2fa3076..0f7575ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ dependencies = [ "python-magic>=0.4.27", "pytz", "pyyaml>=5.4.1", - "rapyuta-io>=2.2.0", + "rapyuta-io>=2.2.1", "requests>=2.20.0", "semver>=3.0.0", "setuptools", diff --git a/uv.lock b/uv.lock index 423759ca..aa900d29 100644 --- a/uv.lock +++ b/uv.lock @@ -844,7 +844,7 @@ wheels = [ [[package]] name = "rapyuta-io" -version = "2.2.0" +version = "2.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, @@ -855,9 +855,9 @@ dependencies = [ { name = "six" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/46/5060b2467f6b917096f431d92871a7c0921c9470bd3bf6a2fe136336e0a7/rapyuta_io-2.2.0.tar.gz", hash = "sha256:198a86e8770448ad96cbfb9847e821934a27e10926c8fce0179693e183b962b1", size = 52374 } +sdist = { url = "https://files.pythonhosted.org/packages/6e/ba/2530453629d006164e17c8b06754b0fd698c5bdf5b38ac9515b8089bf044/rapyuta_io-2.2.1.tar.gz", hash = "sha256:4bf83d65b1aefa9dcd892806af891f666b2b107049bc7ea75feb2ac55c64d78a", size = 52403 } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/42/97ebb12973b2d3d1f2426eb9731d228473932ff0600b41e44f7e90863958/rapyuta_io-2.2.0-py3-none-any.whl", hash = "sha256:54727a57cb84aa26c23acb5c35b20e6299b553a32dd9ff5a0aaec4e4b4eb907c", size = 60836 }, + { url = "https://files.pythonhosted.org/packages/c4/ca/a52c7759075c5784e33f3890deac48ba33bead8826bb30893960c651704d/rapyuta_io-2.2.1-py3-none-any.whl", hash = "sha256:9a06bd698929a9a794ebc088407d68fe2aac515d531d300b2d1412e89934fac8", size = 60881 }, ] [[package]] @@ -935,7 +935,7 @@ requires-dist = [ { name = "python-magic", specifier = ">=0.4.27" }, { name = "pytz" }, { name = "pyyaml", specifier = ">=5.4.1" }, - { name = "rapyuta-io", specifier = ">=2.2.0" }, + { name = "rapyuta-io", specifier = ">=2.2.1" }, { name = "requests", specifier = ">=2.20.0" }, { name = "semver", specifier = ">=3.0.0" }, { name = "setuptools" }, From 2a68b2d14dda2a51c68dc09d7c4f17f9eeb96b2b Mon Sep 17 00:00:00 2001 From: Pallab Pain Date: Wed, 11 Dec 2024 11:57:43 +0530 Subject: [PATCH 9/9] chore: bumps sdk to v2.2.2 --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0f7575ce..011c07e8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ dependencies = [ "python-magic>=0.4.27", "pytz", "pyyaml>=5.4.1", - "rapyuta-io>=2.2.1", + "rapyuta-io>=2.2.2", "requests>=2.20.0", "semver>=3.0.0", "setuptools", diff --git a/uv.lock b/uv.lock index aa900d29..4159ed62 100644 --- a/uv.lock +++ b/uv.lock @@ -844,7 +844,7 @@ wheels = [ [[package]] name = "rapyuta-io" -version = "2.2.1" +version = "2.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, @@ -855,9 +855,9 @@ dependencies = [ { name = "six" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/ba/2530453629d006164e17c8b06754b0fd698c5bdf5b38ac9515b8089bf044/rapyuta_io-2.2.1.tar.gz", hash = "sha256:4bf83d65b1aefa9dcd892806af891f666b2b107049bc7ea75feb2ac55c64d78a", size = 52403 } +sdist = { url = "https://files.pythonhosted.org/packages/e6/51/c497160a29357ecbbb521bc3803b76867a833571109609334a5425ee27a7/rapyuta_io-2.2.2.tar.gz", hash = "sha256:2d569516b10baa83734a036223cb9599ad7a41a01021157b2e92450eb44a21c8", size = 52407 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/ca/a52c7759075c5784e33f3890deac48ba33bead8826bb30893960c651704d/rapyuta_io-2.2.1-py3-none-any.whl", hash = "sha256:9a06bd698929a9a794ebc088407d68fe2aac515d531d300b2d1412e89934fac8", size = 60881 }, + { url = "https://files.pythonhosted.org/packages/1e/7b/9feb722161bbd9abebe6f7fbfa48c408023384b17b8b6c6b5caa62153c51/rapyuta_io-2.2.2-py3-none-any.whl", hash = "sha256:31faa0cfe150ef44fe21e730d35275ff81f0a268ca71b55b38bf8dfc68517b0c", size = 60873 }, ] [[package]] @@ -935,7 +935,7 @@ requires-dist = [ { name = "python-magic", specifier = ">=0.4.27" }, { name = "pytz" }, { name = "pyyaml", specifier = ">=5.4.1" }, - { name = "rapyuta-io", specifier = ">=2.2.1" }, + { name = "rapyuta-io", specifier = ">=2.2.2" }, { name = "requests", specifier = ">=2.20.0" }, { name = "semver", specifier = ">=3.0.0" }, { name = "setuptools" },