Add flake8-import-order extension

This adds the import order extension to match what we have in the cinder
repo. This is a linting extension that will check that imports are in
the correct order and the correct grouping so they automatically get
flagged, and it won't be whether reviewers notice and decide to do
anything or not.

Cinder change was Ic13ba238a4a45c6219f4de131cfe0366219d722f for a little
more wordy reasoning.

Also includes updates for noqa tags. Newer version of the linters appear
to want these on the function definition line, not on the decorator
line.

Change-Id: Ibf3f3afbf3bb6ec6613b35f91d4a353c6a391f41
Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
This commit is contained in:
Sean McGinnis 2020-06-02 16:58:53 -05:00 committed by Eric Harney
parent 7a0d07c16d
commit 82f0ceb724
22 changed files with 44 additions and 52 deletions

View File

@ -16,9 +16,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
""" """Base utilities to build API operation managers and objects on top of."""
Base utilities to build API operation managers and objects on top of.
"""
# E1102: %s is not callable # E1102: %s is not callable
# pylint: disable=E1102 # pylint: disable=E1102
@ -26,13 +24,13 @@ Base utilities to build API operation managers and objects on top of.
import abc import abc
import copy import copy
from oslo_utils import encodeutils
from oslo_utils import strutils
from requests import Response from requests import Response
from cinderclient.apiclient import exceptions from cinderclient.apiclient import exceptions
from cinderclient import utils from cinderclient import utils
from oslo_utils import encodeutils
from oslo_utils import strutils
def getid(obj): def getid(obj):

View File

@ -22,6 +22,7 @@ import collections
import getpass import getpass
import logging import logging
import sys import sys
from urllib import parse as urlparse
from keystoneauth1 import discover from keystoneauth1 import discover
from keystoneauth1 import exceptions from keystoneauth1 import exceptions
@ -31,7 +32,6 @@ from keystoneauth1 import loading
from keystoneauth1 import session from keystoneauth1 import session
from oslo_utils import importutils from oslo_utils import importutils
import requests import requests
from urllib import parse as urlparse
import cinderclient import cinderclient
from cinderclient._i18n import _ from cinderclient._i18n import _

View File

@ -26,8 +26,8 @@ def do_fake_action():
return "fake_action 3.0 to 3.1" return "fake_action 3.0 to 3.1"
@api_versions.wraps("3.2", "3.3") # noqa: F811 @api_versions.wraps("3.2", "3.3")
def do_fake_action(): # noqa def do_fake_action(): # noqa: F811
return "fake_action 3.2 to 3.3" return "fake_action 3.2 to 3.3"

View File

@ -70,8 +70,8 @@ class FakeManagerWithApi(base.Manager):
def return_api_version(self): def return_api_version(self):
return '3.1' return '3.1'
@api_versions.wraps('3.2') # noqa: F811 @api_versions.wraps('3.2')
def return_api_version(self): # noqa def return_api_version(self): # noqa: F811
return '3.2' return '3.2'

View File

