From bd7ff92ab32ff1408f31a945822219f32c416f0d Mon Sep 17 00:00:00 2001 From: Jon Date: Mon, 19 May 2025 23:56:25 +0930 Subject: [PATCH] chore: Add pylint conf ref: #765 --- pyproject.toml | 994 +++++++++++++++++++++++++++++++++++++++++- requirements_test.txt | 9 +- 2 files changed, 997 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e4eddf1d..80c77a2b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,22 +22,1004 @@ omit = [ + [tool.pylint.main] -disable = [ - "all" +# Analyse import fallback blocks. This can be used to support both Python 2 and 3 +# compatible code, which means that the block might have code that exists only in +# one or another interpreter, leading to false positives when analysed. +# analyse-fallback-blocks = + +# Clear in-memory caches upon conclusion of linting. Useful if running pylint in +# a server-like mode. +# clear-cache-post-run = + +# Always return a 0 (non-error) status code, even if lint errors are found. This +# is primarily useful in continuous integration scripts. +# exit-zero = + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +# extension-pkg-allow-list = + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +# extension-pkg-whitelist = + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +# fail-on = + +# Specify a score threshold under which the program will exit with error. +fail-under = 10 + +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +# from-stdin = + +# Files or directories to be skipped. They should be base names, not paths. +ignore = [ + "conftest.py", + "CVS", + "docs", + "migrations", + "tests", ] -enable = [ - "variables" + +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, it +# can't be used as an escape character. +# ignore-paths = + +# Files or directories matching the regular expression patterns are skipped. The +# regex matches against base names, not paths. The default value ignores Emacs +# file locks +ignore-patterns = ["^\\.#"] + +# List of module names for which member attributes should not be checked and will +# not be imported (useful for modules/projects where namespaces are manipulated +# during runtime and thus existing member attributes cannot be deduced by static +# analysis). It supports qualified module names, as well as Unix pattern +# matching. +# ignored-modules = + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +# init-hook = + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs = 1 + +# Control the amount of potential inferred values when inferring a single object. +# This can help the performance when dealing with large functions or complex, +# nested conditions. +limit-inference-results = 100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins = [ + "pylint.extensions.bad_builtin", ] + +# Pickle collected data for later comparisons. +persistent = true + +# Resolve imports to .pyi stubs if available. May reduce no-member messages and +# increase not-an-iterable messages. +# prefer-stubs = + +# Minimum Python version to use for version dependent checks. Will default to the +# version used to run pylint. +py-version = "3.11" + +# Discover python modules and packages in the file system subtree. +# recursive = + +# Add paths to the list of the source roots. Supports globbing patterns. The +# source root is an absolute path or a path relative to the current working +# directory used to determine a package namespace for modules located under the +# source root. source-roots = [ "app/" ] +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode = true + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +# unsafe-load-any-extension = + +[tool.pylint.basic] +# Naming style matching correct argument names. +argument-naming-style = "snake_case" + +# Regular expression matching correct argument names. Overrides argument-naming- +# style. If left empty, argument names will be checked with the set naming style. +# argument-rgx = + +# Naming style matching correct attribute names. +attr-naming-style = "snake_case" + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +# attr-rgx = + +# Bad variable names which should always be refused, separated by a comma. +bad-names = ["foo", "bar", "baz", "toto", "tutu", "tata"] + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +# bad-names-rgxs = + +# Naming style matching correct class attribute names. +class-attribute-naming-style = "any" + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +# class-attribute-rgx = + +# Naming style matching correct class constant names. +class-const-naming-style = "UPPER_CASE" + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +# class-const-rgx = + +# Naming style matching correct class names. +class-naming-style = "PascalCase" + +# Regular expression matching correct class names. Overrides class-naming-style. +# If left empty, class names will be checked with the set naming style. +# class-rgx = + +# Naming style matching correct constant names. +const-naming-style = "UPPER_CASE" + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming style. +# const-rgx = + +# Minimum line length for functions/classes that require docstrings, shorter ones +# are exempt. +docstring-min-length = -1 + +# Naming style matching correct function names. +function-naming-style = "snake_case" + +# Regular expression matching correct function names. Overrides function-naming- +# style. If left empty, function names will be checked with the set naming style. +# function-rgx = + +# Good variable names which should always be accepted, separated by a comma. +good-names = ["i", "j", "k", "ex", "Run", "_"] + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +# good-names-rgxs = + +# Include a hint for the correct naming format with invalid-name. +# include-naming-hint = + +# Naming style matching correct inline iteration names. +inlinevar-naming-style = "any" + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +# inlinevar-rgx = + +# Naming style matching correct method names. +method-naming-style = "snake_case" + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +# method-rgx = + +# Naming style matching correct module names. +module-naming-style = "snake_case" + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +# module-rgx = + +# Colon-delimited sets of names that determine each other's naming style when the +# name regexes allow several styles. +# name-group = + +# Regular expression which should only match function or class names that do not +# require a docstring. +no-docstring-rgx = "^_" + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. These +# decorators are taken in consideration only for invalid-name. +property-classes = ["abc.abstractproperty"] + +# Regular expression matching correct type alias names. If left empty, type alias +# names will be checked with the set naming style. +# typealias-rgx = + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +# typevar-rgx = + +# Naming style matching correct variable names. +variable-naming-style = "snake_case" + +# Regular expression matching correct variable names. Overrides variable-naming- +# style. If left empty, variable names will be checked with the set naming style. +# variable-rgx = + +[tool.pylint.classes] +# Warn about protected attribute access inside special methods +# check-protected-access-in-special-methods = + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods = ["__init__", "__new__", "setUp", "asyncSetUp", "__post_init__"] + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected = ["_asdict", "_fields", "_replace", "_source", "_make", "os._exit"] + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg = ["cls"] + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg = ["mcs"] + +[tool.pylint.design] +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +# exclude-too-few-public-methods = + +# List of qualified class names to ignore when counting class parents (see R0901) +# ignored-parents = + +# Maximum number of arguments for function / method. +max-args = 5 + +# Maximum number of attributes for a class (see R0902). +max-attributes = 7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr = 5 + +# Maximum number of branch for function / method body. +max-branches = 12 + +# Maximum number of locals for function / method body. +max-locals = 15 + +# Maximum number of parents for a class (see R0901). +max-parents = 7 + +# Maximum number of positional arguments for function / method. +max-positional-arguments = 5 + +# Maximum number of public methods for a class (see R0904). +max-public-methods = 20 + +# Maximum number of return / yield for function / method body. +max-returns = 6 + +# Maximum number of statements in function / method body. +max-statements = 50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods = 2 + +[tool.pylint.exceptions] +# Exceptions that will emit a warning when caught. +overgeneral-exceptions = ["builtins.BaseException", "builtins.Exception"] + +[tool.pylint.format] +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +# expected-line-ending-format = + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines = "^\\s*(# )??$" + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren = 4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string = " " + +# Maximum number of characters on a single line. +max-line-length = 100 + +# Maximum number of lines in a module. +max-module-lines = 1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +# single-line-class-stmt = + +# Allow the body of an if to be on the same line as the test if there is no else. +# single-line-if-stmt = + +[tool.pylint.imports] +# List of modules that can be imported at any level, not just the top level one. +# allow-any-import-level = + +# Allow explicit reexports by alias from a package __init__. +# allow-reexport-from-package = + +# Allow wildcard imports from modules that define __all__. +# allow-wildcard-with-all = + +# Deprecated modules which should not be used, separated by a comma. +# deprecated-modules = + +# Output a graph (.gv or any supported image format) of external dependencies to +# the given file (report RP0402 must not be disabled). +# ext-import-graph = + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be disabled). +# import-graph = + +# Output a graph (.gv or any supported image format) of internal dependencies to +# the given file (report RP0402 must not be disabled). +# int-import-graph = + +# Force import order to recognize a module as part of the standard compatibility +# libraries. +# known-standard-library = + +# Force import order to recognize a module as part of a third party library. +known-third-party = ["enchant"] + +# Couples of modules and preferred modules, separated by a comma. +# preferred-modules = + +[tool.pylint.logging] +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style = "old" + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules = ["logging"] + +[tool.pylint."messages control"] +# Only show warnings with the listed confidence levels. Leave empty to show all. +# Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, UNDEFINED. +confidence = ["HIGH", "CONTROL_FLOW", "INFERENCE", "INFERENCE_FAILURE", "UNDEFINED"] + +# Disable the message, report, category or checker with the given id(s). You can +# either give multiple identifiers separated by comma (,) or put this option +# multiple times (only on the command line, not in the configuration file where +# it should appear only once). You can also use "--disable=all" to disable +# everything first and then re-enable specific checks. For example, if you want +# to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable = [ + "all" + # "raw-checker-failed", + # "bad-inline-option", + # "locally-disabled", + # "file-ignored", + # "suppressed-message", + # "useless-suppression", + # "deprecated-pragma", + # "use-implicit-booleaness-not-comparison-to-string", + # "use-implicit-booleaness-not-comparison-to-zero", + # "use-symbolic-message-instead", + # "c-extension-no-member", + # "line-too-long", + # "too-many-lines", + # "trailing-whitespace", + # "missing-final-newline", + # "trailing-newlines", + # "multiple-statements", + # "superfluous-parens", + # "mixed-line-endings", + # "unexpected-line-ending-format", + # "bad-file-encoding", + # "unnecessary-dunder-call", + # "wrong-spelling-in-comment", + # "wrong-spelling-in-docstring", + # "invalid-characters-in-docstring", + # "unnecessary-negation", + # "consider-using-enumerate", + # "consider-iterating-dictionary", + # "consider-using-dict-items", + # "use-maxsplit-arg", + # "use-sequence-for-iteration", + # "consider-using-f-string", + # "use-implicit-booleaness-not-len", + # "use-implicit-booleaness-not-comparison", + # "bad-classmethod-argument", + # "bad-mcs-method-argument", + # "bad-mcs-classmethod-argument", + # "single-string-used-for-slots", + # "unnecessary-lambda-assignment", + # "unnecessary-direct-lambda-call", + # "invalid-name", + # "disallowed-name", + # "typevar-name-incorrect-variance", + # "typevar-double-variance", + # "typevar-name-mismatch", + # "empty-docstring", + # "missing-module-docstring", + # "missing-class-docstring", + # "missing-function-docstring", + # "singleton-comparison", + # "unidiomatic-typecheck", + # "non-ascii-name", + # "non-ascii-module-import", + # "multiple-imports", + # "wrong-import-order", + # "ungrouped-imports", + # "wrong-import-position", + # "useless-import-alias", + # "import-outside-toplevel", + # "consider-merging-isinstance", + # "too-many-nested-blocks", + # "simplifiable-if-statement", + # "redefined-argument-from-local", + # "no-else-return", + # "consider-using-ternary", + # "trailing-comma-tuple", + # "stop-iteration-return", + # "simplify-boolean-expression", + # "inconsistent-return-statements", + # "useless-return", + # "consider-swap-variables", + # "consider-using-join", + # "consider-using-in", + # "consider-using-get", + # "chained-comparison", + # "consider-using-dict-comprehension", + # "consider-using-set-comprehension", + # "simplifiable-if-expression", + # "no-else-raise", + # "unnecessary-comprehension", + # "consider-using-sys-exit", + # "no-else-break", + # "no-else-continue", + # "super-with-arguments", + # "simplifiable-condition", + # "condition-evals-to-constant", + # "consider-using-generator", + # "use-a-generator", + # "consider-using-min-builtin", + # "consider-using-max-builtin", + # "consider-using-with", + # "unnecessary-dict-index-lookup", + # "use-list-literal", + # "use-dict-literal", + # "unnecessary-list-index-lookup", + # "use-yield-from", + # "duplicate-code", + # "no-classmethod-decorator", + # "no-staticmethod-decorator", + # "useless-object-inheritance", + # "property-with-parameters", + # "too-many-ancestors", + # "too-many-instance-attributes", + # "too-few-public-methods", + # "too-many-public-methods", + # "too-many-return-statements", + # "too-many-branches", + # "too-many-arguments", + # "too-many-locals", + # "too-many-statements", + # "too-many-boolean-expressions", + # "too-many-positional-arguments", + # "literal-comparison", + # "comparison-with-itself", + # "comparison-of-constants", + # "cyclic-import", + # "consider-using-from-import", + # "unnecessary-semicolon", + # "bad-indentation", + # "bad-open-mode", + # "boolean-datetime", + # "redundant-unittest-assert", + # "bad-thread-instantiation", + # "shallow-copy-environ", + # "invalid-envvar-default", + # "subprocess-popen-preexec-fn", + # "subprocess-run-check", + # "unspecified-encoding", + # "forgotten-debug-statement", + # "method-cache-max-size-none", + # "deprecated-method", + # "deprecated-argument", + # "deprecated-class", + # "deprecated-decorator", + # "deprecated-attribute", + # "bad-format-string-key", + # "unused-format-string-key", + # "bad-format-string", + # "missing-format-argument-key", + # "unused-format-string-argument", + # "format-combined-specification", + # "missing-format-attribute", + # "invalid-format-index", + # "duplicate-string-formatting-argument", + # "f-string-without-interpolation", + # "format-string-without-interpolation", + # "anomalous-backslash-in-string", + # "anomalous-unicode-escape-in-string", + # "implicit-str-concat", + # "inconsistent-quotes", + # "redundant-u-string-prefix", + # "logging-not-lazy", + # "logging-format-interpolation", + # "logging-fstring-interpolation", + # "bare-except", + # "duplicate-except", + # "try-except-raise", + # "raise-missing-from", + # "binary-op-exception", + # "raising-format-tuple", + # "wrong-exception-operation", + # "broad-exception-caught", + # "broad-exception-raised", + # "modified-iterating-list", + # "bad-chained-comparison", + # "attribute-defined-outside-init", + # "bad-staticmethod-argument", + # "protected-access", + # "implicit-flag-alias", + # "arguments-differ", + # "signature-differs", + # "abstract-method", + # "super-init-not-called", + # "non-parent-init-called", + # "invalid-overridden-method", + # "arguments-renamed", + # "unused-private-member", + # "overridden-final-method", + # "subclassed-final-class", + # "redefined-slots-in-subclass", + # "super-without-brackets", + # "useless-parent-delegation", + # "unnecessary-ellipsis", + # "missing-timeout", + # "useless-else-on-loop", + # "unreachable", + # "dangerous-default-value", + # "pointless-statement", + # "pointless-string-statement", + # "expression-not-assigned", + # "unnecessary-lambda", + # "duplicate-key", + # "exec-used", + # "eval-used", + # "confusing-with-statement", + # "using-constant-test", + # "missing-parentheses-for-call-in-test", + # "self-assigning-variable", + # "redeclared-assigned-name", + # "assert-on-string-literal", + # "duplicate-value", + # "named-expr-without-context", + # "pointless-exception-statement", + # "return-in-finally", + # "lost-exception", + # "assert-on-tuple", + # "unnecessary-pass", + # "comparison-with-callable", + # "nan-comparison", + # "contextmanager-generator-missing-cleanup", + # "nested-min-max", + # "non-ascii-file-name", + # "using-f-string-in-unsupported-version", + # "using-final-decorator-in-unsupported-version", + # "using-exception-groups-in-unsupported-version", + # "using-generic-type-syntax-in-unsupported-version", + # "using-assignment-expression-in-unsupported-version", + # "using-positional-only-args-in-unsupported-version", + # "keyword-arg-before-vararg", + # "arguments-out-of-order", + # "non-str-assignment-to-dunder-name", + # "isinstance-second-argument-not-valid-type", + # "kwarg-superseded-by-positional-arg", + # "fixme", + # "wildcard-import", + # "reimported", + # "import-self", + # "preferred-module", + # "misplaced-future", + # "shadowed-import", + # "deprecated-module", + # "useless-with-lock", + # "invalid-envvar-value", + # "singledispatch-method", + # "singledispatchmethod-function", + # "invalid-unicode-codec", + # "bidirectional-unicode", + # "invalid-character-backspace", + # "invalid-character-carriage-return", + # "invalid-character-sub", + # "invalid-character-esc", + # "invalid-character-nul", + # "invalid-character-zero-width-space", + # "bad-format-character", + # "truncated-format-string", + # "mixed-format-string", + # "format-needs-mapping", + # "missing-format-string-key", + # "too-many-format-args", + # "too-few-format-args", + # "bad-string-format-type", + # "bad-str-strip-call", + # "logging-unsupported-format", + # "logging-format-truncated", + # "logging-too-many-args", + # "logging-too-few-args", + # "bad-except-order", + # "raising-bad-type", + # "misplaced-bare-raise", + # "bad-exception-cause", + # "raising-non-exception", + # "notimplemented-raised", + # "catching-non-exception", + # "modified-iterating-dict", + # "modified-iterating-set", + # "invalid-field-call", + # "method-hidden", + # "access-member-before-definition", + # "no-method-argument", + # "no-self-argument", + # "invalid-slots-object", + # "assigning-non-slot", + # "invalid-slots", + # "inherit-non-class", + # "inconsistent-mro", + # "duplicate-bases", + # "class-variable-slots-conflict", + # "invalid-class-object", + # "invalid-enum-extension", + # "declare-non-slot", + # "non-iterator-returned", + # "unexpected-special-method-signature", + # "invalid-length-returned", + # "invalid-bool-returned", + # "invalid-index-returned", + # "invalid-repr-returned", + # "invalid-str-returned", + # "invalid-bytes-returned", + # "invalid-hash-returned", + # "invalid-length-hint-returned", + # "invalid-format-returned", + # "invalid-getnewargs-returned", + # "invalid-getnewargs-ex-returned", + # "positional-only-arguments-expected", + # "init-is-generator", + # "return-in-init", + # "function-redefined", + # "not-in-loop", + # "return-outside-function", + # "yield-outside-function", + # "return-arg-in-generator", + # "nonexistent-operator", + # "duplicate-argument-name", + # "abstract-class-instantiated", + # "too-many-star-expressions", + # "invalid-star-assignment-target", + # "star-needs-assignment-target", + # "nonlocal-and-global", + # "continue-in-finally", + # "nonlocal-without-binding", + # "used-prior-global-declaration", + # "bad-reversed-sequence", + # "misplaced-format-function", + # "yield-inside-async-function", + # "not-async-context-manager", + # "no-member", + # "not-callable", + # "assignment-from-no-return", + # "no-value-for-parameter", + # "too-many-function-args", + # "unexpected-keyword-arg", + # "redundant-keyword-arg", + # "missing-kwoa", + # "invalid-sequence-index", + # "invalid-slice-index", + # "assignment-from-none", + # "not-context-manager", + # "invalid-unary-operand-type", + # "unsupported-binary-operation", + # "repeated-keyword", + # "unsupported-membership-test", + # "unsubscriptable-object", + # "unsupported-assignment-operation", + # "unsupported-delete-operation", + # "invalid-metaclass", + # "dict-iter-missing-items", + # "await-outside-async", + # "unhashable-member", + # "invalid-slice-step", + # "not-an-iterable", + # "not-a-mapping", + # "bad-super-call", + # "import-error", + # "relative-beyond-top-level", + # "method-check-failed" +] + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where it +# should appear only once). See also the "--disable" option for examples. +enable = [ + + # "global-variable-undefined", + # "global-variable-not-assigned", + # "global-statement", + # "global-at-module-level", + # "unused-import", + # "unused-variable", + # "unused-argument", + # "unused-wildcard-import", + # "redefined-outer-name", + # "redefined-builtin", + # "undefined-loop-variable", + # "unbalanced-tuple-unpacking", + # "cell-var-from-loop", + # "possibly-unused-variable", + # "self-cls-assignment", + # "unbalanced-dict-unpacking", + # "used-before-assignment", + # "undefined-variable", + # "undefined-all-variable", + # "invalid-all-object", + # "invalid-all-format", + # "possibly-used-before-assignment", + # "no-name-in-module", + # "unpacking-non-sequence", + # "potential-index-error" + + # Fatal + "config-parse-error", + "fatal", + "method-check-failed", + "parse-error", + # Error + "abstract-class-instantiated", + "assigning-non-slot", + "assignment-from-no-return", + "assignment-from-none", + "bad-configuration-section", # PyLint Conf + "bad-except-order", + "bad-exception-cause", + "bad-format-character", + "bad-plugin-value", # PyLint Conf + "bad-super-call", + "catching-non-exception", + "continue-in-finally", + "dict-iter-missing-items", + "duplicate-argument-name", + "duplicate-bases", + "format-needs-mapping", + # "function-redefined", # Keep + "import-error", + "inconsistent-mro", + "inherit-non-class", + "init-is-generator", + "invalid-all-format", + "invalid-all-object", + "no-name-in-module", + # "no-self-argument", # Keep + "no-value-for-parameter", + "non-iterator-returned", + "nonexistent-operator", + "nonlocal-and-global", + "nonlocal-without-binding", + "not-a-mapping", + "not-an-iterable", + "not-async-context-manager", + "not-callable", + "not-context-manager", + "not-in-loop", + "notimplemented-raised", + "positional-only-arguments-expected", + + "potential-index-error", + "raising-bad-type", + "raising-non-exception", + "syntax-error", + # Warning + # "abstract-method", # investigate if going to use + "bad-builtin", + "deprecated-module", # Must add to `deprecated-modules=` to detect + "deprecated-method", + "deprecated-decorator", + "deprecated-class", + "deprecated-attribute", + "deprecated-argument", + "import-self", + +] + +[tool.pylint.method_args] +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods = ["requests.api.delete", "requests.api.get", "requests.api.head", "requests.api.options", "requests.api.patch", "requests.api.post", "requests.api.put", "requests.api.request"] + +[tool.pylint.miscellaneous] +# List of note tags to take in consideration, separated by a comma. +notes = ["FIXME", "XXX", "TODO"] + +# Regular expression of note tags to take in consideration. +# notes-rgx = + +[tool.pylint.refactoring] +# Maximum number of nested blocks for function / method body +max-nested-blocks = 5 + +# Complete name of functions that never returns. When checking for inconsistent- +# return-statements if a never returning function is called then it will be +# considered as an explicit return statement and no message will be printed. +never-returning-functions = ["sys.exit", "argparse.parse_error"] + +# Let 'consider-using-join' be raised when the separator to join on would be non- +# empty (resulting in expected fixes of the type: ``"- " + " - ".join(items)``) +suggest-join-with-non-empty-separator = true + +[tool.pylint.reports] +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each category, +# as well as 'statement' which is the total number of statements analyzed. This +# score is used by the global evaluation report (RP0004). +evaluation = "max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10))" + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +# msg-template = + +# Set the output format. Available formats are: text, parseable, colorized, json2 +# (improved json format), json (old json format) and msvs (visual studio). You +# can also give a reporter class, e.g. mypackage.mymodule.MyReporterClass. +# output-format = + +# Tells whether to display a full report or only the messages. +# reports = + +# Activate the evaluation score. +score = true + +[tool.pylint.similarities] +# Comments are removed from the similarity computation +ignore-comments = true + +# Docstrings are removed from the similarity computation +ignore-docstrings = true + +# Imports are removed from the similarity computation +ignore-imports = true + +# Signatures are removed from the similarity computation +ignore-signatures = true + +# Minimum lines number of a similarity. +min-similarity-lines = 4 + +[tool.pylint.spelling] +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions = 4 + +# Spelling dictionary name. No available dictionaries : You need to install both +# the python package and the system dependency for enchant to work. +# spelling-dict = + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives = "fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:" + +# List of comma separated words that should not be checked. +# spelling-ignore-words = + +# A path to a file that contains the private dictionary; one word per line. +# spelling-private-dict-file = + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +# spelling-store-unknown-words = + +[tool.pylint.typecheck] +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators = ["contextlib.contextmanager"] + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +# generated-members = + +# Tells whether missing members accessed in mixin class should be ignored. A +# class is considered mixin if its name matches the mixin-class-rgx option. +# Tells whether to warn about missing members when the owner of the attribute is +# inferred to be None. +ignore-none = true + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference can +# return multiple potential results while evaluating a Python object, but some +# branches might not be evaluated, which results in partial inference. In that +# case, it might be useful to still emit no-member and other checks for the rest +# of the inferred objects. +ignore-on-opaque-inference = true + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins = ["no-member", "not-async-context-manager", "not-context-manager", "attribute-defined-outside-init"] + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes = [ + "optparse.Values", "thread._local", "_thread._local", "argparse.Namespace", +] + +# Show a hint with possible names when a member name was not found. The aspect of +# finding the hint is based on edit distance. +missing-member-hint = true + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance = 1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices = 1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx = ".*[Mm]ixin" + +# List of decorators that change the signature of a decorated function. +# signature-mutators = [tool.pylint.variables] +# List of additional names supposed to be defined in builtins. Remember that you +# should avoid defining new builtins when possible. +# additional-builtins = + +# Tells whether unused global variables should be treated as a violation. allow-global-unused-variables = true + +# List of names allowed to shadow builtins +# allowed-redefined-builtins = + +# List of strings which can identify a callback function by name. A callback name +# must start or end with one of those strings. +callbacks = ["cb_", "_cb"] + +# A regular expression matching the name of dummy variables (i.e. expected to not +# be used). +dummy-variables-rgx = "_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_" + +# Argument names that match this expression will be ignored. +ignored-argument-names = "_.*|^ignored_|^unused_" + +# Tells whether we should check for unused import in __init__ files. init-import = true +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules = ["six.moves", "past.builtins", "future.builtins", "builtins", "io"] + + [tool.pytest.ini_options] @@ -60,3 +1042,7 @@ log_cli_date_format = '%Y-%m-%d %H:%M:%S' # # 'tests/functional/**/*.py', # # 'tests/unit/**/*.py', # ] + + + + diff --git a/requirements_test.txt b/requirements_test.txt index 4f7172f6..450396a2 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,7 +1,12 @@ +coverage==7.8.0 + +pylint==3.3.1 + pytest==8.3.5 + +# PyTest Plugins +pytest-cov==6.1.1 pytest-django==4.11.1 pytest-mock==3.14.0 -coverage==7.8.0 -pytest-cov==6.1.1 # selenium==4.21.0 \ No newline at end of file