From 7c2b2aabf37efe53e0d008aa8cf00cdcb5ce79a5 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Mon, 8 Sep 2025 20:55:50 +0100 Subject: [PATCH] chore: enable mypy with baseline Related: https://github.com/orsinium-labs/mypy-baseline/pull/30 --- mypy-baseline.txt | 279 ++++++++++++++++++ pyproject.toml | 44 ++- src/molecule_plugins/docker/driver.py | 4 +- src/molecule_plugins/ec2/driver.py | 2 +- .../gce/playbooks/files/windows_auth.py | 6 +- .../vagrant/modules/vagrant.py | 2 +- test/{vagrant-plugin => }/__init__.py | 0 .../gce/scenarios/linux/files/windows_auth.py | 2 +- .../scenarios/windows/files/windows_auth.py | 2 +- test/openstack/test_func.py | 2 +- .../functional => vagrant_plugin}/__init__.py | 0 test/vagrant_plugin/functional/__init__.py | 0 .../functional/conftest.py | 0 .../functional/test_func.py | 3 +- .../scenarios/molecule/box_url/converge.yml | 0 .../scenarios/molecule/box_url/molecule.yml | 0 .../molecule/config_options/converge.yml | 0 .../molecule/config_options/molecule.yml | 0 .../molecule/config_options/verify.yml | 0 .../molecule/default-compat/converge.yml | 0 .../molecule/default-compat/create.yml | 0 .../molecule/default-compat/destroy.yml | 0 .../molecule/default-compat/molecule.yml | 0 .../scenarios/molecule/default/converge.yml | 0 .../scenarios/molecule/default/molecule.yml | 0 .../scenarios/molecule/hostname/converge.yml | 0 .../scenarios/molecule/hostname/molecule.yml | 0 .../scenarios/molecule/hostname/verify.yml | 0 .../scenarios/molecule/invalid/converge.yml | 0 .../scenarios/molecule/invalid/molecule.yml | 0 .../molecule/multi-node/converge.yml | 0 .../molecule/multi-node/molecule.yml | 0 .../scenarios/molecule/multi-node/verify.yml | 0 .../scenarios/molecule/network/converge.yml | 0 .../scenarios/molecule/network/molecule.yml | 0 .../scenarios/molecule/network/verify.yml | 0 .../provider_config_options/converge.yml | 0 .../provider_config_options/molecule.yml | 0 .../provider_config_options/verify.yml | 0 .../molecule/vagrant_root/converge.yml | 0 .../molecule/vagrant_root/molecule.yml | 0 .../molecule/vagrant_root/verify.yml | 0 .../test_driver.py | 0 uv.lock | 194 +++++++++++- 44 files changed, 509 insertions(+), 31 deletions(-) create mode 100644 mypy-baseline.txt rename test/{vagrant-plugin => }/__init__.py (100%) rename test/{vagrant-plugin/functional => vagrant_plugin}/__init__.py (100%) create mode 100644 test/vagrant_plugin/functional/__init__.py rename test/{vagrant-plugin => vagrant_plugin}/functional/conftest.py (100%) rename test/{vagrant-plugin => vagrant_plugin}/functional/test_func.py (98%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/box_url/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/box_url/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/config_options/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/config_options/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/config_options/verify.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/default-compat/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/default-compat/create.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/default-compat/destroy.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/default-compat/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/default/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/default/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/hostname/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/hostname/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/hostname/verify.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/invalid/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/invalid/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/multi-node/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/multi-node/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/multi-node/verify.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/network/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/network/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/network/verify.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/provider_config_options/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/provider_config_options/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/provider_config_options/verify.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/vagrant_root/converge.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/vagrant_root/molecule.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/scenarios/molecule/vagrant_root/verify.yml (100%) rename test/{vagrant-plugin => vagrant_plugin}/test_driver.py (100%) diff --git a/mypy-baseline.txt b/mypy-baseline.txt new file mode 100644 index 00000000..a65c7cfc --- /dev/null +++ b/mypy-baseline.txt @@ -0,0 +1,279 @@ +conftest.py:0: error: Call to untyped function "_rebake_command" in typed context [no-untyped-call] +conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a type annotation [no-untyped-def] +conftest.py:0: error: Function is missing a type annotation [no-untyped-def] +conftest.py:0: error: Module has no attribute "helpers" [attr-defined] +conftest.py:0: error: Module has no attribute "helpers" [attr-defined] +conftest.py:0: error: Module has no attribute "helpers" [attr-defined] +conftest.py:0: error: Module has no attribute "helpers" [attr-defined] +conftest.py:0: error: Module has no attribute "helpers" [attr-defined] +conftest.py:0: error: Module has no attribute "helpers" [attr-defined] +src/molecule_plugins/azure/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/azure/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/molecule_plugins/azure/driver.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/containers/driver.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/molecule_plugins/containers/driver.py:0: error: Incompatible import of "DriverBackend" (imported name has type "type[Podman]", local name has type "type[Docker]") [assignment] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/molecule_plugins/docker/driver.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/docker/driver.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/docker/playbooks/filter_plugins/get_docker_networks.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/docker/playbooks/filter_plugins/get_docker_networks.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/ec2/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/ec2/driver.py:0: error: Call to untyped function "_get_windows_instance_pass" in typed context [no-untyped-call] +src/molecule_plugins/ec2/driver.py:0: error: Call to untyped function "ansible_connection_options" in typed context [no-untyped-call] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/molecule_plugins/ec2/driver.py:0: error: Item "DHPrivateKey" of "DHPrivateKey | Ed25519PrivateKey | Ed448PrivateKey | RSAPrivateKey | DSAPrivateKey | EllipticCurvePrivateKey | X25519PrivateKey | X448PrivateKey" has no attribute "decrypt" [union-attr] +src/molecule_plugins/ec2/driver.py:0: error: Item "DSAPrivateKey" of "DHPrivateKey | Ed25519PrivateKey | Ed448PrivateKey | RSAPrivateKey | DSAPrivateKey | EllipticCurvePrivateKey | X25519PrivateKey | X448PrivateKey" has no attribute "decrypt" [union-attr] +src/molecule_plugins/ec2/driver.py:0: error: Item "Ed25519PrivateKey" of "DHPrivateKey | Ed25519PrivateKey | Ed448PrivateKey | RSAPrivateKey | DSAPrivateKey | EllipticCurvePrivateKey | X25519PrivateKey | X448PrivateKey" has no attribute "decrypt" [union-attr] +src/molecule_plugins/ec2/driver.py:0: error: Item "Ed448PrivateKey" of "DHPrivateKey | Ed25519PrivateKey | Ed448PrivateKey | RSAPrivateKey | DSAPrivateKey | EllipticCurvePrivateKey | X25519PrivateKey | X448PrivateKey" has no attribute "decrypt" [union-attr] +src/molecule_plugins/ec2/driver.py:0: error: Item "EllipticCurvePrivateKey" of "DHPrivateKey | Ed25519PrivateKey | Ed448PrivateKey | RSAPrivateKey | DSAPrivateKey | EllipticCurvePrivateKey | X25519PrivateKey | X448PrivateKey" has no attribute "decrypt" [union-attr] +src/molecule_plugins/ec2/driver.py:0: error: Item "X25519PrivateKey" of "DHPrivateKey | Ed25519PrivateKey | Ed448PrivateKey | RSAPrivateKey | DSAPrivateKey | EllipticCurvePrivateKey | X25519PrivateKey | X448PrivateKey" has no attribute "decrypt" [union-attr] +src/molecule_plugins/ec2/driver.py:0: error: Item "X448PrivateKey" of "DHPrivateKey | Ed25519PrivateKey | Ed448PrivateKey | RSAPrivateKey | DSAPrivateKey | EllipticCurvePrivateKey | X25519PrivateKey | X448PrivateKey" has no attribute "decrypt" [union-attr] +src/molecule_plugins/ec2/driver.py:0: error: Item "object" of "object | Any" has no attribute "get" [union-attr] +src/molecule_plugins/ec2/driver.py:0: error: Item "object" of "object | Any" has no attribute "get" [union-attr] +src/molecule_plugins/ec2/driver.py:0: error: No overload variant of "get" of "dict" matches argument types "str", "dict[Never, Never]" [call-overload] +src/molecule_plugins/ec2/driver.py:0: error: Unsupported target for indexed assignment ("object | Any") [index] +src/molecule_plugins/ec2/driver.py:0: error: Value of type variable "_T" of "merge_dicts" cannot be "object | Any" [type-var] +src/molecule_plugins/ec2/driver.py:0: note: Possible overload variants: +src/molecule_plugins/ec2/driver.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/ec2/driver.py:0: note: def [_T] get(self, Never, _T, /) -> _T +src/molecule_plugins/ec2/driver.py:0: note: def get(self, Never, Never, /) -> Never +src/molecule_plugins/ec2/driver.py:0: note: def get(self, Never, None = ..., /) -> None +src/molecule_plugins/gce/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/gce/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/molecule_plugins/gce/driver.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "Arguments" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "DecryptPassword" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "GetCompute" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "GetEncryptedPasswordFromSerialPort" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "GetExpirationTimeString" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "GetInstance" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "GetJsonString" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "GetKey" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "GetModulusExponentInBase64" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "GetSerialPortFourOutput" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "GetSerialPortFourOutput" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "UpdateInstanceMetadata" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "UpdateWindowsKeys" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Call to untyped function "main" in typed context [no-untyped-call] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/gce/playbooks/files/windows_auth.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/openstack/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/openstack/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/openstack/driver.py:0: error: Call to untyped function "_is_module_installed" in typed context [no-untyped-call] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/molecule_plugins/openstack/driver.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/podman/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/molecule_plugins/podman/driver.py:0: error: Incompatible types in assignment (expression has type "str | None", variable has type "None") [assignment] +src/molecule_plugins/podman/driver.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/podman/driver.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/vagrant/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/driver.py:0: error: Call to untyped function "_get_instance_config" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/molecule_plugins/vagrant/driver.py:0: error: Item "None" of "Ansible | None" has no attribute "inventory_file" [union-attr] +src/molecule_plugins/vagrant/driver.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Argument 1 to "join" has incompatible type "str | None"; expected "str" [arg-type] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "Vagrant" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_conf" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_conf" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_conf_instance" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_created" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_config" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_instance_vagrant_config_dict" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stderr_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stderr_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stderr_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stderr_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stderr_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stderr_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stderr_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stdout_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stdout_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_stdout_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_vagrant" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_vagrant_config_dict" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_vagrant_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_get_vagrant_log" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_running" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_running" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_status" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_status" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_status_instance" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_write_configs" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "_write_vagrantfile" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "destroy" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "halt" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "main" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Call to untyped function "up" in typed context [no-untyped-call] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a return type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a type annotation [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Incompatible types in assignment (expression has type "bool", variable has type "None") [assignment] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Incompatible types in assignment (expression has type "bool", variable has type "None") [assignment] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Missing type parameters for generic type "MutableMapping" [type-arg] +src/molecule_plugins/vagrant/modules/vagrant.py:0: error: Need type annotation for "result" (hint: "result: dict[, ] = ...") [var-annotated] +src/molecule_plugins/vagrant/modules/vagrant.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/vagrant/modules/vagrant.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/vagrant/modules/vagrant.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/vagrant/modules/vagrant.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/vagrant/modules/vagrant.py:0: note: Use "-> None" if function does not return a value +src/molecule_plugins/vagrant/modules/vagrant.py:0: note: Use "-> None" if function does not return a value +test/azure/functional/test_azure.py:0: error: Function is missing a type annotation [no-untyped-def] +test/azure/functional/test_azure.py:0: error: Module has no attribute "helpers" [attr-defined] +test/azure/test_driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/azure/test_driver.py:0: note: Use "-> None" if function does not return a value +test/containers/functional/test_containers.py:0: error: Function is missing a type annotation [no-untyped-def] +test/containers/test_driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/containers/test_driver.py:0: note: Use "-> None" if function does not return a value +test/docker/conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/docker/test_driver.py:0: error: Function is missing a type annotation [no-untyped-def] +test/docker/test_func.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/docker/test_func.py:0: error: Missing type parameters for generic type "CompletedProcess" [type-arg] +test/ec2/functional/test_ec2.py:0: error: Function is missing a type annotation [no-untyped-def] +test/ec2/functional/test_ec2.py:0: error: Module has no attribute "helpers" [attr-defined] +test/ec2/test_driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/ec2/test_driver.py:0: note: Use "-> None" if function does not return a value +test/gce/functional/test_func.py:0: error: Function is missing a type annotation [no-untyped-def] +test/gce/functional/test_func.py:0: error: Module has no attribute "helpers" [attr-defined] +test/gce/test_driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/gce/test_driver.py:0: note: Use "-> None" if function does not return a value +test/openstack/conftest.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/openstack/test_driver.py:0: error: Function is missing a type annotation [no-untyped-def] +test/openstack/test_func.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/openstack/test_func.py:0: error: Function is missing a type annotation for one or more arguments [no-untyped-def] +test/openstack/test_func.py:0: error: Missing type parameters for generic type "CompletedProcess" [type-arg] +test/podman/conftest.py:0: error: Function is missing a type annotation [no-untyped-def] +test/podman/conftest.py:0: error: Unexpected keyword argument "msg" for "exit" [call-arg] +test/podman/test_driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/podman/test_driver.py:0: error: Function is missing a type annotation [no-untyped-def] +test/podman/test_driver.py:0: note: Use "-> None" if function does not return a value +test/podman/test_func.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/podman/test_func.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/podman/test_func.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/podman/test_func.py:0: error: Missing type parameters for generic type "CompletedProcess" [type-arg] +test/podman/test_func.py:0: note: Use "-> None" if function does not return a value +test/vagrant_plugin/functional/test_func.py:0: error: Argument "env" to "run_command" of "App" has incompatible type "_Environ[str]"; expected "dict[str, str] | None" [arg-type] +test/vagrant_plugin/functional/test_func.py:0: error: Call to untyped function "Vagrant" in typed context [no-untyped-call] +test/vagrant_plugin/functional/test_func.py:0: error: Call to untyped function "plugin_list" in typed context [no-untyped-call] +test/vagrant_plugin/functional/test_func.py:0: error: Function is missing a type annotation [no-untyped-def] +test/vagrant_plugin/functional/test_func.py:0: error: Function is missing a type annotation [no-untyped-def] +test/vagrant_plugin/functional/test_func.py:0: error: Function is missing a type annotation [no-untyped-def] +test/vagrant_plugin/functional/test_func.py:0: error: Function is missing a type annotation [no-untyped-def] +test/vagrant_plugin/test_driver.py:0: error: Function is missing a return type annotation [no-untyped-def] +test/vagrant_plugin/test_driver.py:0: note: Use "-> None" if function does not return a value diff --git a/pyproject.toml b/pyproject.toml index 86e95acf..5b227fa7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,8 +22,7 @@ docker = [ lint = [ "molecule>=25.7.0", "pre-commit>=4.1", - "pre-commit-uv>=4.1.4", - "toml>=0.10.2" + "pre-commit-uv>=4.1.4" ] pkg = [ "build>=0.9", @@ -31,6 +30,20 @@ pkg = [ "pipx>=1.7.1", "twine>=4.0.1" ] +type = [ + "types-docker", + "mypy>=1.17.1", + "mypy-baseline>=0.7.3", + "pytest", # for mypy + "toml>=0.10.2", + "types-toml>=0.10.8.20240310", + "openstacksdk>=4.7.0", + "boto3>=1.40.26", + "google-auth>=2.40.3", + "python-vagrant>=1.0.0", + "ansible-core>=2.17.13", + "pycryptodome>=3.23.0" +] [project] # https://peps.python.org/pep-0621/#readme @@ -122,6 +135,25 @@ changelog = "https://github.com/ansible-community/molecule-plugins/releases" [tool.codespell] skip = "uv.lock" +[tool.mypy] +files = "." +color_output = true +error_summary = true +# explicit_package_bases = true +namespace_packages = false +exclude = [ + ".ansible", + ".cache", + ".tox", + ".venv", + "node_modules", + "build", + "dist", + "site", + "scenarios" +] +strict = true + [tool.pytest.ini_options] addopts = "-v -rxXs --doctest-modules --durations 10 -p no:pytest_ansible" doctest_optionflags = "ALLOW_UNICODE ELLIPSIS" @@ -129,9 +161,10 @@ junit_suite_name = "molecule_test_suite" norecursedirs = ["dist", "doc", "build", ".tox", ".eggs", "src", "test/*/scenarios", "test/*/resources"] [tool.ruff] -target-version = "py39" +target-version = "py310" # Same as Black. line-length = 88 +unsafe-fixes = true lint.ignore = [ "E501", # we use black # we deliberately ignore these: @@ -195,12 +228,13 @@ uv_sync_flags = ["--upgrade", "--prerelease=allow"] uv_sync_locked = false [tool.tox.env.lint] -dependency_groups = ["lint"] +dependency_groups = ["lint", "dev", "type"] description = "Run all linters" runner = "uv-venv-lock-runner" -skip_install = false commands_pre = [] commands = [ + # move inside a pre-commit hook once https://github.com/orsinium-labs/mypy-baseline/pull/30 is released + ["bash", "-c", "mypy --no-error-summary --hide-error-context | mypy-baseline filter --hide-stats --allow-unsynced && mypy --no-error-summary --hide-error-context | mypy-baseline sync --sort-baseline"], ["pre-commit", "run", "-a"], ["bash", "{tox_root}/tools/generate-templates.sh"], ["rm", "-rf", "test/roles"] diff --git a/src/molecule_plugins/docker/driver.py b/src/molecule_plugins/docker/driver.py index dd6ac931..690fc7b1 100644 --- a/src/molecule_plugins/docker/driver.py +++ b/src/molecule_plugins/docker/driver.py @@ -242,7 +242,7 @@ def sanity_checks(self): import docker # noqa: PLC0415 docker_client = docker.from_env() - docker_client.ping() + docker_client.ping() # type: ignore[no-untyped-call] except docker.errors.DockerException: msg = ( "Unable to contact the Docker daemon. " @@ -264,7 +264,7 @@ def reset(self): for c in client.containers.list(filters={"label": "owner=molecule"}): log.info("Stopping docker container %s ...", c.id) c.stop(timeout=3) - result = client.containers.prune(filters={"label": "owner=molecule"}) + result = client.containers.prune(filters={"label": "owner=molecule"}) # type: ignore[no-untyped-call] for c in result.get("ContainersDeleted") or []: log.info("Deleted container %s", c) for n in client.networks.list(filters={"label": "owner=molecule"}): diff --git a/src/molecule_plugins/ec2/driver.py b/src/molecule_plugins/ec2/driver.py index e2bac364..3e7f2d46 100644 --- a/src/molecule_plugins/ec2/driver.py +++ b/src/molecule_plugins/ec2/driver.py @@ -32,7 +32,7 @@ HAS_CRYPTOGRAPHY = False try: - import boto3 + import boto3 # type: ignore[import-untyped] HAS_BOTO3 = True except ImportError: diff --git a/src/molecule_plugins/gce/playbooks/files/windows_auth.py b/src/molecule_plugins/gce/playbooks/files/windows_auth.py index 92b7c4ec..f01ecd5a 100755 --- a/src/molecule_plugins/gce/playbooks/files/windows_auth.py +++ b/src/molecule_plugins/gce/playbooks/files/windows_auth.py @@ -25,16 +25,16 @@ # https://developers.google.com/api-client-library/python/start/get_started import google.auth -# PyCrypto library: https://pypi.python.org/pypi/pycrypto +# https://pypi.org/project/pycryptodome/ from Crypto.Cipher import PKCS1_OAEP from Crypto.PublicKey import RSA from Crypto.Util.number import long_to_bytes -from googleapiclient.discovery import build +from googleapiclient.discovery import build # type: ignore[import-not-found] def GetCompute(): """Get a compute object for communicating with the Compute Engine API.""" - credentials, project = google.auth.default() + credentials, project = google.auth.default() # type: ignore[no-untyped-call] compute = build("compute", "v1", credentials=credentials) return compute diff --git a/src/molecule_plugins/vagrant/modules/vagrant.py b/src/molecule_plugins/vagrant/modules/vagrant.py index 0e094280..4ecf736d 100755 --- a/src/molecule_plugins/vagrant/modules/vagrant.py +++ b/src/molecule_plugins/vagrant/modules/vagrant.py @@ -30,7 +30,7 @@ from collections.abc import MutableMapping import jinja2 -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import AnsibleModule # type: ignore[import-untyped] try: import vagrant diff --git a/test/vagrant-plugin/__init__.py b/test/__init__.py similarity index 100% rename from test/vagrant-plugin/__init__.py rename to test/__init__.py diff --git a/test/gce/scenarios/linux/files/windows_auth.py b/test/gce/scenarios/linux/files/windows_auth.py index 5dd89558..16c5e2d0 100755 --- a/test/gce/scenarios/linux/files/windows_auth.py +++ b/test/gce/scenarios/linux/files/windows_auth.py @@ -21,7 +21,7 @@ import json import time -# PyCrypto library: https://pypi.python.org/pypi/pycrypto +# https://pypi.org/project/pycryptodome/ from Crypto.Cipher import PKCS1_OAEP from Crypto.PublicKey import RSA from Crypto.Util.number import long_to_bytes diff --git a/test/gce/scenarios/windows/files/windows_auth.py b/test/gce/scenarios/windows/files/windows_auth.py index 5dd89558..16c5e2d0 100755 --- a/test/gce/scenarios/windows/files/windows_auth.py +++ b/test/gce/scenarios/windows/files/windows_auth.py @@ -21,7 +21,7 @@ import json import time -# PyCrypto library: https://pypi.python.org/pypi/pycrypto +# https://pypi.org/project/pycryptodome/ from Crypto.Cipher import PKCS1_OAEP from Crypto.PublicKey import RSA from Crypto.Util.number import long_to_bytes diff --git a/test/openstack/test_func.py b/test/openstack/test_func.py index 6ca8aa81..7bc04241 100644 --- a/test/openstack/test_func.py +++ b/test/openstack/test_func.py @@ -6,9 +6,9 @@ import subprocess from pathlib import Path +import openstack import pytest -import openstack from conftest import change_dir_to from molecule import logger from molecule.app import get_app diff --git a/test/vagrant-plugin/functional/__init__.py b/test/vagrant_plugin/__init__.py similarity index 100% rename from test/vagrant-plugin/functional/__init__.py rename to test/vagrant_plugin/__init__.py diff --git a/test/vagrant_plugin/functional/__init__.py b/test/vagrant_plugin/functional/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/vagrant-plugin/functional/conftest.py b/test/vagrant_plugin/functional/conftest.py similarity index 100% rename from test/vagrant-plugin/functional/conftest.py rename to test/vagrant_plugin/functional/conftest.py diff --git a/test/vagrant-plugin/functional/test_func.py b/test/vagrant_plugin/functional/test_func.py similarity index 98% rename from test/vagrant-plugin/functional/test_func.py rename to test/vagrant_plugin/functional/test_func.py index 7b1f4b8e..84170979 100644 --- a/test/vagrant-plugin/functional/test_func.py +++ b/test/vagrant_plugin/functional/test_func.py @@ -38,8 +38,7 @@ def is_vagrant_supported() -> bool: """Return True if vagrant is installed and current platform is supported.""" if not shutil.which("vagrant"): return False - if not (platform.machine() == "arm64" and platform.system() == "Darwin"): - return True + return bool(not (platform.machine() == "arm64" and platform.system() == "Darwin")) @pytest.mark.skipif( diff --git a/test/vagrant-plugin/scenarios/molecule/box_url/converge.yml b/test/vagrant_plugin/scenarios/molecule/box_url/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/box_url/converge.yml rename to test/vagrant_plugin/scenarios/molecule/box_url/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/box_url/molecule.yml b/test/vagrant_plugin/scenarios/molecule/box_url/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/box_url/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/box_url/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/config_options/converge.yml b/test/vagrant_plugin/scenarios/molecule/config_options/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/config_options/converge.yml rename to test/vagrant_plugin/scenarios/molecule/config_options/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/config_options/molecule.yml b/test/vagrant_plugin/scenarios/molecule/config_options/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/config_options/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/config_options/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/config_options/verify.yml b/test/vagrant_plugin/scenarios/molecule/config_options/verify.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/config_options/verify.yml rename to test/vagrant_plugin/scenarios/molecule/config_options/verify.yml diff --git a/test/vagrant-plugin/scenarios/molecule/default-compat/converge.yml b/test/vagrant_plugin/scenarios/molecule/default-compat/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/default-compat/converge.yml rename to test/vagrant_plugin/scenarios/molecule/default-compat/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/default-compat/create.yml b/test/vagrant_plugin/scenarios/molecule/default-compat/create.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/default-compat/create.yml rename to test/vagrant_plugin/scenarios/molecule/default-compat/create.yml diff --git a/test/vagrant-plugin/scenarios/molecule/default-compat/destroy.yml b/test/vagrant_plugin/scenarios/molecule/default-compat/destroy.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/default-compat/destroy.yml rename to test/vagrant_plugin/scenarios/molecule/default-compat/destroy.yml diff --git a/test/vagrant-plugin/scenarios/molecule/default-compat/molecule.yml b/test/vagrant_plugin/scenarios/molecule/default-compat/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/default-compat/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/default-compat/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/default/converge.yml b/test/vagrant_plugin/scenarios/molecule/default/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/default/converge.yml rename to test/vagrant_plugin/scenarios/molecule/default/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/default/molecule.yml b/test/vagrant_plugin/scenarios/molecule/default/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/default/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/default/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/hostname/converge.yml b/test/vagrant_plugin/scenarios/molecule/hostname/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/hostname/converge.yml rename to test/vagrant_plugin/scenarios/molecule/hostname/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/hostname/molecule.yml b/test/vagrant_plugin/scenarios/molecule/hostname/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/hostname/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/hostname/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/hostname/verify.yml b/test/vagrant_plugin/scenarios/molecule/hostname/verify.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/hostname/verify.yml rename to test/vagrant_plugin/scenarios/molecule/hostname/verify.yml diff --git a/test/vagrant-plugin/scenarios/molecule/invalid/converge.yml b/test/vagrant_plugin/scenarios/molecule/invalid/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/invalid/converge.yml rename to test/vagrant_plugin/scenarios/molecule/invalid/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/invalid/molecule.yml b/test/vagrant_plugin/scenarios/molecule/invalid/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/invalid/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/invalid/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/multi-node/converge.yml b/test/vagrant_plugin/scenarios/molecule/multi-node/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/multi-node/converge.yml rename to test/vagrant_plugin/scenarios/molecule/multi-node/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/multi-node/molecule.yml b/test/vagrant_plugin/scenarios/molecule/multi-node/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/multi-node/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/multi-node/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/multi-node/verify.yml b/test/vagrant_plugin/scenarios/molecule/multi-node/verify.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/multi-node/verify.yml rename to test/vagrant_plugin/scenarios/molecule/multi-node/verify.yml diff --git a/test/vagrant-plugin/scenarios/molecule/network/converge.yml b/test/vagrant_plugin/scenarios/molecule/network/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/network/converge.yml rename to test/vagrant_plugin/scenarios/molecule/network/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/network/molecule.yml b/test/vagrant_plugin/scenarios/molecule/network/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/network/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/network/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/network/verify.yml b/test/vagrant_plugin/scenarios/molecule/network/verify.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/network/verify.yml rename to test/vagrant_plugin/scenarios/molecule/network/verify.yml diff --git a/test/vagrant-plugin/scenarios/molecule/provider_config_options/converge.yml b/test/vagrant_plugin/scenarios/molecule/provider_config_options/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/provider_config_options/converge.yml rename to test/vagrant_plugin/scenarios/molecule/provider_config_options/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/provider_config_options/molecule.yml b/test/vagrant_plugin/scenarios/molecule/provider_config_options/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/provider_config_options/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/provider_config_options/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/provider_config_options/verify.yml b/test/vagrant_plugin/scenarios/molecule/provider_config_options/verify.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/provider_config_options/verify.yml rename to test/vagrant_plugin/scenarios/molecule/provider_config_options/verify.yml diff --git a/test/vagrant-plugin/scenarios/molecule/vagrant_root/converge.yml b/test/vagrant_plugin/scenarios/molecule/vagrant_root/converge.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/vagrant_root/converge.yml rename to test/vagrant_plugin/scenarios/molecule/vagrant_root/converge.yml diff --git a/test/vagrant-plugin/scenarios/molecule/vagrant_root/molecule.yml b/test/vagrant_plugin/scenarios/molecule/vagrant_root/molecule.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/vagrant_root/molecule.yml rename to test/vagrant_plugin/scenarios/molecule/vagrant_root/molecule.yml diff --git a/test/vagrant-plugin/scenarios/molecule/vagrant_root/verify.yml b/test/vagrant_plugin/scenarios/molecule/vagrant_root/verify.yml similarity index 100% rename from test/vagrant-plugin/scenarios/molecule/vagrant_root/verify.yml rename to test/vagrant_plugin/scenarios/molecule/vagrant_root/verify.yml diff --git a/test/vagrant-plugin/test_driver.py b/test/vagrant_plugin/test_driver.py similarity index 100% rename from test/vagrant-plugin/test_driver.py rename to test/vagrant_plugin/test_driver.py diff --git a/uv.lock b/uv.lock index 1c95f2c2..644c4ac2 100644 --- a/uv.lock +++ b/uv.lock @@ -42,8 +42,8 @@ name = "ansible-compat" version = "25.8.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ansible-core", version = "2.17.13", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "ansible-core", version = "2.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "ansible-core", version = "2.17.14", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ansible-core", version = "2.19.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "jsonschema" }, { name = "packaging" }, { name = "pyyaml" }, @@ -56,7 +56,7 @@ wheels = [ [[package]] name = "ansible-core" -version = "2.17.13" +version = "2.17.14" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version < '3.11' and sys_platform == 'linux2'", @@ -70,14 +70,14 @@ dependencies = [ { name = "pyyaml", marker = "python_full_version < '3.11'" }, { name = "resolvelib", version = "1.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/23/9e/cfbe230c214f93c42891e0b87d97d82d6a1085b306056241df68d553a0ba/ansible_core-2.17.13.tar.gz", hash = "sha256:2ecb85b9fc9145a24145a3027ed3c716b27eda8493dd3e1f0330a20571e63f8b", size = 3119881, upload-time = "2025-07-15T17:47:33.891Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/80/2925a0564f6f99a8002c3be3885b83c3a1dc5f57ebf00163f528889865f5/ansible_core-2.17.14.tar.gz", hash = "sha256:7c17fee39f8c29d70e3282a7e9c10bd70d5cd4fd13ddffc5dcaa52adbd142ff8", size = 3119687, upload-time = "2025-09-08T18:28:03.158Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/e6/0fa10e14c2a8addd6ef464c3aec58b4d65dd53aad7402df2c9025604f6c4/ansible_core-2.17.13-py3-none-any.whl", hash = "sha256:4fe5ead1d08152a44ef3994383b1d12e66e2a911621bb7cef868db6864cb14c5", size = 2189172, upload-time = "2025-07-15T17:47:31.979Z" }, + { url = "https://files.pythonhosted.org/packages/86/29/d694562f1a875b50aa74f691521fe493704f79cf1938cd58f28f7e2327d2/ansible_core-2.17.14-py3-none-any.whl", hash = "sha256:34a49582a57c2f2af17ede2cefd3b3602a2d55d22089f3928570d52030cafa35", size = 2189656, upload-time = "2025-09-08T18:28:00.375Z" }, ] [[package]] name = "ansible-core" -version = "2.19.1" +version = "2.19.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.12' and sys_platform == 'linux2'", @@ -94,9 +94,9 @@ dependencies = [ { name = "pyyaml", marker = "python_full_version >= '3.11'" }, { name = "resolvelib", version = "1.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4e/5e/c3333cdf0a6c0512a272734f0b91602a3686ad119d75c8d22f16fd513706/ansible_core-2.19.1.tar.gz", hash = "sha256:affd33b38d32b57cfc2cd6daf3aafcb384297039e4c5600196a2ee9aa027b75d", size = 3401547, upload-time = "2025-08-25T19:18:24.129Z" } +sdist = { url = "https://files.pythonhosted.org/packages/16/f1/1c21d3bff03fe9a5b51515307db7a76ec8b8972c70d5702cc3027c988a99/ansible_core-2.19.2.tar.gz", hash = "sha256:87fcbbc492ed16eb6adb0379bae0adbf69f3ce88a8440e7e88e0dcefa9f8a54c", size = 3408325, upload-time = "2025-09-08T18:11:33.666Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/37/9d/422fc6efbadad60ab3d9c18edc52c43fb7bc4677e83ce0908def8dd7bea5/ansible_core-2.19.1-py3-none-any.whl", hash = "sha256:ef42569dc9bb1641ef1adcc7e5bc6b4567b7383c7daf46d3a1885117c93a83e4", size = 2412931, upload-time = "2025-08-25T19:18:22.514Z" }, + { url = "https://files.pythonhosted.org/packages/f5/49/f0ae13c228ae31613a27f9a06e55fdaa76ee45fce3d35c9f6e1ef423a6c0/ansible_core-2.19.2-py3-none-any.whl", hash = "sha256:1fe6ca533951b5ba4a619e763ea4f6725f68c36677c7d5aaa467b59aa449bdc8", size = 2403942, upload-time = "2025-09-08T18:11:31.341Z" }, ] [[package]] @@ -105,8 +105,8 @@ version = "25.8.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ansible-compat" }, - { name = "ansible-core", version = "2.17.13", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "ansible-core", version = "2.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "ansible-core", version = "2.17.14", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ansible-core", version = "2.19.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "black" }, { name = "filelock" }, { name = "importlib-metadata" }, @@ -248,6 +248,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" }, ] +[[package]] +name = "boto3" +version = "1.40.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/68/40902312de023458edae9bb42c503f2aafda5009079cead1ab693f2350a6/boto3-1.40.26.tar.gz", hash = "sha256:9a71684825cfd4548027f254eadf4dafb7fccc7523f20e2a1cb74033f4d74a6b", size = 111549, upload-time = "2025-09-08T19:51:09.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/b7/7b6f803dc62f57ed7c8ac108b7aef36fb27ca0aaccd197e3f83bdf57a68a/boto3-1.40.26-py3-none-any.whl", hash = "sha256:8272deb4b82c4a0faa1231c2cd5c6d267d71ed6265abef545c1d5b7f0aa936d8", size = 139324, upload-time = "2025-09-08T19:51:07.876Z" }, +] + +[[package]] +name = "botocore" +version = "1.40.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/d7/e42337570f38405a99fa9f9d5f1379fd52de412b1d4c65351d688c461b5d/botocore-1.40.26.tar.gz", hash = "sha256:f8f46b3978b7c324f4c0bef03505870c4c5240c736bfb63318da091942a29710", size = 14330031, upload-time = "2025-09-08T19:50:58.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/8b/1dadb6b391346a811ee44b1f36159c376e536e7851c2c1348b44d718da76/botocore-1.40.26-py3-none-any.whl", hash = "sha256:c3e89787b1a360d0fd30f9066864415df02d54b07691cabc34a6b1a01c3d2549", size = 14003429, upload-time = "2025-09-08T19:50:54.466Z" }, +] + [[package]] name = "bracex" version = "2.6" @@ -1059,8 +1087,8 @@ version = "25.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ansible-compat" }, - { name = "ansible-core", version = "2.17.13", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "ansible-core", version = "2.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "ansible-core", version = "2.17.14", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ansible-core", version = "2.19.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "click" }, { name = "click-help-colors" }, { name = "enrich" }, @@ -1146,7 +1174,6 @@ lint = [ { name = "molecule" }, { name = "pre-commit" }, { name = "pre-commit-uv" }, - { name = "toml" }, ] pkg = [ { name = "build" }, @@ -1154,6 +1181,21 @@ pkg = [ { name = "pipx" }, { name = "twine" }, ] +type = [ + { name = "ansible-core", version = "2.17.14", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ansible-core", version = "2.19.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "boto3" }, + { name = "google-auth" }, + { name = "mypy" }, + { name = "mypy-baseline" }, + { name = "openstacksdk" }, + { name = "pycryptodome" }, + { name = "pytest" }, + { name = "python-vagrant" }, + { name = "toml" }, + { name = "types-docker" }, + { name = "types-toml" }, +] [package.metadata] requires-dist = [ @@ -1187,7 +1229,6 @@ lint = [ { name = "molecule", specifier = ">=25.7.0" }, { name = "pre-commit", specifier = ">=4.1" }, { name = "pre-commit-uv", specifier = ">=4.1.4" }, - { name = "toml", specifier = ">=0.10.2" }, ] pkg = [ { name = "build", specifier = ">=0.9" }, @@ -1195,6 +1236,20 @@ pkg = [ { name = "pipx", specifier = ">=1.7.1" }, { name = "twine", specifier = ">=4.0.1" }, ] +type = [ + { name = "ansible-core", specifier = ">=2.17.13" }, + { name = "boto3", specifier = ">=1.40.26" }, + { name = "google-auth", specifier = ">=2.40.3" }, + { name = "mypy", specifier = ">=1.17.1" }, + { name = "mypy-baseline", specifier = ">=0.7.3" }, + { name = "openstacksdk", specifier = ">=4.7.0" }, + { name = "pycryptodome", specifier = ">=3.23.0" }, + { name = "pytest" }, + { name = "python-vagrant", specifier = ">=1.0.0" }, + { name = "toml", specifier = ">=0.10.2" }, + { name = "types-docker" }, + { name = "types-toml", specifier = ">=0.10.8.20240310" }, +] [[package]] name = "more-itertools" @@ -1250,6 +1305,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1d/f3/8fcd2af0f5b806f6cf463efaffd3c9548a28f84220493ecd38d127b6b66d/mypy-1.17.1-py3-none-any.whl", hash = "sha256:a9f52c0351c21fe24c21d8c0eb1f62967b262d6729393397b6f443c3b773c3b9", size = 2283411, upload-time = "2025-07-31T07:53:24.664Z" }, ] +[[package]] +name = "mypy-baseline" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/2a/03288dab6d5f24d187ba0c223f6b3035d9a29de3dd31a3e105a0d4f1b5da/mypy_baseline-0.7.3.tar.gz", hash = "sha256:325f0695310eb8f5c0f10fa7af36ee1b3785a9d26b886a61c07b4a8eddb28d29", size = 319108, upload-time = "2025-05-30T08:43:00.629Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/93/7780302b206a8e8e767ce763ef06159725d1323acbe55e46a1cd1ffd109d/mypy_baseline-0.7.3-py3-none-any.whl", hash = "sha256:bd7fa899e687d75af2e3f392a9d6d1790e65dae3d31fe12525cc14f26d866b74", size = 17868, upload-time = "2025-05-30T08:42:58.262Z" }, +] + [[package]] name = "mypy-extensions" version = "1.1.0" @@ -1533,6 +1597,41 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, ] +[[package]] +name = "pycryptodome" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/a6/8452177684d5e906854776276ddd34eca30d1b1e15aa1ee9cefc289a33f5/pycryptodome-3.23.0.tar.gz", hash = "sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef", size = 4921276, upload-time = "2025-05-17T17:21:45.242Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/5d/bdb09489b63cd34a976cc9e2a8d938114f7a53a74d3dd4f125ffa49dce82/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:0011f7f00cdb74879142011f95133274741778abba114ceca229adbf8e62c3e4", size = 2495152, upload-time = "2025-05-17T17:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/a7/ce/7840250ed4cc0039c433cd41715536f926d6e86ce84e904068eb3244b6a6/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:90460fc9e088ce095f9ee8356722d4f10f86e5be06e2354230a9880b9c549aae", size = 1639348, upload-time = "2025-05-17T17:20:23.171Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f0/991da24c55c1f688d6a3b5a11940567353f74590734ee4a64294834ae472/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4764e64b269fc83b00f682c47443c2e6e85b18273712b98aa43bcb77f8570477", size = 2184033, upload-time = "2025-05-17T17:20:25.424Z" }, + { url = "https://files.pythonhosted.org/packages/54/16/0e11882deddf00f68b68dd4e8e442ddc30641f31afeb2bc25588124ac8de/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb8f24adb74984aa0e5d07a2368ad95276cf38051fe2dc6605cbcf482e04f2a7", size = 2270142, upload-time = "2025-05-17T17:20:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/d5/fc/4347fea23a3f95ffb931f383ff28b3f7b1fe868739182cb76718c0da86a1/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d97618c9c6684a97ef7637ba43bdf6663a2e2e77efe0f863cce97a76af396446", size = 2309384, upload-time = "2025-05-17T17:20:30.765Z" }, + { url = "https://files.pythonhosted.org/packages/6e/d9/c5261780b69ce66d8cfab25d2797bd6e82ba0241804694cd48be41add5eb/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a53a4fe5cb075075d515797d6ce2f56772ea7e6a1e5e4b96cf78a14bac3d265", size = 2183237, upload-time = "2025-05-17T17:20:33.736Z" }, + { url = "https://files.pythonhosted.org/packages/5a/6f/3af2ffedd5cfa08c631f89452c6648c4d779e7772dfc388c77c920ca6bbf/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:763d1d74f56f031788e5d307029caef067febf890cd1f8bf61183ae142f1a77b", size = 2343898, upload-time = "2025-05-17T17:20:36.086Z" }, + { url = "https://files.pythonhosted.org/packages/9a/dc/9060d807039ee5de6e2f260f72f3d70ac213993a804f5e67e0a73a56dd2f/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:954af0e2bd7cea83ce72243b14e4fb518b18f0c1649b576d114973e2073b273d", size = 2269197, upload-time = "2025-05-17T17:20:38.414Z" }, + { url = "https://files.pythonhosted.org/packages/f9/34/e6c8ca177cb29dcc4967fef73f5de445912f93bd0343c9c33c8e5bf8cde8/pycryptodome-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:257bb3572c63ad8ba40b89f6fc9d63a2a628e9f9708d31ee26560925ebe0210a", size = 1768600, upload-time = "2025-05-17T17:20:40.688Z" }, + { url = "https://files.pythonhosted.org/packages/e4/1d/89756b8d7ff623ad0160f4539da571d1f594d21ee6d68be130a6eccb39a4/pycryptodome-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6501790c5b62a29fcb227bd6b62012181d886a767ce9ed03b303d1f22eb5c625", size = 1799740, upload-time = "2025-05-17T17:20:42.413Z" }, + { url = "https://files.pythonhosted.org/packages/5d/61/35a64f0feaea9fd07f0d91209e7be91726eb48c0f1bfc6720647194071e4/pycryptodome-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:9a77627a330ab23ca43b48b130e202582e91cc69619947840ea4d2d1be21eb39", size = 1703685, upload-time = "2025-05-17T17:20:44.388Z" }, + { url = "https://files.pythonhosted.org/packages/db/6c/a1f71542c969912bb0e106f64f60a56cc1f0fabecf9396f45accbe63fa68/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27", size = 2495627, upload-time = "2025-05-17T17:20:47.139Z" }, + { url = "https://files.pythonhosted.org/packages/6e/4e/a066527e079fc5002390c8acdd3aca431e6ea0a50ffd7201551175b47323/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843", size = 1640362, upload-time = "2025-05-17T17:20:50.392Z" }, + { url = "https://files.pythonhosted.org/packages/50/52/adaf4c8c100a8c49d2bd058e5b551f73dfd8cb89eb4911e25a0c469b6b4e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490", size = 2182625, upload-time = "2025-05-17T17:20:52.866Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e9/a09476d436d0ff1402ac3867d933c61805ec2326c6ea557aeeac3825604e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575", size = 2268954, upload-time = "2025-05-17T17:20:55.027Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c5/ffe6474e0c551d54cab931918127c46d70cab8f114e0c2b5a3c071c2f484/pycryptodome-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa0698f65e5b570426fc31b8162ed4603b0c2841cbb9088e2b01641e3065915b", size = 2308534, upload-time = "2025-05-17T17:20:57.279Z" }, + { url = "https://files.pythonhosted.org/packages/18/28/e199677fc15ecf43010f2463fde4c1a53015d1fe95fb03bca2890836603a/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:53ecbafc2b55353edcebd64bf5da94a2a2cdf5090a6915bcca6eca6cc452585a", size = 2181853, upload-time = "2025-05-17T17:20:59.322Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ea/4fdb09f2165ce1365c9eaefef36625583371ee514db58dc9b65d3a255c4c/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:156df9667ad9f2ad26255926524e1c136d6664b741547deb0a86a9acf5ea631f", size = 2342465, upload-time = "2025-05-17T17:21:03.83Z" }, + { url = "https://files.pythonhosted.org/packages/22/82/6edc3fc42fe9284aead511394bac167693fb2b0e0395b28b8bedaa07ef04/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:dea827b4d55ee390dc89b2afe5927d4308a8b538ae91d9c6f7a5090f397af1aa", size = 2267414, upload-time = "2025-05-17T17:21:06.72Z" }, + { url = "https://files.pythonhosted.org/packages/59/fe/aae679b64363eb78326c7fdc9d06ec3de18bac68be4b612fc1fe8902693c/pycryptodome-3.23.0-cp37-abi3-win32.whl", hash = "sha256:507dbead45474b62b2bbe318eb1c4c8ee641077532067fec9c1aa82c31f84886", size = 1768484, upload-time = "2025-05-17T17:21:08.535Z" }, + { url = "https://files.pythonhosted.org/packages/54/2f/e97a1b8294db0daaa87012c24a7bb714147c7ade7656973fd6c736b484ff/pycryptodome-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:c75b52aacc6c0c260f204cbdd834f76edc9fb0d8e0da9fbf8352ef58202564e2", size = 1799636, upload-time = "2025-05-17T17:21:10.393Z" }, + { url = "https://files.pythonhosted.org/packages/18/3d/f9441a0d798bf2b1e645adc3265e55706aead1255ccdad3856dbdcffec14/pycryptodome-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:11eeeb6917903876f134b56ba11abe95c0b0fd5e3330def218083c7d98bbcb3c", size = 1703675, upload-time = "2025-05-17T17:21:13.146Z" }, + { url = "https://files.pythonhosted.org/packages/d9/12/e33935a0709c07de084d7d58d330ec3f4daf7910a18e77937affdb728452/pycryptodome-3.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ddb95b49df036ddd264a0ad246d1be5b672000f12d6961ea2c267083a5e19379", size = 1623886, upload-time = "2025-05-17T17:21:20.614Z" }, + { url = "https://files.pythonhosted.org/packages/22/0b/aa8f9419f25870889bebf0b26b223c6986652bdf071f000623df11212c90/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e95564beb8782abfd9e431c974e14563a794a4944c29d6d3b7b5ea042110b4", size = 1672151, upload-time = "2025-05-17T17:21:22.666Z" }, + { url = "https://files.pythonhosted.org/packages/d4/5e/63f5cbde2342b7f70a39e591dbe75d9809d6338ce0b07c10406f1a140cdc/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e15c081e912c4b0d75632acd8382dfce45b258667aa3c67caf7a4d4c13f630", size = 1664461, upload-time = "2025-05-17T17:21:25.225Z" }, + { url = "https://files.pythonhosted.org/packages/d6/92/608fbdad566ebe499297a86aae5f2a5263818ceeecd16733006f1600403c/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7fc76bf273353dc7e5207d172b83f569540fc9a28d63171061c42e361d22353", size = 1702440, upload-time = "2025-05-17T17:21:27.991Z" }, + { url = "https://files.pythonhosted.org/packages/d1/92/2eadd1341abd2989cce2e2740b4423608ee2014acb8110438244ee97d7ff/pycryptodome-3.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:45c69ad715ca1a94f778215a11e66b7ff989d792a4d63b68dc586a1da1392ff5", size = 1803005, upload-time = "2025-05-17T17:21:31.37Z" }, +] + [[package]] name = "pydoclint" version = "0.7.3" @@ -1688,6 +1787,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/45/3c/b88167e2d6785c0e781ee5d498b07472aeb9b6765da3b19e7cc9e0813841/python_daemon-3.1.2-py3-none-any.whl", hash = "sha256:b906833cef63502994ad48e2eab213259ed9bb18d54fa8774dcba2ff7864cec6", size = 30872, upload-time = "2024-12-03T08:41:03.322Z" }, ] +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + [[package]] name = "python-vagrant" version = "1.0.0" @@ -2118,6 +2229,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/28/7e/61c42657f6e4614a4258f1c3b0c5b93adc4d1f8575f5229d1906b483099b/ruff-0.12.12-py3-none-win_arm64.whl", hash = "sha256:2a8199cab4ce4d72d158319b63370abf60991495fb733db96cd923a34c52d093", size = 12256762, upload-time = "2025-09-04T16:50:15.737Z" }, ] +[[package]] +name = "s3transfer" +version = "0.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/05/d52bf1e65044b4e5e27d4e63e8d1579dbdec54fce685908ae09bc3720030/s3transfer-0.13.1.tar.gz", hash = "sha256:c3fdba22ba1bd367922f27ec8032d6a1cf5f10c934fb5d68cf60fd5a23d936cf", size = 150589, upload-time = "2025-07-18T19:22:42.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/4f/d073e09df851cfa251ef7840007d04db3293a0482ce607d2b993926089be/s3transfer-0.13.1-py3-none-any.whl", hash = "sha256:a981aa7429be23fe6dfc13e80e4020057cbab622b08c0315288758d67cabc724", size = 85308, upload-time = "2025-07-18T19:22:40.947Z" }, +] + [[package]] name = "secretstorage" version = "3.3.3" @@ -2152,6 +2275,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, ] +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + [[package]] name = "stevedore" version = "5.5.0" @@ -2281,6 +2413,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl", hash = "sha256:418ebf08ccda9a8caaebe414433b0ba5e25eb5e4a927667122fbe8f829f985d8", size = 42727, upload-time = "2025-09-04T15:43:15.994Z" }, ] +[[package]] +name = "types-docker" +version = "7.1.0.20250907" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "types-requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/05/074063f0dbb7861d3bf73d72394671c7b0e19f6adb212ea5ae1a911471ca/types_docker-7.1.0.20250907.tar.gz", hash = "sha256:148654b2749914b6b5a0776bec7fbfa700cfcc5028add5f2c55e396509e4fda3", size = 31085, upload-time = "2025-09-07T02:56:32.169Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/8d/4da1a91bb0bcfbde29df8ffdb4b3c268156822311f374ec0618fc0e1b3d2/types_docker-7.1.0.20250907-py3-none-any.whl", hash = "sha256:aa415c62591eeaabfaa59481d4264f378938cc54e0c7ae645211cd1b451261d5", size = 45834, upload-time = "2025-09-07T02:56:31.051Z" }, +] + [[package]] name = "types-jsonschema" version = "4.25.1.20250822" @@ -2311,6 +2456,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/8e/8f0aca667c97c0d76024b37cffa39e76e2ce39ca54a38f285a64e6ae33ba/types_pyyaml-6.0.12.20250822-py3-none-any.whl", hash = "sha256:1fe1a5e146aa315483592d292b72a172b65b946a6d98aa6ddd8e4aa838ab7098", size = 20314, upload-time = "2025-08-22T03:02:15.002Z" }, ] +[[package]] +name = "types-requests" +version = "2.32.4.20250809" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/b0/9355adb86ec84d057fea765e4c49cce592aaf3d5117ce5609a95a7fc3dac/types_requests-2.32.4.20250809.tar.gz", hash = "sha256:d8060de1c8ee599311f56ff58010fb4902f462a1470802cf9f6ed27bc46c4df3", size = 23027, upload-time = "2025-08-09T03:17:10.664Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/6f/ec0012be842b1d888d46884ac5558fd62aeae1f0ec4f7a581433d890d4b5/types_requests-2.32.4.20250809-py3-none-any.whl", hash = "sha256:f73d1832fb519ece02c85b1f09d5f0dd3108938e7d47e7f94bbfa18a6782b163", size = 20644, upload-time = "2025-08-09T03:17:09.716Z" }, +] + +[[package]] +name = "types-toml" +version = "0.10.8.20240310" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/47/3e4c75042792bff8e90d7991aa5c51812cc668828cc6cce711e97f63a607/types-toml-0.10.8.20240310.tar.gz", hash = "sha256:3d41501302972436a6b8b239c850b26689657e25281b48ff0ec06345b8830331", size = 4392, upload-time = "2024-03-10T02:18:37.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/a2/d32ab58c0b216912638b140ab2170ee4b8644067c293b170e19fba340ccc/types_toml-0.10.8.20240310-py3-none-any.whl", hash = "sha256:627b47775d25fa29977d9c70dc0cbab3f314f32c8d8d0c012f2ef5de7aaec05d", size = 4777, upload-time = "2024-03-10T02:18:36.568Z" }, +] + [[package]] name = "typing-extensions" version = "4.15.0"