From 9fd207ff901a1e27c96fc388d5b332c92b1ab7fc Mon Sep 17 00:00:00 2001 From: Sean Mooney Date: Fri, 9 May 2025 00:33:50 +0100 Subject: [PATCH] reorder and extend pre-commit hooks This change mainly just reorders the hooks to be easier ot read and hopefully slightly more efficent to run locally. a number of extra useful hooks are added such as the detect-private-key hook and the check-shebang-scripts-are-executable Thise were already available before but disabled. finally the check-docstring-first is added and the relevent module docs strings moved if required. Change-Id: I19a9e2adc9a029f4fbb819af1f128b874a5907e9 --- .pre-commit-config.yaml | 39 +- nova/accelerator/cyborg.py | 22 +- .../unit/api/openstack/test_requestlog.py | 14 +- nova/tests/unit/ssl_cert/new_cert.sh | 0 nova/tests/unit/test_policy.py | 400 +++++++++--------- 5 files changed, 248 insertions(+), 227 deletions(-) mode change 100644 => 100755 nova/tests/unit/ssl_cert/new_cert.sh diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 390c2231b842..3344f966d87a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,41 +3,61 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: + # whitespace - id: trailing-whitespace - id: mixed-line-ending args: ['--fix', 'lf'] exclude: '.*\.(svg)$' + # file format and permissions - id: fix-byte-order-marker - id: check-executables-have-shebangs - - id: check-merge-conflict - - id: debug-statements - # nova/cmd/manage.py imports pdb on purpose. - exclude: 'nova/cmd/manage.py' + - id: check-shebang-scripts-are-executable - id: check-json files: .*\.json$ - id: check-yaml files: .*\.(yaml|yml)$ + # git + - id: check-added-large-files + - id: check-merge-conflict + - id: check-case-conflict + - id: detect-private-key + exclude: '^doc/api_samples/.*|^nova/tests/.*' + # python + - id: debug-statements + # nova/cmd/manage.py imports pdb on purpose. + exclude: 'nova/cmd/manage.py' + - id: check-docstring-first + exclude: 'nova/virt/ironic/ironic_states.py' + - repo: https://github.com/Lucas-C/pre-commit-hooks rev: v1.5.5 hooks: - id: remove-tabs exclude: '.*\.(svg)$' + + - repo: https://github.com/hhatto/autopep8 + rev: v2.3.2 + hooks: + - id: autopep8 + files: '^.*\.py$' + + # run hacking after autopep8 so that if it can fix + # it it will. note it will still fail in ci because + # fixing an issue changes the code and that should + # not happen in ci. - repo: https://opendev.org/openstack/hacking rev: 7.0.0 hooks: - id: hacking additional_dependencies: [] exclude: '^(doc|releasenotes|tools)/.*$' - - repo: https://github.com/hhatto/autopep8 - rev: v2.3.2 - hooks: - - id: autopep8 - files: '^.*\.py$' + - repo: https://github.com/codespell-project/codespell rev: v2.4.1 hooks: - id: codespell args: ['--ignore-words=doc/dictionary.txt'] + - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.15.0 hooks: @@ -72,6 +92,7 @@ repos: | nova/virt/libvirt/host.py | nova/virt/libvirt/utils.py ) + - repo: https://github.com/sphinx-contrib/sphinx-lint rev: v1.0.0 hooks: diff --git a/nova/accelerator/cyborg.py b/nova/accelerator/cyborg.py index ede2da7c6547..7af11bc283fb 100644 --- a/nova/accelerator/cyborg.py +++ b/nova/accelerator/cyborg.py @@ -12,17 +12,6 @@ # License for the specific language governing permissions and limitations # under the License. -from oslo_log import log as logging - -from keystoneauth1 import exceptions as ks_exc - -from nova import exception -from nova.i18n import _ -from nova import objects -from nova.scheduler import utils as schedutils -from nova import service_auth -from nova import utils - """ Note on object relationships: 1 device profile (DP) has D >= 1 request groups (just as a flavor @@ -52,6 +41,17 @@ from nova import utils See cyborg/cyborg/objects/device_profile.py for more details. """ +from oslo_log import log as logging + +from keystoneauth1 import exceptions as ks_exc + +from nova import exception +from nova.i18n import _ +from nova import objects +from nova.scheduler import utils as schedutils +from nova import service_auth +from nova import utils + LOG = logging.getLogger(__name__) diff --git a/nova/tests/unit/api/openstack/test_requestlog.py b/nova/tests/unit/api/openstack/test_requestlog.py index b2b82f78fc0d..887b4eec9707 100644 --- a/nova/tests/unit/api/openstack/test_requestlog.py +++ b/nova/tests/unit/api/openstack/test_requestlog.py @@ -13,13 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -from unittest import mock - -import fixtures as fx -import testtools - -from nova.tests import fixtures - """Test request logging middleware under various conditions. The request logging middleware is needed when running under something @@ -33,6 +26,13 @@ All these tests use GET / to hit an endpoint that doesn't require the database setup. We have to do a bit of mocking to make that work. """ +from unittest import mock + +import fixtures as fx +import testtools + +from nova.tests import fixtures + class TestRequestLogMiddleware(testtools.TestCase): diff --git a/nova/tests/unit/ssl_cert/new_cert.sh b/nova/tests/unit/ssl_cert/new_cert.sh old mode 100644 new mode 100755 diff --git a/nova/tests/unit/test_policy.py b/nova/tests/unit/test_policy.py index 56562b720f8f..6511a9f5ba00 100644 --- a/nova/tests/unit/test_policy.py +++ b/nova/tests/unit/test_policy.py @@ -311,210 +311,210 @@ class RealRolePolicyTestCase(test.NoDBTestCase): self.fake_policy = jsonutils.loads(fake_policy.policy_data) self.admin_only_rules = ( -"compute:aggregates:images", -"compute:server:topology:host:index", -"network:attach_external_network", -"os_compute_api:servers:create:forced_host", -"compute:servers:create:requested_destination", -"os_compute_api:servers:detail:get_all_tenants", -"os_compute_api:servers:index:get_all_tenants", -"os_compute_api:servers:allow_all_filters", -"os_compute_api:servers:show:host_status", -"os_compute_api:servers:show:host_status:unknown-only", -"os_compute_api:servers:migrations:force_complete", -"os_compute_api:servers:migrations:delete", -"os_compute_api:os-admin-actions:inject_network_info", -"os_compute_api:os-admin-actions:reset_state", -"os_compute_api:os-aggregates:index", -"os_compute_api:os-aggregates:create", -"os_compute_api:os-aggregates:show", -"os_compute_api:os-aggregates:update", -"os_compute_api:os-aggregates:delete", -"os_compute_api:os-aggregates:add_host", -"os_compute_api:os-aggregates:remove_host", -"os_compute_api:os-aggregates:set_metadata", -"os_compute_api:os-evacuate", -"os_compute_api:os-extended-server-attributes", -"os_compute_api:os-flavor-access:remove_tenant_access", -"os_compute_api:os-flavor-access:add_tenant_access", -"os_compute_api:os-flavor-extra-specs:create", -"os_compute_api:os-flavor-extra-specs:update", -"os_compute_api:os-flavor-extra-specs:delete", -"os_compute_api:os-flavor-manage:create", -"os_compute_api:os-flavor-manage:update", -"os_compute_api:os-flavor-manage:delete", -"os_compute_api:os-hosts:update", -"os_compute_api:os-hosts:reboot", -"os_compute_api:os-hosts:shutdown", -"os_compute_api:os-hosts:start", -"os_compute_api:os-instance-actions:events", -"os_compute_api:os-lock-server:unlock:unlock_override", -"os_compute_api:os-migrate-server:migrate", -"os_compute_api:os-migrate-server:migrate:host", -"os_compute_api:os-migrate-server:migrate_live", -"os_compute_api:os-quota-sets:update", -"os_compute_api:os-quota-sets:delete", -"os_compute_api:os-server-diagnostics", -"os_compute_api:os-server-groups:index:all_projects", -"os_compute_api:os-services:update", -"os_compute_api:os-services:delete", -"os_compute_api:os-shelve:shelve_offload", -"os_compute_api:os-shelve:unshelve_to_host", -"os_compute_api:os-availability-zone:detail", -"os_compute_api:os-assisted-volume-snapshots:create", -"os_compute_api:os-assisted-volume-snapshots:delete", -"os_compute_api:os-console-auth-tokens", -"os_compute_api:os-quota-class-sets:update", -"os_compute_api:os-server-external-events:create", -"os_compute_api:os-volumes-attachments:swap", -"os_compute_api:servers:create:zero_disk_flavor", -"os_compute_api:os-baremetal-nodes:list", -"os_compute_api:os-baremetal-nodes:show", -"os_compute_api:servers:migrations:index", -"os_compute_api:servers:migrations:show", -"os_compute_api:os-simple-tenant-usage:list", -"os_compute_api:os-migrations:index", -"os_compute_api:os-services:list", -"os_compute_api:os-instance-actions:events:details", -"os_compute_api:os-instance-usage-audit-log:list", -"os_compute_api:os-instance-usage-audit-log:show", -"os_compute_api:os-hosts:list", -"os_compute_api:os-hosts:show", -"os_compute_api:os-hypervisors:list", -"os_compute_api:os-hypervisors:list-detail", -"os_compute_api:os-hypervisors:show", -"os_compute_api:os-hypervisors:statistics", -"os_compute_api:os-hypervisors:uptime", -"os_compute_api:os-hypervisors:search", -"os_compute_api:os-hypervisors:servers", -"os_compute_api:limits:other_project", -"os_compute_api:os-flavor-access", -) + "compute:aggregates:images", + "compute:server:topology:host:index", + "network:attach_external_network", + "os_compute_api:servers:create:forced_host", + "compute:servers:create:requested_destination", + "os_compute_api:servers:detail:get_all_tenants", + "os_compute_api:servers:index:get_all_tenants", + "os_compute_api:servers:allow_all_filters", + "os_compute_api:servers:show:host_status", + "os_compute_api:servers:show:host_status:unknown-only", + "os_compute_api:servers:migrations:force_complete", + "os_compute_api:servers:migrations:delete", + "os_compute_api:os-admin-actions:inject_network_info", + "os_compute_api:os-admin-actions:reset_state", + "os_compute_api:os-aggregates:index", + "os_compute_api:os-aggregates:create", + "os_compute_api:os-aggregates:show", + "os_compute_api:os-aggregates:update", + "os_compute_api:os-aggregates:delete", + "os_compute_api:os-aggregates:add_host", + "os_compute_api:os-aggregates:remove_host", + "os_compute_api:os-aggregates:set_metadata", + "os_compute_api:os-evacuate", + "os_compute_api:os-extended-server-attributes", + "os_compute_api:os-flavor-access:remove_tenant_access", + "os_compute_api:os-flavor-access:add_tenant_access", + "os_compute_api:os-flavor-extra-specs:create", + "os_compute_api:os-flavor-extra-specs:update", + "os_compute_api:os-flavor-extra-specs:delete", + "os_compute_api:os-flavor-manage:create", + "os_compute_api:os-flavor-manage:update", + "os_compute_api:os-flavor-manage:delete", + "os_compute_api:os-hosts:update", + "os_compute_api:os-hosts:reboot", + "os_compute_api:os-hosts:shutdown", + "os_compute_api:os-hosts:start", + "os_compute_api:os-instance-actions:events", + "os_compute_api:os-lock-server:unlock:unlock_override", + "os_compute_api:os-migrate-server:migrate", + "os_compute_api:os-migrate-server:migrate:host", + "os_compute_api:os-migrate-server:migrate_live", + "os_compute_api:os-quota-sets:update", + "os_compute_api:os-quota-sets:delete", + "os_compute_api:os-server-diagnostics", + "os_compute_api:os-server-groups:index:all_projects", + "os_compute_api:os-services:update", + "os_compute_api:os-services:delete", + "os_compute_api:os-shelve:shelve_offload", + "os_compute_api:os-shelve:unshelve_to_host", + "os_compute_api:os-availability-zone:detail", + "os_compute_api:os-assisted-volume-snapshots:create", + "os_compute_api:os-assisted-volume-snapshots:delete", + "os_compute_api:os-console-auth-tokens", + "os_compute_api:os-quota-class-sets:update", + "os_compute_api:os-server-external-events:create", + "os_compute_api:os-volumes-attachments:swap", + "os_compute_api:servers:create:zero_disk_flavor", + "os_compute_api:os-baremetal-nodes:list", + "os_compute_api:os-baremetal-nodes:show", + "os_compute_api:servers:migrations:index", + "os_compute_api:servers:migrations:show", + "os_compute_api:os-simple-tenant-usage:list", + "os_compute_api:os-migrations:index", + "os_compute_api:os-services:list", + "os_compute_api:os-instance-actions:events:details", + "os_compute_api:os-instance-usage-audit-log:list", + "os_compute_api:os-instance-usage-audit-log:show", + "os_compute_api:os-hosts:list", + "os_compute_api:os-hosts:show", + "os_compute_api:os-hypervisors:list", + "os_compute_api:os-hypervisors:list-detail", + "os_compute_api:os-hypervisors:show", + "os_compute_api:os-hypervisors:statistics", + "os_compute_api:os-hypervisors:uptime", + "os_compute_api:os-hypervisors:search", + "os_compute_api:os-hypervisors:servers", + "os_compute_api:limits:other_project", + "os_compute_api:os-flavor-access", + ) self.admin_or_owner_rules = ( -"compute:server:topology:index", -"os_compute_api:servers:start", -"os_compute_api:servers:stop", -"os_compute_api:servers:trigger_crash_dump", -"os_compute_api:os-create-backup", -"os_compute_api:ips:index", -"os_compute_api:ips:show", -"os_compute_api:os-keypairs:create", -"os_compute_api:os-keypairs:delete", -"os_compute_api:os-keypairs:index", -"os_compute_api:os-keypairs:show", -"os_compute_api:os-lock-server:lock", -"os_compute_api:os-lock-server:unlock", -"os_compute_api:os-pause-server:pause", -"os_compute_api:os-pause-server:unpause", -"os_compute_api:os-quota-sets:show", -"os_compute_api:os-quota-sets:detail", -"os_compute_api:server-metadata:index", -"os_compute_api:server-metadata:show", -"os_compute_api:server-metadata:delete", -"os_compute_api:server-metadata:create", -"os_compute_api:server-metadata:update", -"os_compute_api:server-metadata:update_all", -"os_compute_api:os-suspend-server:suspend", -"os_compute_api:os-suspend-server:resume", -"os_compute_api:servers:confirm_resize", -"os_compute_api:servers:create", -"os_compute_api:servers:create:attach_network", -"os_compute_api:servers:create:attach_volume", -"os_compute_api:servers:create:trusted_certs", -"os_compute_api:servers:create_image", -"os_compute_api:servers:delete", -"os_compute_api:servers:detail", -"os_compute_api:servers:index", -"os_compute_api:servers:reboot", -"os_compute_api:servers:rebuild", -"os_compute_api:servers:rebuild:trusted_certs", -"os_compute_api:servers:resize", -"os_compute_api:servers:revert_resize", -"os_compute_api:servers:show", -"os_compute_api:servers:show:flavor-extra-specs", -"os_compute_api:servers:update", -"os_compute_api:servers:create_image:allow_volume_backed", -"os_compute_api:os-admin-password", -"os_compute_api:os-attach-interfaces:create", -"os_compute_api:os-attach-interfaces:delete", -"os_compute_api:os-console-output", -"os_compute_api:os-remote-consoles", -"os_compute_api:os-deferred-delete:restore", -"os_compute_api:os-deferred-delete:force", -"os_compute_api:os-flavor-extra-specs:index", -"os_compute_api:os-flavor-extra-specs:show", -"os_compute_api:os-floating-ips:add", -"os_compute_api:os-floating-ips:remove", -"os_compute_api:os-floating-ips:create", -"os_compute_api:os-floating-ips:delete", -"os_compute_api:os-multinic:add", -"os_compute_api:os-multinic:remove", -"os_compute_api:os-rescue", -"os_compute_api:os-unrescue", -"os_compute_api:os-security-groups:create", -"os_compute_api:os-security-groups:update", -"os_compute_api:os-security-groups:delete", -"os_compute_api:os-security-groups:rule:create", -"os_compute_api:os-security-groups:rule:delete", -"os_compute_api:os-security-groups:add", -"os_compute_api:os-security-groups:remove", -"os_compute_api:os-server-password:clear", -"os_compute_api:os-server-tags:delete", -"os_compute_api:os-server-tags:delete_all", -"os_compute_api:os-server-tags:update", -"os_compute_api:os-server-tags:update_all", -"os_compute_api:os-server-groups:index", -"os_compute_api:os-server-groups:show", -"os_compute_api:os-server-groups:create", -"os_compute_api:os-server-groups:delete", -"os_compute_api:os-shelve:shelve", -"os_compute_api:os-shelve:unshelve", -"os_compute_api:os-volumes:create", -"os_compute_api:os-volumes:delete", -"os_compute_api:os-volumes:snapshots:create", -"os_compute_api:os-volumes:snapshots:delete", -"os_compute_api:os-volumes-attachments:create", -"os_compute_api:os-volumes-attachments:delete", -"os_compute_api:os-volumes-attachments:update", -"os_compute_api:os-simple-tenant-usage:show", -"os_compute_api:os-security-groups:get", -"os_compute_api:os-security-groups:show", -"os_compute_api:os-security-groups:list", -"os_compute_api:os-volumes-attachments:index", -"os_compute_api:os-volumes-attachments:show", -"os_compute_api:os-attach-interfaces:list", -"os_compute_api:os-attach-interfaces:show", -"os_compute_api:os-instance-actions:list", -"os_compute_api:os-instance-actions:show", -"os_compute_api:os-server-password:show", -"os_compute_api:os-server-shares:index", -"os_compute_api:os-server-shares:create", -"os_compute_api:os-server-shares:show", -"os_compute_api:os-server-shares:delete", -"os_compute_api:os-server-tags:index", -"os_compute_api:os-server-tags:show", -"os_compute_api:os-floating-ips:list", -"os_compute_api:os-floating-ips:show", -"os_compute_api:os-volumes:list", -"os_compute_api:os-volumes:detail", -"os_compute_api:os-volumes:show", -"os_compute_api:os-volumes:snapshots:show", -"os_compute_api:os-volumes:snapshots:list", -"os_compute_api:os-volumes:snapshots:detail", -"os_compute_api:os-networks:list", -"os_compute_api:os-networks:show", -"os_compute_api:os-tenant-networks:list", -"os_compute_api:os-tenant-networks:show", -) + "compute:server:topology:index", + "os_compute_api:servers:start", + "os_compute_api:servers:stop", + "os_compute_api:servers:trigger_crash_dump", + "os_compute_api:os-create-backup", + "os_compute_api:ips:index", + "os_compute_api:ips:show", + "os_compute_api:os-keypairs:create", + "os_compute_api:os-keypairs:delete", + "os_compute_api:os-keypairs:index", + "os_compute_api:os-keypairs:show", + "os_compute_api:os-lock-server:lock", + "os_compute_api:os-lock-server:unlock", + "os_compute_api:os-pause-server:pause", + "os_compute_api:os-pause-server:unpause", + "os_compute_api:os-quota-sets:show", + "os_compute_api:os-quota-sets:detail", + "os_compute_api:server-metadata:index", + "os_compute_api:server-metadata:show", + "os_compute_api:server-metadata:delete", + "os_compute_api:server-metadata:create", + "os_compute_api:server-metadata:update", + "os_compute_api:server-metadata:update_all", + "os_compute_api:os-suspend-server:suspend", + "os_compute_api:os-suspend-server:resume", + "os_compute_api:servers:confirm_resize", + "os_compute_api:servers:create", + "os_compute_api:servers:create:attach_network", + "os_compute_api:servers:create:attach_volume", + "os_compute_api:servers:create:trusted_certs", + "os_compute_api:servers:create_image", + "os_compute_api:servers:delete", + "os_compute_api:servers:detail", + "os_compute_api:servers:index", + "os_compute_api:servers:reboot", + "os_compute_api:servers:rebuild", + "os_compute_api:servers:rebuild:trusted_certs", + "os_compute_api:servers:resize", + "os_compute_api:servers:revert_resize", + "os_compute_api:servers:show", + "os_compute_api:servers:show:flavor-extra-specs", + "os_compute_api:servers:update", + "os_compute_api:servers:create_image:allow_volume_backed", + "os_compute_api:os-admin-password", + "os_compute_api:os-attach-interfaces:create", + "os_compute_api:os-attach-interfaces:delete", + "os_compute_api:os-console-output", + "os_compute_api:os-remote-consoles", + "os_compute_api:os-deferred-delete:restore", + "os_compute_api:os-deferred-delete:force", + "os_compute_api:os-flavor-extra-specs:index", + "os_compute_api:os-flavor-extra-specs:show", + "os_compute_api:os-floating-ips:add", + "os_compute_api:os-floating-ips:remove", + "os_compute_api:os-floating-ips:create", + "os_compute_api:os-floating-ips:delete", + "os_compute_api:os-multinic:add", + "os_compute_api:os-multinic:remove", + "os_compute_api:os-rescue", + "os_compute_api:os-unrescue", + "os_compute_api:os-security-groups:create", + "os_compute_api:os-security-groups:update", + "os_compute_api:os-security-groups:delete", + "os_compute_api:os-security-groups:rule:create", + "os_compute_api:os-security-groups:rule:delete", + "os_compute_api:os-security-groups:add", + "os_compute_api:os-security-groups:remove", + "os_compute_api:os-server-password:clear", + "os_compute_api:os-server-tags:delete", + "os_compute_api:os-server-tags:delete_all", + "os_compute_api:os-server-tags:update", + "os_compute_api:os-server-tags:update_all", + "os_compute_api:os-server-groups:index", + "os_compute_api:os-server-groups:show", + "os_compute_api:os-server-groups:create", + "os_compute_api:os-server-groups:delete", + "os_compute_api:os-shelve:shelve", + "os_compute_api:os-shelve:unshelve", + "os_compute_api:os-volumes:create", + "os_compute_api:os-volumes:delete", + "os_compute_api:os-volumes:snapshots:create", + "os_compute_api:os-volumes:snapshots:delete", + "os_compute_api:os-volumes-attachments:create", + "os_compute_api:os-volumes-attachments:delete", + "os_compute_api:os-volumes-attachments:update", + "os_compute_api:os-simple-tenant-usage:show", + "os_compute_api:os-security-groups:get", + "os_compute_api:os-security-groups:show", + "os_compute_api:os-security-groups:list", + "os_compute_api:os-volumes-attachments:index", + "os_compute_api:os-volumes-attachments:show", + "os_compute_api:os-attach-interfaces:list", + "os_compute_api:os-attach-interfaces:show", + "os_compute_api:os-instance-actions:list", + "os_compute_api:os-instance-actions:show", + "os_compute_api:os-server-password:show", + "os_compute_api:os-server-shares:index", + "os_compute_api:os-server-shares:create", + "os_compute_api:os-server-shares:show", + "os_compute_api:os-server-shares:delete", + "os_compute_api:os-server-tags:index", + "os_compute_api:os-server-tags:show", + "os_compute_api:os-floating-ips:list", + "os_compute_api:os-floating-ips:show", + "os_compute_api:os-volumes:list", + "os_compute_api:os-volumes:detail", + "os_compute_api:os-volumes:show", + "os_compute_api:os-volumes:snapshots:show", + "os_compute_api:os-volumes:snapshots:list", + "os_compute_api:os-volumes:snapshots:detail", + "os_compute_api:os-networks:list", + "os_compute_api:os-networks:show", + "os_compute_api:os-tenant-networks:list", + "os_compute_api:os-tenant-networks:show", + ) self.allow_all_rules = ( -"os_compute_api:os-quota-sets:defaults", -"os_compute_api:os-availability-zone:list", -"os_compute_api:limits", -"os_compute_api:extensions", -"os_compute_api:os-floating-ip-pools", -) + "os_compute_api:os-quota-sets:defaults", + "os_compute_api:os-availability-zone:list", + "os_compute_api:limits", + "os_compute_api:extensions", + "os_compute_api:os-floating-ip-pools", + ) self.allow_nobody_rules = ( servers_policy.CROSS_CELL_RESIZE,