@ -15,11 +15,9 @@
# under the License. # under the License.
from cinderclient import extension from cinderclient import extension
from cinderclient.v2.contrib import list_extensions
from cinderclient.tests.unit import utils from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v2 import fakes from cinderclient.tests.unit.v2 import fakes
from cinderclient.v2.contrib import list_extensions
extensions = [ extensions = [
extension.Extension(list_extensions.__name__.split(".")[-1], extension.Extension(list_extensions.__name__.split(".")[-1],

View File

@ -13,7 +13,6 @@
# limitations under the License. # limitations under the License.
from datetime import datetime from datetime import datetime
from urllib import parse as urlparse from urllib import parse as urlparse
from cinderclient import client as base_client from cinderclient import client as base_client

View File

@ -13,10 +13,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from cinderclient.v2.capabilities import Capabilities
from cinderclient.tests.unit import utils from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v2 import fakes from cinderclient.tests.unit.v2 import fakes
from cinderclient.v2.capabilities import Capabilities
cs = fakes.FakeClient() cs = fakes.FakeClient()

View File

@ -13,10 +13,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from cinderclient.v2.pools import Pool
from cinderclient.tests.unit import utils from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v2 import fakes from cinderclient.tests.unit.v2 import fakes
from cinderclient.v2.pools import Pool
cs = fakes.FakeClient() cs = fakes.FakeClient()

View File

@ -14,11 +14,11 @@
# under the License. # under the License.
from unittest import mock from unittest import mock
from urllib import parse
import ddt import ddt
import fixtures import fixtures
from requests_mock.contrib import fixture as requests_mock_fixture from requests_mock.contrib import fixture as requests_mock_fixture
from urllib import parse
from cinderclient import client from cinderclient import client
from cinderclient import exceptions from cinderclient import exceptions

View File

@ -14,10 +14,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from cinderclient.v2 import volume_type_access
from cinderclient.tests.unit import utils from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v2 import fakes from cinderclient.tests.unit.v2 import fakes
from cinderclient.v2 import volume_type_access
cs = fakes.FakeClient() cs = fakes.FakeClient()

View File

@ -14,10 +14,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from cinderclient.v2 import volume_types
from cinderclient.tests.unit import utils from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v2 import fakes from cinderclient.tests.unit.v2 import fakes
from cinderclient.v2 import volume_types
cs = fakes.FakeClient() cs = fakes.FakeClient()

View File

@ -14,10 +14,9 @@
from datetime import datetime from datetime import datetime
from cinderclient.v3 import client
from cinderclient.tests.unit import fakes from cinderclient.tests.unit import fakes
from cinderclient.tests.unit.v2 import fakes as fake_v2 from cinderclient.tests.unit.v2 import fakes as fake_v2
from cinderclient.v3 import client
fake_attachment = {'attachment': { fake_attachment = {'attachment': {

View File

@ -13,12 +13,12 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import ddt
from cinderclient import api_versions from cinderclient import api_versions
from cinderclient import exceptions as exc from cinderclient import exceptions as exc
from cinderclient.tests.unit import utils from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v3 import fakes from cinderclient.tests.unit.v3 import fakes
import ddt
cs = fakes.FakeClient(api_version=api_versions.APIVersion('3.7')) cs = fakes.FakeClient(api_version=api_versions.APIVersion('3.7'))

View File

@ -16,10 +16,9 @@
from cinderclient import api_versions from cinderclient import api_versions
from cinderclient import exceptions as exc from cinderclient import exceptions as exc
from cinderclient.v3 import group_types
from cinderclient.tests.unit import utils from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v3 import fakes from cinderclient.tests.unit.v3 import fakes
from cinderclient.v3 import group_types
cs = fakes.FakeClient(api_version=api_versions.APIVersion('3.11')) cs = fakes.FakeClient(api_version=api_versions.APIVersion('3.11'))
pre_cs = fakes.FakeClient(api_version=api_versions.APIVersion('3.10')) pre_cs = fakes.FakeClient(api_version=api_versions.APIVersion('3.10'))

View File

@ -14,10 +14,9 @@
# under the License. # under the License.
from cinderclient import api_versions from cinderclient import api_versions
from cinderclient.v3 import services
from cinderclient.tests.unit import utils from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v3 import fakes from cinderclient.tests.unit.v3 import fakes
from cinderclient.v3 import services
class ServicesTest(utils.TestCase): class ServicesTest(utils.TestCase):

View File

@ -51,15 +51,14 @@ from cinderclient import base
from cinderclient import client from cinderclient import client
from cinderclient import exceptions from cinderclient import exceptions
from cinderclient import shell from cinderclient import shell
from cinderclient.tests.unit.fixture_data import keystone_client
from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v3 import fakes
from cinderclient import utils as cinderclient_utils from cinderclient import utils as cinderclient_utils
from cinderclient.v3 import attachments from cinderclient.v3 import attachments
from cinderclient.v3 import volume_snapshots from cinderclient.v3 import volume_snapshots
from cinderclient.v3 import volumes from cinderclient.v3 import volumes
from cinderclient.tests.unit.fixture_data import keystone_client
from cinderclient.tests.unit import utils
from cinderclient.tests.unit.v3 import fakes
@ddt.ddt @ddt.ddt
@mock.patch.object(client, 'Client', fakes.FakeClient) @mock.patch.object(client, 'Client', fakes.FakeClient)

View File

@ -51,8 +51,9 @@ class MessageManager(base.ManagerWithFind):
url = self._build_list_url(resource_type, detailed=False) url = self._build_list_url(resource_type, detailed=False)
return self._list(url, resource_type) return self._list(url, resource_type)
@api_versions.wraps('3.5') # noqa: F811 @api_versions.wraps('3.5')
def list(self, search_opts=None, marker=None, limit=None, sort=None): # noqa def list(self, search_opts=None, marker=None, limit=None, # noqa: F811
sort=None):
"""Lists all messages. """Lists all messages.
:param search_opts: Search options to filter out volumes. :param search_opts: Search options to filter out volumes.

View File

@ -60,8 +60,8 @@ class VolumeBackupManager(volume_backups.VolumeBackupManager):
return self._create_backup(volume_id, container, name, description, return self._create_backup(volume_id, container, name, description,
incremental, force, snapshot_id) incremental, force, snapshot_id)
@api_versions.wraps("3.43") # noqa: F811 @api_versions.wraps("3.43")
def create(self, volume_id, container=None, # noqa def create(self, volume_id, container=None, # noqa: F811
name=None, description=None, name=None, description=None,
incremental=False, force=False, incremental=False, force=False,
snapshot_id=None, snapshot_id=None,
@ -84,10 +84,10 @@ class VolumeBackupManager(volume_backups.VolumeBackupManager):
return self._create_backup(volume_id, container, name, description, return self._create_backup(volume_id, container, name, description,
incremental, force, snapshot_id, metadata) incremental, force, snapshot_id, metadata)
@api_versions.wraps("3.51") # noqa: F811 @api_versions.wraps("3.51")
def create(self, volume_id, container=None, name=None, description=None, # noqa def create(self, volume_id, container=None, name=None, # noqa: F811
incremental=False, force=False, snapshot_id=None, metadata=None, description=None, incremental=False, force=False,
availability_zone=None): snapshot_id=None, metadata=None, availability_zone=None):
return self._create_backup(volume_id, container, name, description, return self._create_backup(volume_id, container, name, description,
incremental, force, snapshot_id, metadata, incremental, force, snapshot_id, metadata,
availability_zone) availability_zone)

View File

@ -159,8 +159,8 @@ class VolumeManager(volumes.VolumeManager):
return common_base.ListWithMeta([], response_list) return common_base.ListWithMeta([], response_list)
@api_versions.wraps("3.15") # noqa: F811 @api_versions.wraps("3.15")
def delete_metadata(self, volume, keys): # noqa def delete_metadata(self, volume, keys): # noqa: F811
"""Delete specified keys from volumes metadata. """Delete specified keys from volumes metadata.
:param volume: The :class:`Volume`. :param volume: The :class:`Volume`.
@ -190,9 +190,9 @@ class VolumeManager(volumes.VolumeManager):
'container_format': container_format, 'container_format': container_format,
'disk_format': disk_format}) 'disk_format': disk_format})
@api_versions.wraps("3.1") # noqa: F811 @api_versions.wraps("3.1")
def upload_to_image(self, volume, force, image_name, container_format, # noqa def upload_to_image(self, volume, force, image_name, # noqa: F811
disk_format, visibility, protected): container_format, disk_format, visibility, protected):
"""Upload volume to image service as image. """Upload volume to image service as image.
:param volume: The :class:`Volume` to upload. :param volume: The :class:`Volume` to upload.
""" """
@ -264,8 +264,8 @@ class VolumeManager(volumes.VolumeManager):
return self._get('/scheduler-stats/get_pools%s' % query_string, None) return self._get('/scheduler-stats/get_pools%s' % query_string, None)
@api_versions.wraps("3.33") # noqa: F811 @api_versions.wraps("3.33")
def get_pools(self, detail, search_opts): # noqa def get_pools(self, detail, search_opts): # noqa: F811
"""Show pool information for backends.""" """Show pool information for backends."""
# pylint: disable=function-redefined # pylint: disable=function-redefined
options = {'detail': detail} options = {'detail': detail}

View File

@ -4,6 +4,8 @@
# Hacking already pins down pep8, pyflakes and flake8 # Hacking already pins down pep8, pyflakes and flake8
hacking>=4.0.0,<4.1.0 # Apache-2.0 hacking>=4.0.0,<4.1.0 # Apache-2.0
flake8-import-order # LGPLv3
docutils>=0.15.2 docutils>=0.15.2
coverage>=5.2.1 # Apache-2.0 coverage>=5.2.1 # Apache-2.0
ddt>=1.4.1 # MIT ddt>=1.4.1 # MIT

View File

@ -42,10 +42,10 @@
"""Display a subunit stream through a colorized unittest test runner.""" """Display a subunit stream through a colorized unittest test runner."""
import heapq import heapq
import subunit
import sys import sys
import unittest import unittest
import subunit
import testtools import testtools

View File

@ -109,7 +109,9 @@ commands = {[testenv:functional]commands}
[flake8] [flake8]
show-source = True show-source = True
ignore = H404,H405,E122,E123,E128,E251,W504 ignore = H404,H405,E122,E123,E128,E251,W504
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build
application-import-names = cinderclient
import-order-style = pep8
[doc8] [doc8]
ignore-path=.tox,*.egg-info,doc/src/api,doc/source/drivers.rst,doc/build,.eggs/*/EGG-INFO/*.txt,doc/source/configuration/tables,./*.txt,releasenotes/build,doc/source/cli/details.rst ignore-path=.tox,*.egg-info,doc/src/api,doc/source/drivers.rst,doc/build,.eggs/*/EGG-INFO/*.txt,doc/source/configuration/tables,./*.txt,releasenotes/build,doc/source/cli/details.rst