Flake8 i003 как исправить

Hey there, I have these import statements at the top of my module:


import os

from flask import Blueprint, abort, current_app, jsonify
from flask.views import MethodView
from webargs import fields, missing
from webargs.flaskparser import use_kwargs
from werkzeug.utils import secure_filename

from tcst_api.models.data import DataContract, DataFile
from tcst_api.schemas.data import DataContractSchema, DataFileSchema

When I run flake8-isort on the file I get the following output:

tcst_api/views/data.py:2:1: I001 isort found an import in the wrong position
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0
tcst_api/views/data.py:4:1: I003 isort expected 1 blank line in imports, found 0

Which is kinda meaningless and seems to be broken.
However if I run isort on the same content I get no errors as expected.

I’m using the following flake8 and isort versions:

flake8 - 3.5.0
flake8-isort - 2.3
isort - 4.3.4

Can you please help me with this?

Сергей Панкратов

Добрый день, проблема после запуска “poetry run wemake-python-styleguid”.
До этого все шаги были выполнены корректно, ошибок не появлялось.
Терминал выдаёт:

sergey@sergey-305E4A-305E5A-305E7A:~/python-project-lvl1$ poetry run wemake-python-styleguid

  FileNotFoundError

  [Errno 2] No such file or directory: b'/snap/bin/wemake-python-styleguid'

  at /usr/lib/python3.8/os.py:601 in _execvpe
       597│         path_list = map(fsencode, path_list)
       598│     for dir in path_list:
       599│         fullname = path.join(dir, file)
       600│         try:
    →  601│             exec_func(fullname, *argrest)
       602│         except (FileNotFoundError, NotADirectoryError) as e:
       603│             last_exc = e
       604│         except OSError as e:
       605│             last_exc = e


5


0

Сергей Панкратов

При этом команда:

poetry run flake8 brain_games
Выдаёт следующее:

sergey@sergey-305E4A-305E5A-305E7A:~/python-project-lvl1$ poetry run flake8 brain_games
brain_games/cli.py:1:1: D100 Missing docstring in public module
brain_games/cli.py:4:1: I003 isort expected 1 blank line in imports, found 0
--- brain_games/cli.py:before
+++ brain_games/cli.py:after
@@ -1,6 +1,7 @@
 #!/usr/bin/env python

 import prompt
+

 def welcome_user():
     print('Welcome to the Brain Games!')

brain_games/cli.py:5:1: E302 expected 2 blank lines, found 1
brain_games/cli.py:5:1: D103 Missing docstring in public function
brain_games/cli.py:6:5: WPS421 Found wrong function call: print
brain_games/cli.py:8:5: WPS421 Found wrong function call: print
brain_games/cli.py:8:11: WPS305 Found `f` string
brain_games/cli.py:10:1: E302 expected 2 blank lines, found 1
brain_games/cli.py:10:1: D103 Missing docstring in public function
brain_games/cli.py:13:1: E305 expected 2 blank lines after class or function definition, found 1
brain_games/__init__.py:1:1: D104 Missing docstring in public package
brain_games/scripts/brain_games.py:0:1: WPS453 Found executable mismatch: shebang is present but the file is not executable
brain_games/scripts/brain_games.py:1:1: D100 Missing docstring in public module
brain_games/scripts/brain_games.py:3:1: WPS301 Found dotted raw import: brain_games.cli
brain_games/scripts/brain_games.py:4:1: I003 isort expected 1 blank line in imports, found 0
--- brain_games/scripts/brain_games.py:before
+++ brain_games/scripts/brain_games.py:after
@@ -1,6 +1,7 @@
 #!/usr/bin/env python

 import brain_games.cli
+

 def main():
     brain_games.cli.welcome_user()

brain_games/scripts/brain_games.py:5:1: E302 expected 2 blank lines, found 1
brain_games/scripts/brain_games.py:5:1: D103 Missing docstring in public function
brain_games/scripts/brain_games.py:8:1: E305 expected 2 blank lines after class or function definition, found 1
brain_games/scripts/__init__.py:1:1: D104 Missing docstring in public package


0

Сергей К.

А почему вы используете именно такую команду?


0

Сергей Панкратов

Сергей К., Следовал пунктам из задания.

  1. Добавьте в dev-зависимости flake8: poetry add –dev flake8 (если хотите попробовать “Wemake Python Styleguide”, то устанавливайте poetry add –dev wemake-python-styleguide вместо flake8).

  2. Подключите конфигурацию из образцового пакета (обратите внимание на секцию ignore, так мы очищаем список правил, которые flake8 по умолчанию игнорирует).

  3. Проверьте, работает ли проверка: poetry run flake8 brain_games.

Вы намекаете на то, что даже если установлен ”wemake-python-styleguide” проверка все равно должна запускаться с помощью “poetry run flake8”?


0

Сергей Панкратов

