256 lines
9.0 KiB
INI
256 lines
9.0 KiB
INI
[flake8]
|
||
|
||
# Don't even try to analyze these:
|
||
extend-exclude =
|
||
# No need to traverse egg info dir
|
||
*.egg-info,
|
||
# GitHub configs
|
||
.github,
|
||
# Cache files of MyPy
|
||
.mypy_cache,
|
||
# Cache files of pytest
|
||
.pytest_cache,
|
||
# Temp dir of pytest-testmon
|
||
.tmontmp,
|
||
# Occasional virtualenv dir
|
||
.venv,
|
||
# VS Code
|
||
.vscode,
|
||
# Temporary build dir
|
||
build,
|
||
# This contains sdists and wheels of proxy.py that we don't want to check
|
||
dist,
|
||
# Occasional virtualenv dir
|
||
env,
|
||
# Metadata of `pip wheel` cmd is autogenerated
|
||
pip-wheel-metadata,
|
||
|
||
# IMPORTANT: avoid using ignore option, always use extend-ignore instead
|
||
# Completely and unconditionally ignore the following errors:
|
||
extend-ignore =
|
||
I # flake8-isort is drunk + we have isort integrated into pre-commit
|
||
B009 # FIXME: `getattr()` called with a constant arg
|
||
B024 # FIXME: is an abstract base class, but it has no abstract methods
|
||
B027 # Is an empty method in an abstract base class, but has no abstract decorator.
|
||
# Consider adding @abstractmethod.
|
||
C812 # FIXME: missing trailing comma
|
||
C819 # FIXME: inline trailing comma
|
||
D101
|
||
D102
|
||
D103
|
||
D105
|
||
D106
|
||
D107
|
||
D203
|
||
D205
|
||
D208
|
||
D209
|
||
D212
|
||
D213
|
||
D300
|
||
D400
|
||
D401
|
||
D402
|
||
D403
|
||
D404
|
||
D405
|
||
D407
|
||
D412
|
||
D413
|
||
D415
|
||
DAR101 # FIXME: undocumented docstring param
|
||
DAR201 # FIXME: no "returns" in docstring
|
||
DAR301 # FIXME: no "yields" in docstring
|
||
DAR401 # FIXME: no "raises" in docstring
|
||
E800 # FIXME: commented out code
|
||
N400 # FIXME: escaping with backslash at EOL
|
||
N801 # FIXME: class name should use ProudCamelCase
|
||
N802 # FIXME: func name should be lowercase
|
||
N816 # FIXME: mixed case var name
|
||
P101 # FIXME: format string with unindexed params
|
||
PT009 # FIXME: pytest encourages use of `assert`
|
||
PT018 # FIXME: use multiple `assert`s instead of one complex
|
||
Q000 # FIXME: inconsistent double quotes use when single ones are needed
|
||
Q001 # FIXME: use double quotes in multiline strings
|
||
Q002 # FIXME: use double quote docstrings
|
||
Q003 # FIXME: avoid escaping in-string quotes
|
||
RST201 # FIXME: missing trailing blank line in docstring
|
||
RST203 # FIXME: no trailing blank line in docstring
|
||
RST299 # FIXME: Cannot extract compound bibliographic field "copyright"
|
||
RST301 # FIXME: unexpected indent in docstring
|
||
RST499 # FIXME: Missing matching underline for section title overline
|
||
S101 # FIXME: assertions are thrown away in optimized mode, needs audit
|
||
S104 # FIXME: bind-all interface listen
|
||
S105 # FIXME: hardcoded password?
|
||
S113 # FIXME: Call to httpx without timeout (false positive)
|
||
S303 # FIXME: insecure hash func
|
||
S311 # FIXME: `random` needs auditing
|
||
S404 # FIXME: `subprocess` use needs auditing
|
||
S603 # FIXME: audit untrusted `subprocess.Popen` input
|
||
S607 # FIXME: running subprocess with a non-absolute executable path
|
||
WPS100 # FIXME: unhelpful module name
|
||
WPS102 # FIXME: incorrect module name pattern
|
||
WPS110 # FIXME: unhelpful var name
|
||
WPS111 # FIXME: too short var name
|
||
WPS114 # FIXME: underscored numbers in var name
|
||
WPS115 # FIXME: uppercase class attr
|
||
WPS118 # FIXME: long func name
|
||
WPS120 # FIXME: regular name w/ trailing underscore
|
||
WPS121 # FIXME: unused var used 0_O
|
||
WPS122 # FIXME: unused var definition 0_O
|
||
WPS201 # FIXME: too many imports
|
||
WPS202 # FIXME: too many mod members
|
||
WPS203 # FIXME: too many mod imported names
|
||
WPS204 # FIXME: too much copy-paste
|
||
WPS210 # FIXME: too many local vars
|
||
WPS211 # FIXME: too many "__init__()" args
|
||
WPS212 # FIXME: too many "return"s
|
||
WPS213 # FIXME: too many expressions
|
||
WPS214 # FIXME: too many methods
|
||
WPS216 # FIXME: too many decorators
|
||
WPS219 # FIXME: deep object access is unreadable
|
||
WPS220 # FIXME: deep code nesting
|
||
WPS221 # FIXME: too big inline complexity / tested instructions
|
||
WPS222 # FIXME: too much logic in condition
|
||
WPS223 # FIXME: the code is too branchy
|
||
WPS225 # FIXME: too many "except"s
|
||
WPS226 # FIXME: magic string constant used too much, put it in a var
|
||
WPS229 # FIXME: try/except should wrap exactly one instruction
|
||
WPS230 # FIXME: too many public instance attrs
|
||
WPS231 # FIXME: insane complexity/code nesting in a function
|
||
WPS232 # FIXME: module is too complex
|
||
WPS234 # FIXME: annotation is too complex
|
||
WPS235 # FIXME: too many imported names from a single module
|
||
WPS237 # FIXME: too complex f-string
|
||
WPS300 # local folder imports are needed
|
||
WPS301 # FIXME: dotted import
|
||
WPS305 # this project is Python 3 only and so f-strings are allowed
|
||
WPS306 # this project is Python 3 so it doesn't need an explicit class base
|
||
WPS313 # FIXME: parens after keyword
|
||
WPS317 # enforces weird indents
|
||
WPS318 # enforces weird indents
|
||
WPS319 # FIXME: asymmetric closing bracket
|
||
WPS320 # FIXME: multiline func type annotation
|
||
WPS322 # FIXME: inline multiline str
|
||
WPS323 # false-positive: %-formatting in logging
|
||
WPS324 # FIXME: inconsistent "return" in func
|
||
WPS326 # doesn't allow implicit string concat
|
||
WPS328 # FIXME: useless `while` node
|
||
WPS336 # FIXME: explicit string concat
|
||
WPS337 # FIXME: multiline conditions
|
||
WPS338 # FIXME: unordered class methods
|
||
WPS339 # FIXME: meaningless leading zeros in number
|
||
WPS349 # FIXME: redundant slice
|
||
WPS360 # FIXME: unnecessary r-string
|
||
WPS361 # FIXME: inconsistent comprehension structure
|
||
WPS403 # FIXME: `# noqa` overuse
|
||
WPS407 # FIXME: mutable mod const
|
||
WPS408 # FIXME: duplicate logical condition
|
||
WPS410 # allow `__all__`
|
||
WPS412 # FIXME: logic in `__init__`
|
||
WPS414 # FIXME: consusing unpacking target
|
||
WPS420 # FIXME: pointless keyword like `pass`
|
||
WPS421 # FIXME: call to `print()`
|
||
WPS425 # FIXME: bool non-keyword arg
|
||
WPS428 # FIXME: pointless statement
|
||
WPS430 # FIXME: nested func
|
||
WPS431 # FIXME: nested class
|
||
WPS432 # FIXME: magic number w/o assigned context/name
|
||
WPS433 # FIXME: nested import
|
||
WPS437 # FIXME: protected attr access
|
||
WPS440 # FIXME: block vars overlap
|
||
WPS441 # FIXME: control var use after block
|
||
WPS442 # FIXME: outer scope var shadowing
|
||
WPS453 # FIXME: executable file w/o shebang
|
||
WPS454 # FIXME: don't raise a broad exception, use a specific one
|
||
WPS457 # FIXME: infinite `while`
|
||
WPS458 # FIXME: import collision
|
||
WPS460 # FIXME: single element unpacking
|
||
WPS464 # FIXME: empty comment
|
||
WPS501 # FIXME: "finally" in "try" w/o "except"
|
||
WPS504 # FIXME: invert a negated condition
|
||
WPS505 # FIXME: nested "try" in "try"
|
||
WPS507 # FIXME: useless `len()`
|
||
WPS508 # FIXME: misused `not` in if-clause
|
||
WPS509 # FIXME: incorrect ternary nesting
|
||
WPS510 # FIXME: if-clause with `in` operator w/ wrong set semantics
|
||
WPS513 # FIXME: implicit `elif`
|
||
WPS515 # FIXME: implicit `open()` w/o a CM
|
||
WPS518 # FIXME: implicit `enumerate()` pattern
|
||
WPS519 # FIXME: implicit `sum()` pattern
|
||
WPS528 # FIXME: implicit `dict.items()` pattern
|
||
WPS529 # FIXME: implicit `dict.get()` pattern
|
||
WPS531 # FIXME: simplifiable returning `if` in func
|
||
WPS602 # FIXME: `@staticmethod` is usually a code smell, use module funcs
|
||
WPS604 # FIXME: incorrect class body node
|
||
WPS605 # FIXME: method w/o args
|
||
WPS609 # FIXME: direct call to magic method
|
||
WPS612 # FIXME: useless `__init__()` override
|
||
WPS613 # FIXME: unmatching super method access
|
||
WPS615 # FIXME: unpythonic setter/getter
|
||
PT027 # FIXME: use pytest.raises() instead of unittest-style 'assertRaises'
|
||
S507 # FIXME: Paramiko call with policy set to automatically trust the unknown host key
|
||
|
||
# https://wemake-python-stylegui.de/en/latest/pages/usage/formatter.html
|
||
format = wemake
|
||
|
||
# Let's not overcomplicate the code:
|
||
#max-complexity = 10
|
||
# FIXME: this is a lot!
|
||
max-complexity = 19
|
||
|
||
# Accessibility/large fonts and PEP8 friendly:
|
||
#max-line-length = 79
|
||
# Accessibility/large fonts and PEP8 unfriendly:
|
||
#max-line-length = 100
|
||
# Even more Accessibility/large fonts and PEP8 unfriendlier:
|
||
max-line-length = 127
|
||
|
||
# Allow certain violations in certain files:
|
||
per-file-ignores =
|
||
|
||
# E800 reports a lot of false-positives for legit
|
||
# tool-related comments;
|
||
# WPS412 logic of an extension is in __init__.py file;
|
||
# FIXME: WPS201 too many imports
|
||
# FIXME: WPS402 too many `noqa`s
|
||
#proxy/__init__.py: E800, WPS201, WPS402, WPS412
|
||
|
||
# There are multiple `assert`s (S101)
|
||
# and subprocesses (import – S404; call – S603) in tests;
|
||
# also, using fixtures looks like shadowing the outer scope (WPS442);
|
||
# and finally it's impossible to have <= members in tests (WPS202):
|
||
tests/**.py: S101, S404, S603, WPS202, WPS442
|
||
|
||
# wemake-python-styleguide
|
||
show-source = true
|
||
|
||
# flake8-pytest-style
|
||
# PT001:
|
||
pytest-fixture-no-parentheses = true
|
||
# PT006:
|
||
pytest-parametrize-names-type = tuple
|
||
# PT007:
|
||
pytest-parametrize-values-type = tuple
|
||
pytest-parametrize-values-row-type = tuple
|
||
# PT023:
|
||
pytest-mark-no-parentheses = true
|
||
|
||
# flake8-rst-docstrings
|
||
rst-directives =
|
||
spelling
|
||
rst-roles =
|
||
# Built-in Sphinx roles:
|
||
class,
|
||
data,
|
||
exc,
|
||
meth,
|
||
term,
|
||
py:class,
|
||
py:data,
|
||
py:exc,
|
||
py:meth,
|
||
py:term,
|
||
# Sphinx's internal role:
|
||
event,
|