diff options
author | Chris Patterson <cpatterson@microsoft.com> | 2022-02-14 12:09:01 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-14 11:09:01 -0600 |
commit | 9ba3ca6ce5013207737e431f52735c7eda3a2fbb (patch) | |
tree | 3f240e45f3c2f7d5954234738cd3a92cdecd2417 | |
parent | 470b4a574514cf87f90682ac2bdd71b5fbbe6139 (diff) | |
download | vyos-cloud-init-9ba3ca6ce5013207737e431f52735c7eda3a2fbb.tar.gz vyos-cloud-init-9ba3ca6ce5013207737e431f52735c7eda3a2fbb.zip |
mypy: introduce type checking (#1254)
All currently failing modules are excluded from reporting
errors using follow-imports=silent and an exclusion list.
Future work can whittle down this failing list. This change will
start enforcing new modules and those currently passing.
Includes some minor alphabetical reordering in tox.ini.
Signed-off-by: Chris Patterson <cpatterson@microsoft.com>
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | pyproject.toml | 115 | ||||
-rw-r--r-- | tox.ini | 38 |
3 files changed, 149 insertions, 6 deletions
diff --git a/.travis.yml b/.travis.yml index 2e79f2b7..f655fa50 100644 --- a/.travis.yml +++ b/.travis.yml @@ -133,6 +133,8 @@ matrix: - python: 3.6 env: TOXENV=flake8 - python: 3.6 + env: TOXENV=mypy + - python: 3.6 env: TOXENV=pylint - python: 3.6 env: TOXENV=black diff --git a/pyproject.toml b/pyproject.toml index 26734e62..a131037f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,3 +6,118 @@ profile = "black" line_length = 79 # We patch logging in main.py before certain imports skip = ["cloudinit/cmd/main.py", ".tox", "packages", "tools"] + +[tool.mypy] +follow_imports = "silent" +exclude=[ + '^cloudinit/apport\.py$', + '^cloudinit/cmd/query\.py$', + '^cloudinit/config/cc_apk_configure\.py$', + '^cloudinit/config/cc_apt_configure\.py$', + '^cloudinit/config/cc_apt_pipelining\.py$', + '^cloudinit/config/cc_bootcmd\.py$', + '^cloudinit/config/cc_byobu\.py$', + '^cloudinit/config/cc_ca_certs\.py$', + '^cloudinit/config/cc_chef\.py$', + '^cloudinit/config/cc_debug\.py$', + '^cloudinit/config/cc_disable_ec2_metadata\.py$', + '^cloudinit/config/cc_disk_setup\.py$', + '^cloudinit/config/cc_install_hotplug\.py$', + '^cloudinit/config/cc_keyboard\.py$', + '^cloudinit/config/cc_landscape\.py$', + '^cloudinit/config/cc_locale\.py$', + '^cloudinit/config/cc_mcollective\.py$', + '^cloudinit/config/cc_ntp\.py$', + '^cloudinit/config/cc_resizefs\.py$', + '^cloudinit/config/cc_rsyslog\.py$', + '^cloudinit/config/cc_runcmd\.py$', + '^cloudinit/config/cc_snap\.py$', + '^cloudinit/config/cc_ubuntu_advantage\.py$', + '^cloudinit/config/cc_ubuntu_drivers\.py$', + '^cloudinit/config/cc_write_files\.py$', + '^cloudinit/config/cc_write_files_deferred\.py$', + '^cloudinit/config/cc_zypper_add_repo\.py$', + '^cloudinit/config/schema\.py$', + '^cloudinit/distros/bsd\.py$', + '^cloudinit/distros/freebsd\.py$', + '^cloudinit/distros/parsers/networkmanager_conf\.py$', + '^cloudinit/distros/parsers/resolv_conf\.py$', + '^cloudinit/distros/parsers/sys_conf\.py$', + '^cloudinit/dmi\.py$', + '^cloudinit/features\.py$', + '^cloudinit/handlers/cloud_config\.py$', + '^cloudinit/handlers/jinja_template\.py$', + '^cloudinit/importer\.py$', + '^cloudinit/net/__init__\.py$', + '^cloudinit/net/dhcp\.py$', + '^cloudinit/net/netplan\.py$', + '^cloudinit/net/sysconfig\.py$', + '^cloudinit/serial\.py$', + '^cloudinit/sources/DataSourceAzure\.py$', + '^cloudinit/sources/DataSourceAliYun\.py$', + '^cloudinit/sources/DataSourceLXD\.py$', + '^cloudinit/sources/DataSourceOracle\.py$', + '^cloudinit/sources/DataSourceScaleway\.py$', + '^cloudinit/sources/DataSourceSmartOS\.py$', + '^cloudinit/sources/DataSourceVMware\.py$', + '^cloudinit/sources/__init__\.py$', + '^cloudinit/sources/helpers/azure\.py$', + '^cloudinit/sources/helpers/vmware/imc/config_file\.py$', + '^cloudinit/stages\.py$', + '^cloudinit/templater\.py$', + '^cloudinit/url_helper\.py$', + '^conftest\.py$', + '^doc/rtd/conf\.py$', + '^setup\.py$', + '^tests/integration_tests/clouds\.py$', + '^tests/integration_tests/conftest\.py$', + '^tests/integration_tests/instances\.py$', + '^tests/integration_tests/integration_settings\.py$', + '^tests/integration_tests/modules/test_disk_setup\.py$', + '^tests/integration_tests/modules/test_growpart\.py$', + '^tests/integration_tests/modules/test_ssh_keysfile\.py$', + '^tests/unittests/__init__\.py$', + '^tests/unittests/cmd/devel/test_render\.py$', + '^tests/unittests/cmd/test_clean\.py$', + '^tests/unittests/cmd/test_cloud_id\.py$', + '^tests/unittests/cmd/test_main\.py$', + '^tests/unittests/cmd/test_query\.py$', + '^tests/unittests/cmd/test_status\.py$', + '^tests/unittests/config/test_cc_chef\.py$', + '^tests/unittests/config/test_cc_landscape\.py$', + '^tests/unittests/config/test_cc_locale\.py$', + '^tests/unittests/config/test_cc_mcollective\.py$', + '^tests/unittests/config/test_cc_rh_subscription\.py$', + '^tests/unittests/config/test_cc_set_hostname\.py$', + '^tests/unittests/config/test_cc_snap\.py$', + '^tests/unittests/config/test_cc_timezone\.py$', + '^tests/unittests/config/test_cc_ubuntu_advantage\.py$', + '^tests/unittests/config/test_cc_ubuntu_drivers\.py$', + '^tests/unittests/config/test_schema\.py$', + '^tests/unittests/helpers\.py$', + '^tests/unittests/net/test_dhcp\.py$', + '^tests/unittests/net/test_init\.py$', + '^tests/unittests/sources/test_aliyun\.py$', + '^tests/unittests/sources/test_azure\.py$', + '^tests/unittests/sources/test_ec2\.py$', + '^tests/unittests/sources/test_exoscale\.py$', + '^tests/unittests/sources/test_gce\.py$', + '^tests/unittests/sources/test_lxd\.py$', + '^tests/unittests/sources/test_opennebula\.py$', + '^tests/unittests/sources/test_openstack\.py$', + '^tests/unittests/sources/test_rbx\.py$', + '^tests/unittests/sources/test_scaleway\.py$', + '^tests/unittests/sources/test_smartos\.py$', + '^tests/unittests/test_data\.py$', + '^tests/unittests/test_ds_identify\.py$', + '^tests/unittests/test_ec2_util\.py$', + '^tests/unittests/test_net\.py$', + '^tests/unittests/test_net_activators\.py$', + '^tests/unittests/test_persistence\.py$', + '^tests/unittests/test_sshutil\.py$', + '^tests/unittests/test_subp\.py$', + '^tests/unittests/test_templating\.py$', + '^tests/unittests/test_url_helper\.py$', + '^tests/unittests/test_util\.py$', + '^tools/mock-meta\.py$', +] @@ -1,5 +1,5 @@ [tox] -envlist = py3, lowest-supported-dev, flake8, pylint, black, isort +envlist = py3, lowest-supported-dev, black, flake8, isort, mypy, pylint recreate = True [testenv] @@ -10,10 +10,15 @@ passenv= PYTEST_ADDOPTS [format_deps] -flake8==3.9.2 -pylint==2.11.1 black==21.12b0 +flake8==3.9.2 isort==5.10.1 +mypy==0.931 +pylint==2.11.1 +pytest==7.0.0 +types-PyYAML==6.0.4 +types-requests==2.27.8 +types-setuptools==57.4.9 [testenv:flake8] deps = @@ -37,18 +42,30 @@ deps = isort=={[format_deps]isort} commands = {envpython} -m isort . --check-only +[testenv:mypy] +deps = + mypy=={[format_deps]mypy} + types-pyyaml=={[format_deps]types-PyYAML} + types-requests=={[format_deps]types-requests} + types-setuptools=={[format_deps]types-setuptools} + pytest=={[format_deps]pytest} +commands = {envpython} -m mypy . + [testenv:check_format] deps = - flake8=={[format_deps]flake8} - pylint=={[format_deps]pylint} black=={[format_deps]black} + flake8=={[format_deps]flake8} isort=={[format_deps]isort} + mypy=={[format_deps]mypy} + pylint=={[format_deps]pylint} + pytest=={[format_deps]pytest} -r{toxinidir}/test-requirements.txt -r{toxinidir}/integration-requirements.txt commands = {[testenv:black]commands} - {[testenv:isort]commands} {[testenv:flake8]commands} + {[testenv:isort]commands} + {[testenv:mypy]commands} {[testenv:pylint]commands} [testenv:do_format] @@ -122,6 +139,15 @@ commands = commands = {envpython} -m flake8 {posargs:cloudinit/ tests/ tools/ setup.py} deps = flake8 +[testenv:tip-mypy] +commands = {envpython} -m mypy --install-types --non-interactive . +deps = + mypy + pytest + types-PyYAML + types-requests + types-setuptools + [testenv:tip-pylint] commands = {envpython} -m pylint {posargs:cloudinit tests tools} deps = |