Сергей К., Понял, вопрос снят.


0


0

Use isort to check if the imports on your python files are sorted the way you expect.

Add an .isort.cfg to define how you want your imports sorted and run flake8 as you usually do.

See isort documentation for .isort.cfg available options.

Install

Install with pip:

$ pip install flake8-isort

Install with conda:

$ conda install -c conda-forge flake8-isort

Configuration

If using the select option from flake8 be sure to enable the I category as well, see below for the specific error codes reported by flake8-isort.

See flake8 –help for available flake8-isort options.

Error codes

Error code

Description

I001

isort found an import in the wrong position

I002

no configuration found (.isort.cfg or [isort] in configs)

I003

isort expected 1 blank line in imports, found 0

I004

isort found an unexpected blank line in imports

I005

isort found an unexpected missing import

Requirements

  • Python 3.7, 3.8, 3.9, 3.10, 3.11 and pypy3

  • flake8

  • isort

Relation to flake8-import-order

As an alternative to this flake8 plugin, there’s flake8-import-order that could be worth checking out. In contrast to this plugin that defers all logic to isort, the flake8-import-order comes bundled with it’s own logic.

flake8-import-order comes with a few predefined set of styles meanwhile this plugin can be customized a bit more. But the biggest difference could lie in that flake8-isort actually has the corresponding sorting engine isort that can sort the import orders of your existing python files. Meanwhile flake8-import-order has no such corresponding tool, hence big existing projects who want to adopt either would get a more automized experience choosing flake8-isort.

License

GPL 2.0

Changelog

6.0.0 (2022-12-22)

  • Drop isort 4.x support.
    [gforcada]

  • Add support for flake8 6.0.0.
    [gforcada]

  • Add –isort-no-skip-gitignore option to allow temporarily overriding the set
    value of isort’s skip_gitignore option with False. This can cause
    flake8-isort to run significantly faster at the cost of making flake8-isort’s
    behavior differ slightly from the behavior of isort –check. [gschaffner]

5.0.3 (2022-11-20)

  • Fix broken add_options method, again. [casperdcl]

5.0.2 (2022-11-19)

  • Fix broken add_options method [casperdcl]

5.0.1 (2022-11-18)

  • Improve the config option is added and read back. [gforcada]

  • Bump plugin version. [gforcada]

5.0.0 (2022-10-08)

  • Update dependencies. [gforcada]

  • Revamp GitHub actions. [gforcada]

  • Drop python 3.6, and add python 3.10. [gforcada]

  • Use linters and formatters to keep code sane and beautiful. [gforcada]

4.2.0 (2022-08-04)

  • Fix compatibility with flake8 version 5. [nhymxu]

4.1.2.post0 (2022-07-25)

  • Release it as a wheel as well. [gforcada]

4.1.2 (2022-07-25)

  • The package no longer depends on testfixtures.

4.1.1 (2021-10-14)

  • Release py3 only wheels..

4.1.0 (2021-10-14)

  • Support flake8 4.x [g-as]

  • Switch from travis-ci to github actions. [g-as]

  • Drop python 2.7 support and 3.5 as well [g-as]

4.0.0 (2020-08-11)

  • Nothing changed yet.

4.0.0a0 (2020-08-07)

  • support isort >= 5 [bnavigator, pkolbus]

3.0.1 (2020-07-08)

  • Work around FailedToLoadPlugin exception by requiring isort 4.x. Likewise,
    pin the major version of all dependencies, to reduce risk of any future
    incompatibilities.
    [pkolbus]

3.0.0 (2020-04-15)

  • Let isort search the configuration, rather than flake8-isort try to find it.
    [jnns]

2.9.1 (2020-03-28)

  • Fix flake8 warning.
    [sobolevn]

2.9.0 (2020-03-16)

  • Add python3.8 support.
    [sobolevn]

2.8.0 (2019-12-05)

  • Look for isort configuration on .flake8 files as well.
    [JohnHBrock]

  • Document how to install flake8-isort on conda.
    [marcelotrevisani]

  • Look for isort configuration on pyproject.toml files as well.
    [sanjioh]

2.7.0 (2019-03-19)

  • Improve the README.
    [barbossa]

  • Fix isort output when pipes are used.
    [maerteijn]

2.6.0 (2018-12-01)

  • Use pytest to run tests.
    [gforcada]

  • New error code I005 isort foundan unexpected missing import.
    [charettes]

  • Add isort_show_traceback option to show verbose multi-line output
    from isort, turned off by default
    [sobolevn]

2.5 (2018-03-15)

  • Now requires isort >= 4.3.0.
    [jleclanche]

2.4 (2018-02-25)

  • Fix input handling with flake8’s –stdin-display-name, and simplify it.
    [blueyed]

  • Remove flake8-polyfill dependency. flake8 >= 3.2.1 is required already, and
    stdin is not read directly anymore.
    [blueyed]

