Base mypy support
Change-Id: Idf4283556dbc5a0af9a07d317d13cf20d9b496fb Signed-off-by: Andriy Kurilin <andr.kurilin@gmail.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
check:
|
||||
jobs:
|
||||
- rally-tox-cover
|
||||
- rally-tox-mypy
|
||||
- rally-tox-pep8
|
||||
- rally-tox-py310
|
||||
- rally-tox-py311
|
||||
@@ -75,6 +76,7 @@
|
||||
gate:
|
||||
jobs:
|
||||
- rally-tox-cover
|
||||
- rally-tox-mypy
|
||||
- rally-tox-pep8
|
||||
- rally-tox-py310
|
||||
- rally-tox-py311
|
||||
|
||||
643
pyproject.toml
643
pyproject.toml
@@ -53,3 +53,646 @@ options = "rally_openstack.common.cfg.opts:list_opts"
|
||||
|
||||
[project.entry-points."oslo.config.opts"]
|
||||
rally_openstack = "rally_openstack.common.cfg.opts:list_opts"
|
||||
|
||||
[tool.mypy]
|
||||
files = [
|
||||
"rally_openstack",
|
||||
]
|
||||
python_version = "3.10"
|
||||
disallow_untyped_defs = true
|
||||
check_untyped_defs = true
|
||||
allow_redefinition = true
|
||||
strict_equality = true
|
||||
# disable warnings on missing `return None` at the end of functions that
|
||||
# declare optional result
|
||||
no_warn_no_return = true
|
||||
|
||||
|
||||
# Disable type failures for tests
|
||||
[[tool.mypy.overrides]]
|
||||
module = "tests.*"
|
||||
ignore_errors = true
|
||||
|
||||
# temporary rally disable. wating for a new release
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally.*"
|
||||
ignore_missing_imports = true
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = [
|
||||
"barbicanclient.*",
|
||||
"cinderclient.*",
|
||||
"designateclient.*",
|
||||
"glanceclient.*",
|
||||
"gnocchiclient.*",
|
||||
"heatclient.*",
|
||||
"ironicclient.*",
|
||||
"keystoneauth1.*",
|
||||
"keystoneclient.*",
|
||||
"kubernetes.*",
|
||||
"magnumclient.*",
|
||||
"manilaclient.*",
|
||||
"mistralclient.*",
|
||||
"monascaclient.*",
|
||||
"novaclient.*",
|
||||
"neutronclient.*",
|
||||
"octaviaclient.*",
|
||||
"osc_lib.*",
|
||||
"osprofiler.*",
|
||||
"swiftclient.*",
|
||||
"troveclient.*",
|
||||
"watcherclient.*",
|
||||
"zaqarclient.*"
|
||||
|
||||
]
|
||||
ignore_missing_imports = true
|
||||
|
||||
# FIXME(andreykurilin): all the following should be fixed
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack._compat"
|
||||
disable_error_code = ["arg-type", "no-untyped-def", "union-attr"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.cfg.opts"
|
||||
disable_error_code = ["no-untyped-def", "var-annotated"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.consts"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.credential"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.osclients"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.gnocchi.metric"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.grafana.grafana"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.heat.main"
|
||||
disable_error_code = ["has-type", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.identity.identity"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.identity.keystone_common"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.identity.keystone_v2"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.identity.keystone_v3"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.image.glance_common"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.image.glance_v1"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.image.glance_v2"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.image.image"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.key_manager.barbican"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.loadbalancer.octavia"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.network.net_utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.network.neutron"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.storage.block"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.storage.cinder_common"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.storage.cinder_v1"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.storage.cinder_v2"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.services.storage.cinder_v3"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.validators"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.common.wrappers.network"
|
||||
disable_error_code = ["arg-type", "assignment", "call-overload", "no-untyped-def", "override"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.environment.platforms.existing"
|
||||
disable_error_code = ["no-untyped-def", "union-attr"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.cleanup.base"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.cleanup.manager"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.cleanup.resources"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.context"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.api_versions"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.cinder.volume_types"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.cinder.volumes"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.cleanup.admin"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.cleanup.base"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.cleanup.user"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.dataplane.heat"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.designate.zones"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.glance.images"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.heat.stacks"
|
||||
disable_error_code = ["index", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.keystone.roles"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.keystone.users"
|
||||
disable_error_code = ["no-untyped-def", "var-annotated"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.magnum.ca_certs"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.magnum.cluster_templates"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.magnum.clusters"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.manila.manila_security_services"
|
||||
disable_error_code = ["no-untyped-def", "var-annotated"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.manila.manila_share_networks"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.manila.manila_shares"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.monasca.metrics"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.network.allow_ssh"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.network.existing_network"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.network.networking_agents"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.network.networks"
|
||||
disable_error_code = ["assignment", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.network.routers"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.neutron.lbaas"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.nova.flavors"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.nova.keypairs"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.nova.servers"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.quotas.cinder_quotas"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.quotas.designate_quotas"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.quotas.manila_quotas"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.quotas.neutron_quotas"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.quotas.nova_quotas"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.quotas.quotas"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.swift.objects"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.swift.utils"
|
||||
disable_error_code = ["attr-defined", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.vm.custom_image"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.vm.image_command_customizer"
|
||||
disable_error_code = ["index", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.contexts.watcher.audit_templates"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.hooks.fault_injection"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenario"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.authenticate.authenticate"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.barbican.containers"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.barbican.orders"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.barbican.secrets"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.barbican.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.cinder.qos_specs"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.cinder.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.cinder.volume_backups"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.cinder.volume_types"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.cinder.volumes"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.designate.basic"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.designate.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.elasticsearch.logging"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.glance.images"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.gnocchi.archive_policy"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.gnocchi.archive_policy_rule"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.gnocchi.capabilities"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.gnocchi.metric"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.gnocchi.resource"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.gnocchi.resource_type"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.gnocchi.status"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.gnocchi.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.grafana.metrics"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.heat.stacks"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.heat.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.ironic.nodes"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.ironic.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.keystone.basic"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.magnum.cluster_templates"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.magnum.clusters"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.magnum.k8s_pods"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.magnum.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.manila.shares"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.manila.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.mistral.executions"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.mistral.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.mistral.workbooks"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.monasca.metrics"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.monasca.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.neutron.bgpvpn"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.neutron.loadbalancer_v1"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.neutron.loadbalancer_v2"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.neutron.network"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.neutron.security_groups"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.neutron.trunk"
|
||||
disable_error_code = ["misc", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.neutron.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.nova.aggregates"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.nova.availability_zones"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.nova.flavors"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.nova.hypervisors"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.nova.keypairs"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.nova.server_groups"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.nova.servers"
|
||||
disable_error_code = ["misc", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.nova.services"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.nova.utils"
|
||||
disable_error_code = ["no-untyped-def", "var-annotated"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.octavia.loadbalancers"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.octavia.pools"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.octavia.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.quotas.quotas"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.quotas.utils"
|
||||
disable_error_code = ["dict-item", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.swift.objects"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.swift.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.vm.utils"
|
||||
disable_error_code = ["assignment", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.vm.vmtasks"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.vm.workloads.siege"
|
||||
disable_error_code = ["call-overload", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.watcher.basic"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.watcher.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.zaqar.basic"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.scenarios.zaqar.utils"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.types"
|
||||
disable_error_code = ["no-untyped-def", "union-attr"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.task.ui.charts.osprofilerchart"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.verification.tempest.config"
|
||||
disable_error_code = ["assignment", "method-assign", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.verification.tempest.context"
|
||||
disable_error_code = ["assignment", "method-assign", "no-untyped-def"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "rally_openstack.verification.tempest.manager"
|
||||
disable_error_code = ["no-untyped-def"]
|
||||
|
||||
@@ -14,16 +14,17 @@
|
||||
|
||||
from importlib.metadata import version as _version
|
||||
|
||||
from rally.common import version as __rally_version__
|
||||
from rally.common import version as _rally_version
|
||||
|
||||
from rally_openstack import _compat
|
||||
|
||||
|
||||
if hasattr(__rally_version__, "__version_tuple__"):
|
||||
__rally_version__ = __rally_version__.__version_tuple__
|
||||
if hasattr(_rally_version, "__version_tuple__"):
|
||||
__rally_version__ = _rally_version.__version_tuple__
|
||||
else:
|
||||
__rally_version__ = __rally_version__.version_info.semantic_version()
|
||||
__rally_version__ = __rally_version__.version_tuple()
|
||||
__rally_version__ = (
|
||||
_rally_version.version_info.semantic_version().version_tuple()
|
||||
)
|
||||
|
||||
try:
|
||||
# Try to get version from installed package metadata
|
||||
|
||||
@@ -241,11 +241,17 @@ class OSClient(plugin.Plugin):
|
||||
return self.cache[key]
|
||||
|
||||
@classmethod
|
||||
def get(cls, name, **kwargs):
|
||||
# NOTE(boris-42): Remove this after we finish rename refactoring.
|
||||
kwargs.pop("platform", None)
|
||||
kwargs.pop("namespace", None)
|
||||
return super(OSClient, cls).get(name, platform="openstack", **kwargs)
|
||||
def get(
|
||||
cls,
|
||||
name: str,
|
||||
platform: str = "openstack", # type: ignore[override]
|
||||
allow_hidden: bool = False
|
||||
) -> type["OSClient"]:
|
||||
return super(OSClient, cls).get(
|
||||
name,
|
||||
platform=platform,
|
||||
allow_hidden=allow_hidden
|
||||
)
|
||||
|
||||
|
||||
@configure("keystone", supported_versions=("2", "3"))
|
||||
|
||||
@@ -18,7 +18,7 @@ from rally_openstack.common import osclients
|
||||
from rally_openstack.common.services.identity import identity
|
||||
|
||||
|
||||
class UnifiedKeystoneMixin(object):
|
||||
class UnifiedKeystoneMixin:
|
||||
@staticmethod
|
||||
def _unify_service(service):
|
||||
return identity.Service(id=service.id, name=service.name)
|
||||
@@ -90,7 +90,7 @@ class UnifiedKeystoneMixin(object):
|
||||
return self._impl.validate_token(token)
|
||||
|
||||
|
||||
class KeystoneMixin(object):
|
||||
class KeystoneMixin(atomic.ActionTimerMixin):
|
||||
|
||||
def list_users(self):
|
||||
aname = "keystone_v%s.list_users" % self.version
|
||||
|
||||
@@ -18,7 +18,7 @@ from rally.task import atomic
|
||||
from rally_openstack.common.services.image import image as image_service
|
||||
|
||||
|
||||
class GlanceMixin(object):
|
||||
class GlanceMixin(atomic.ActionTimerMixin):
|
||||
|
||||
def _get_client(self):
|
||||
return self._clients.glance(self.version)
|
||||
|
||||
@@ -25,7 +25,7 @@ from rally_openstack.common.services.storage import block
|
||||
CONF = block.CONF
|
||||
|
||||
|
||||
class CinderMixin(object):
|
||||
class CinderMixin(atomic.ActionTimerMixin):
|
||||
|
||||
def _get_client(self):
|
||||
return self._clients.cinder(self.version)
|
||||
|
||||
@@ -321,7 +321,7 @@ class OpenStack(platform.Platform):
|
||||
|
||||
"""
|
||||
|
||||
from oslo_utils import strutils
|
||||
from oslo_utils import strutils # type: ignore[import-untyped]
|
||||
|
||||
required_env_vars = ["OS_AUTH_URL", "OS_USERNAME", "OS_PASSWORD"]
|
||||
missing_env_vars = [v for v in required_env_vars if
|
||||
|
||||
@@ -13,10 +13,16 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from rally.common import cfg
|
||||
from rally.task import utils
|
||||
|
||||
import typing as t
|
||||
|
||||
if t.TYPE_CHECKING: # pragma: no cover
|
||||
R = t.TypeVar("R", bound="ResourceManager")
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
cleanup_group = cfg.OptGroup(name="cleanup", title="Cleanup Options")
|
||||
@@ -38,10 +44,18 @@ class NoName(object):
|
||||
return "<NoName %s resource>" % self.resource_type
|
||||
|
||||
|
||||
def resource(service, resource, order=0, admin_required=False,
|
||||
perform_for_admin_only=False, tenant_resource=False,
|
||||
max_attempts=3, timeout=CONF.openstack.resource_deletion_timeout,
|
||||
interval=1, threads=CONF.openstack.cleanup_threads):
|
||||
def resource(
|
||||
service: str,
|
||||
resource: str,
|
||||
order: int = 0,
|
||||
admin_required: bool = False,
|
||||
perform_for_admin_only: bool = False,
|
||||
tenant_resource: bool = False,
|
||||
max_attempts: int = 3,
|
||||
timeout: float = CONF.openstack.resource_deletion_timeout,
|
||||
interval: int = 1,
|
||||
threads: int = CONF.openstack.cleanup_threads
|
||||
) -> t.Callable[[type[R]], type[R]]:
|
||||
"""Decorator that overrides resource specification.
|
||||
|
||||
Just put it on top of your resource class and specify arguments that you
|
||||
@@ -63,7 +77,7 @@ def resource(service, resource, order=0, admin_required=False,
|
||||
simultaneously
|
||||
"""
|
||||
|
||||
def inner(cls):
|
||||
def inner(cls: type[R]) -> type[R]:
|
||||
# TODO(boris-42): This can be written better I believe =)
|
||||
cls._service = service
|
||||
cls._resource = resource
|
||||
@@ -81,7 +95,7 @@ def resource(service, resource, order=0, admin_required=False,
|
||||
return inner
|
||||
|
||||
|
||||
@resource(service=None, resource=None)
|
||||
@resource(service="", resource="")
|
||||
class ResourceManager(object):
|
||||
"""Base class for cleanup plugins for specific resources.
|
||||
|
||||
@@ -92,6 +106,17 @@ class ResourceManager(object):
|
||||
list() and is_deleted() methods to make them fit to your case.
|
||||
"""
|
||||
|
||||
_service: str
|
||||
_resource: str
|
||||
_order: int
|
||||
_admin_required: bool
|
||||
_perform_for_admin_only: bool
|
||||
_tenant_resource: bool
|
||||
_max_attempts: int
|
||||
_timeout: float
|
||||
_interval: int
|
||||
_threads: int
|
||||
|
||||
def __init__(self, resource=None, admin=None, user=None, tenant_uuid=None):
|
||||
self.admin = admin
|
||||
self.user = user
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# under the License.
|
||||
|
||||
import time
|
||||
import typing as t
|
||||
|
||||
from rally.common import broker
|
||||
from rally.common import logging
|
||||
@@ -189,7 +190,9 @@ def list_resource_names(admin_required=None):
|
||||
True -> returns only admin ResourceManagers
|
||||
False -> returns only non admin ResourceManagers
|
||||
"""
|
||||
res_mgrs = discover.itersubclasses(base.ResourceManager)
|
||||
res_mgrs: t.Iterable[type[base.ResourceManager]] = discover.itersubclasses(
|
||||
base.ResourceManager
|
||||
)
|
||||
if admin_required is not None:
|
||||
res_mgrs = filter(lambda cls: cls._admin_required == admin_required,
|
||||
res_mgrs)
|
||||
|
||||
@@ -60,7 +60,6 @@ class QuotaMixin(SynchronizedDeletion, base.ResourceManager):
|
||||
_magnum_order = get_order(80)
|
||||
|
||||
|
||||
@base.resource(service=None, resource=None)
|
||||
class MagnumMixin(base.ResourceManager):
|
||||
|
||||
def id(self):
|
||||
@@ -171,7 +170,6 @@ class NovaAggregate(SynchronizedDeletion, base.ResourceManager):
|
||||
_neutron_order = get_order(300)
|
||||
|
||||
|
||||
@base.resource(service=None, resource=None, admin_required=True)
|
||||
class NeutronMixin(SynchronizedDeletion, base.ResourceManager):
|
||||
|
||||
@property
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import random
|
||||
|
||||
from rally.common import validation
|
||||
@@ -227,6 +229,8 @@ class OpenStackAPIVersions(context.OpenStackContext):
|
||||
"additionalProperties": False
|
||||
}
|
||||
|
||||
config: dict[str, dict[str, str | int]]
|
||||
|
||||
def setup(self):
|
||||
# FIXME(andreykurilin): move all checks to validate method.
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from rally.common import cfg
|
||||
from rally.common import logging
|
||||
from rally.common import utils as rutils
|
||||
@@ -115,15 +117,19 @@ class ImageGenerator(context.OpenStackContext):
|
||||
|
||||
DEFAULT_CONFIG = {"images_per_tenant": 1}
|
||||
|
||||
config: dict
|
||||
|
||||
def setup(self):
|
||||
image_url = self.config.get("image_url")
|
||||
disk_format = self.config.get("disk_format")
|
||||
container_format = self.config.get("container_format")
|
||||
images_per_tenant = self.config.get("images_per_tenant")
|
||||
images_per_tenant: int = self.config["images_per_tenant"]
|
||||
visibility = self.config.get("visibility", "private")
|
||||
min_disk = self.config.get("min_disk", 0)
|
||||
min_ram = self.config.get("min_ram", 0)
|
||||
image_args = self.config.get("image_args", {})
|
||||
image_args: dict[str, str | int | bool] = self.config.get(
|
||||
"image_args", {}
|
||||
)
|
||||
|
||||
if "image_type" in self.config:
|
||||
LOG.warning("The 'image_type' argument is deprecated since "
|
||||
|
||||
@@ -13,13 +13,17 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import collections
|
||||
import copy
|
||||
import typing as t
|
||||
import uuid
|
||||
|
||||
from rally.common import broker
|
||||
from rally.common import cfg
|
||||
from rally.common import logging
|
||||
from rally.common import utils
|
||||
from rally.common import validation
|
||||
from rally import exceptions
|
||||
|
||||
@@ -131,7 +135,7 @@ class UserGenerator(context.OpenStackContext):
|
||||
or cfg.CONF.openstack.user_domain)
|
||||
self.DEFAULT_FOR_NEW_USERS["project_domain"] = project_domain
|
||||
self.DEFAULT_FOR_NEW_USERS["user_domain"] = user_domain
|
||||
with self.config.unlocked():
|
||||
with t.cast(utils.LockedDict, self.config).unlocked():
|
||||
for key, value in self.DEFAULT_FOR_NEW_USERS.items():
|
||||
self.config.setdefault(key, value)
|
||||
|
||||
@@ -156,8 +160,8 @@ class UserGenerator(context.OpenStackContext):
|
||||
# NOTE(msdubov): consume() will fill the tenants list in the closure.
|
||||
broker.run(publish, consume, threads)
|
||||
tenants_dict = {}
|
||||
for t in tenants:
|
||||
tenants_dict[t["id"]] = t
|
||||
for tenant in tenants:
|
||||
tenants_dict[tenant["id"]] = tenant
|
||||
|
||||
return tenants_dict
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from rally.common import logging
|
||||
from rally.common import validation
|
||||
|
||||
@@ -57,7 +59,7 @@ def _rule_to_key(rule):
|
||||
for x in comparison_keys])
|
||||
|
||||
|
||||
_RULES_TO_ADD = [
|
||||
_RULES_TO_ADD: list[dict[str, str | int]] = [
|
||||
{
|
||||
"ethertype": "IPv4",
|
||||
"protocol": "tcp",
|
||||
|
||||
@@ -98,6 +98,8 @@ class Network(context.OpenStackContext):
|
||||
"dualstack": False
|
||||
}
|
||||
|
||||
config: dict
|
||||
|
||||
def setup(self):
|
||||
# NOTE(rkiran): Some clients are not thread-safe. Thus during
|
||||
# multithreading/multiprocessing, it is likely the
|
||||
|
||||
@@ -51,6 +51,8 @@ class Lbaas(context.OpenStackContext):
|
||||
"lbaas_version": 1
|
||||
}
|
||||
|
||||
config: dict
|
||||
|
||||
def setup(self):
|
||||
net_wrapper = network_wrapper.wrap(
|
||||
osclients.Clients(self.context["admin"]["credential"]),
|
||||
|
||||
@@ -47,6 +47,8 @@ class Quotas(context.OpenStackContext):
|
||||
}
|
||||
}
|
||||
|
||||
config: dict[str, dict[str, int]]
|
||||
|
||||
def __init__(self, ctx):
|
||||
super(Quotas, self).__init__(ctx)
|
||||
self.clients = osclients.Clients(
|
||||
|
||||
@@ -62,7 +62,7 @@ class FaultInjectionHook(hook.HookAction):
|
||||
return extra_config.get("cloud_config")
|
||||
|
||||
def run(self):
|
||||
import os_faults
|
||||
import os_faults # type: ignore[import-untyped]
|
||||
|
||||
# get cloud configuration
|
||||
cloud_config = self.get_cloud_config()
|
||||
|
||||
@@ -521,21 +521,6 @@ def check_raises(logical_line, filename, noqa=False):
|
||||
"in docstrings.")
|
||||
|
||||
|
||||
@core.flake8ext
|
||||
def check_old_type_class(logical_line, noqa=False):
|
||||
"""Use new-style Python classes
|
||||
|
||||
N355
|
||||
"""
|
||||
if noqa:
|
||||
return
|
||||
|
||||
if re_old_type_class.search(logical_line):
|
||||
yield (0, "N355 This class does not inherit from anything and thus "
|
||||
"will be an old-style class by default. Try to inherit from "
|
||||
"``object`` or another new-style class.")
|
||||
|
||||
|
||||
@core.flake8ext
|
||||
def check_datetime_alias(logical_line, noqa=False):
|
||||
"""Ensure using ``dt`` as alias for ``datetime``
|
||||
|
||||
@@ -352,15 +352,6 @@ class HackingTestCase(test.TestCase):
|
||||
checkres = checks.check_objects_imports_in_cli(line, "./filename")
|
||||
self.assertRaises(StopIteration, next, checkres)
|
||||
|
||||
@ddt.data(
|
||||
"class Oldstype():",
|
||||
"class Oldstyle:"
|
||||
)
|
||||
def test_check_old_type_class(self, line):
|
||||
checkres = checks.check_old_type_class(line)
|
||||
self.assertIsNotNone(next(checkres))
|
||||
self.assertEqual([], list(checkres))
|
||||
|
||||
def test_check_datetime_alias(self):
|
||||
lines = ["import datetime as date",
|
||||
"import datetime",
|
||||
|
||||
1
tox.ini
1
tox.ini
@@ -116,7 +116,6 @@ extension =
|
||||
N351 = checks:check_no_constructor_data_struct
|
||||
N352 = checks:check_dict_formatting_in_string
|
||||
N354 = checks:check_raises
|
||||
N355 = checks:check_old_type_class
|
||||
N356 = checks:check_datetime_alias
|
||||
N360 = checks:check_db_imports_in_cli
|
||||
N361 = checks:check_objects_imports_in_cli
|
||||
|
||||
7
types-requirements.txt
Normal file
7
types-requirements.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
mypy
|
||||
# Type stubs for external packages
|
||||
types-jsonschema
|
||||
types-netaddr
|
||||
types-PyYAML
|
||||
types-requests
|
||||
types-setuptools
|
||||
Reference in New Issue
Block a user