2.3 (2017-12-22)

  • Fix typo.
    [paltman]

  • Add tox.ini and .editorconfig to config search.
    [cas–]

  • Make this plugin compatible with flake8 hook.
    As the hook copies the files out of tree,
    flake8-isort never finds the correct configuration.
    [jaysonsantos]

2.2.2 (2017-08-19)

  • Workaround for isort bug when skipping files.
    [danpalmer]

2.2.1 (2017-05-12)

  • Release as universal wheel.
    [gforcada]

2.2 (2017-03-26)

  • Support flake8 git hook.
    [sergio-alonso]

  • Support python 3.6.
    [gforcada]

  • Search configuration on home folder.
    [gforcada]

2.1.3 (2016-11-25)

  • Fix yet another corner case.
    [gforcada]

2.1.2 (2016-11-25)

  • Fix another corner case: ignored files.
    [cas–]

2.1.1 (2016-11-25)

  • Fix corner cases of isort: newlines and grouped imports.
    [cas–]

2.1.0 (2016-11-24)

  • Show the exact line and kind of error,
    rather than a generic message.
    [cas–]

2.0.3 (2016-11-22)

  • Update trove classifiers.
    [gforcada]

2.0.2 (2016-11-22)

  • Add flake8 classifier.
    [sigmavirus24]

  • Require flake8 3.2.1.
    flake8 series 3.1.x and 3.2.0 where not reporting flake8-isort errors.
    [gforcada]

  • Test on pypy and pypy3.
    [gforcada]

  • Fix tests and formatting.
    [gforcada]

2.0.1 (2016-09-22)

  • Fix standard input processing.
    [carljm]

2.0 (2016-09-14)

  • Refactor code to handle flake8 version 3.
    [danpalmer]

  • Require flake8 version 3.0.
    [gforcada]

1.3 (2016-06-20)

  • Make error messages clearer.
    [do3cc]

  • Use either pep8 or pycodestyle (new name for pep8).
    [Maxim Novikov]

  • Fix coveralls.
    [gforcada]

1.2 (2016-03-05)

  • Allow stdin processing, this way text editor can pass input to flake8.
    [mjacksonw]

1.1.1 (2016-02-16)

  • Silence isort messages.
    [gforcada]

  • Improve wording.
    [gforcada]

1.1 (2016-02-16)

  • Check for isort configuration on setup.cfg as well.
    [plumdog]

1.0 (2015-12-16)

  • Check for an isort configuration file.
    [gforcada]

0.2 (2015-09-14)

  • Fix entry point.
    [gforcada]

0.1.post0 (2015-09-13)

  • Release wheels as well.
    [gforcada]

0.1 (2015-09-13)

  • Initial release
    [gforcada]

  • Add all boilerplate files.
    [gforcada]

  • Create the flake8 plugin per se.
    [gforcada]

One blank line is expected between the methods of a class.

Anti-pattern

class MyClass(object):
    def func1():
        pass
    def func2():
        pass

Best practice

class MyClass(object):
    def func1():
        pass

    def func2():
        pass

Additional links

  • https://www.python.org/dev/peps/pep-0008/#blank-lines

Hi,

I’m using flake8-isort plugin in my projects and since isort released the new version, v5.0.0, the plugin stopped working.
Here is the log with traceback:

Traceback (most recent call last):
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/plugins/manager.py", line 157, in load_plugin
    self._load()
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/plugins/manager.py", line 134, in _load
    self._plugin = self.entry_point.load()
  File "/app/.tox/lint/lib/python3.6/site-packages/importlib_metadata/__init__.py", line 105, in load
    module = import_module(match.group('module'))
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8_isort.py", line 3, in <module>
    from isort import SortImports
ImportError: cannot import name 'SortImports'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/.tox/lint/bin/flake8", line 8, in <module>
    sys.exit(main())
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/main/cli.py", line 22, in main
    app.run(argv)
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/main/application.py", line 360, in run
    self._run(argv)
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/main/application.py", line 347, in _run
    self.initialize(argv)
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/main/application.py", line 328, in initialize
    self.find_plugins(config_finder)
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/main/application.py", line 159, in find_plugins
    self.check_plugins.load_plugins()
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/plugins/manager.py", line 415, in load_plugins
    plugins = list(self.manager.map(load_plugin))
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/plugins/manager.py", line 302, in map
    yield func(self.plugins[name], *args, **kwargs)
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/plugins/manager.py", line 413, in load_plugin
    return plugin.load_plugin()
  File "/app/.tox/lint/lib/python3.6/site-packages/flake8/plugins/manager.py", line 164, in load_plugin
    raise failed_to_load
flake8.exceptions.FailedToLoadPlugin: Flake8 failed to load plugin "I00" due to cannot import name 'SortImports'.

Добавить комментарий