From 5e0dc977128cd0098f8a1bced4e10d7a34545abb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Dec 2024 19:21:34 -0500 Subject: [PATCH] CI(deps): Update dependency pylint to v3 (#3820) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Format pyproject.toml * Checks: Add note on MIN_PYTHON_VERSION * Configure Pyright type checker * CQ: Create default pylint config in pyproject.toml * CQ: Port root pylint config to pyproject.toml * CI(pylint): Update versions in workflow * CI: Run Pylint on all project with source-roots configuration and ignore-paths * CI(pylint): Do not use star glob for wxGUI pylint call * Clear pylint config and reset to defaults Set GRASS-specific overrides and comment out defaults * CQ: Enable pylint plugins * Set pylint's output-format to colorized * CQ: Set pylint source-roots and ignore-paths CQ: Set pylint ignore-paths to ignore libgrass_interface_generator and OBJ.* folders, and ignore Makefiles * Checks: Rename pylint rules that were renamed * Checks: Adjust outdated inline pylint exclusions * Checks: Change pylint folder ignores Checks: Also ignore .pytest_cache folder for pylint * Checks: Disable all failing pylint rules * CI(pylint): Remove rcfile argument from pytest pylint call CI(pylint): Comment out pylint ignore arguments from pytest pylint call * CI(pylint): Do not change into subdirectory for grass and gui * CI(pylint): Run pylint on other files before slower wxGUI * CI(pylint): Only run pylint once for all code * checks: Remove non-modified pylint config * style: Change misplaced docstring to comment in pygrass/rpc/__init__.py * grass.script: Ignore signature-differs pylint warning in array.py * grass.imaging.images2gif: Fix Pylint using-constant-test * grass.jupyter.utils: Fix pylint redefined-variable-type (R0204) of output variable Pylint 3.2.6 error: R0204: Redefinition of output type from bytes to grass.script.utils.KeyValue (redefined-variable-type) Adds typing to the function analyzed, and also to the return type of the gs.parse_key_val() used. * grass.script.db: Close opened file in db_connection * t.unregister: Open file with context handler (SIM115) * Typing improvement * Fix typo of BufferedMapWindow in gui/wxpython/mapdisp/test_mapdisp.py * pylint: Add pylint skip-file directive in generated file wxpython/menustrings.py pylint: Ignore generated file wxpython/menustrings.py * utils: Add timeout to requests.get * grass.script.core: Fix E0606: Possibly using variable 'ps' before assignment (possibly-used-before-assignment) Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/python-code-quality.yml | 44 +- .pylintrc | 656 ----------------- gui/wxpython/.pylintrc | 688 ------------------ gui/wxpython/Makefile | 2 +- gui/wxpython/core/giface.py | 3 - gui/wxpython/datacatalog/tree.py | 1 + gui/wxpython/mapdisp/frame.py | 4 +- gui/wxpython/mapdisp/test_mapdisp.py | 2 +- gui/wxpython/mapwin/decorations.py | 2 +- pyproject.toml | 350 ++++++++- python/.pylintrc | 608 ---------------- python/grass/imaging/images2gif.py | 59 +- python/grass/jupyter/utils.py | 11 +- python/grass/pygrass/rpc/__init__.py | 2 +- .../pygrass/vector/testsuite/test_geometry.py | 2 +- python/grass/script/array.py | 2 + python/grass/script/core.py | 3 +- python/grass/script/db.py | 5 +- python/grass/script/utils.py | 2 +- temporal/t.unregister/t.unregister.py | 21 +- utils/generate_release_notes.py | 2 +- utils/pylintrc.txt | 287 -------- 22 files changed, 426 insertions(+), 2330 deletions(-) delete mode 100644 .pylintrc delete mode 100644 gui/wxpython/.pylintrc delete mode 100644 python/.pylintrc delete mode 100644 utils/pylintrc.txt diff --git a/.github/workflows/python-code-quality.yml b/.github/workflows/python-code-quality.yml index e3b1f768ce6..14d71aa41f5 100644 --- a/.github/workflows/python-code-quality.yml +++ b/.github/workflows/python-code-quality.yml @@ -25,14 +25,14 @@ jobs: env: # renovate: datasource=python-version depName=python - PYTHON_VERSION: "3.10" - MIN_PYTHON_VERSION: "3.8" + PYTHON_VERSION: "3.12" + MIN_PYTHON_VERSION: "3.9" # renovate: datasource=pypi depName=black BLACK_VERSION: "24.10.0" # renovate: datasource=pypi depName=flake8 FLAKE8_VERSION: "7.1.1" # renovate: datasource=pypi depName=pylint - PYLINT_VERSION: "2.12.2" + PYLINT_VERSION: "3.3.2" # renovate: datasource=pypi depName=bandit BANDIT_VERSION: "1.8.0" # renovate: datasource=pypi depName=ruff @@ -156,37 +156,39 @@ jobs: echo "$HOME/install/bin" >> $GITHUB_PATH - name: Run Pylint on grass package + # Until slower checks (like similarity) are reenabled, running in one step is faster + if: false run: | export PYTHONPATH=`grass --config python_path`:$PYTHONPATH export LD_LIBRARY_PATH=$(grass --config path)/lib:$LD_LIBRARY_PATH - cd python pylint --persistent=no --py-version=${{ env.MIN_PYTHON_VERSION }} --jobs=$(nproc) grass + - name: Run Pylint on other files using pytest + # Until slower checks (like similarity) are reenabled, running in one step is faster + if: false + run: | + pipx inject --include-apps pylint pytest + pipx inject pylint pytest-pylint pytest-github-actions-annotate-failures pytest-timeout + export PYTHONPATH=`grass --config python_path`:$PYTHONPATH + export LD_LIBRARY_PATH=$(grass --config path)/lib:$LD_LIBRARY_PATH + pytest --pylint -m pylint --pylint-jobs=$(nproc) \ + --pylint-ignore-patterns="${{ env.PylintIgnore }}" + env: + PylintIgnore: "python/.*,gui/.*" + - name: Run Pylint on wxGUI + # Until slower checks (like similarity) are reenabled, running in one step is faster + if: false run: | export PYTHONPATH=`grass --config python_path`:$PYTHONPATH export LD_LIBRARY_PATH=$(grass --config path)/lib:$LD_LIBRARY_PATH - cd gui/wxpython - pylint --persistent=no --py-version=${{ env.MIN_PYTHON_VERSION }} --jobs=$(nproc) * + pylint --persistent=no --py-version=${{ env.MIN_PYTHON_VERSION }} --jobs=$(nproc) gui - - name: Run Pylint on other files using pytest + - name: Run Pylint all in one pass run: | - pipx inject --include-apps pylint pytest==7.4.4 - pipx inject pylint pytest-pylint==0.19 pytest-github-actions-annotate-failures - echo "::warning file=.github/workflows/python-code-quality.yml,line=149,col=42,endColumn=48::\ - Temporarily downgraded pytest-pylint and pytest to allow merging other PRs.\ - The errors reported with a newer version seem legitimite and should be fixed \ - (2023-10-18, see https://github.com/OSGeo/grass/pull/3205)\ - (2024-01-28, see https://github.com/OSGeo/grass/issues/3380)" export PYTHONPATH=`grass --config python_path`:$PYTHONPATH export LD_LIBRARY_PATH=$(grass --config path)/lib:$LD_LIBRARY_PATH - pytest --pylint -m pylint --pylint-rcfile=.pylintrc --pylint-jobs=$(nproc) \ - --pylint-ignore-patterns="${{ env.PylintIgnore }}" - env: - PylintIgnore: "python/.*,gui/wxpython/.*,doc/.*,man/.*,utils/.*,locale/.*,raster/.*,\ - imagery/.*,scripts/r.in.wms/wms_drv.py,scripts/g.extension/g.extension.py,\ - temporal/t.rast.accdetect/t.rast.accdetect.py,temporal/t.rast.accumulate/t.rast.accumulate.py,\ - scripts/d.rast.edit/d.rast.edit.py" + pylint --persistent=no --py-version=${{ env.MIN_PYTHON_VERSION }} --jobs=$(nproc) . - name: Test compiling example modules run: | diff --git a/.pylintrc b/.pylintrc deleted file mode 100644 index b260c0fd401..00000000000 --- a/.pylintrc +++ /dev/null @@ -1,656 +0,0 @@ -[MASTER] - -# 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 to be exceeded before program exits with error. -fail-under=10.0 - -# Files or directories to be skipped. They should be base names, not paths. -ignore=CVS - -# Add files or directories matching the regex patterns to the ignore-list. The -# regex matches against paths and can be in Posix or Windows format. -ignore-paths=python/.*, - gui/wxpython/.*, - .*/testsuite/.*, - -# Files or directories matching the regex patterns are skipped. The regex -# matches against base names, not paths. -ignore-patterns= - -# 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. -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= - -# Pickle collected data for later comparisons. -persistent=yes - -# Minimum Python version to use for version dependent checks. Will default to -# the version used to run pylint. -py-version=3.8 - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# 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=raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - deprecated-pragma, - fixme, - missing-module-docstring, - missing-function-docstring, - missing-class-docstring, - import-outside-toplevel, - useless-import-alias, - consider-using-from-import, - wrong-import-order, - wrong-import-position, - import-error, - no-name-in-module, - no-member, - unused-import, - unused-variable, - unused-argument, - expression-not-assigned, - self-assigning-variable, - unspecified-encoding, - no-self-use, - inconsistent-return-statements, - invalid-name, - broad-except, - bare-except, - raise-missing-from, - undefined-variable, - undefined-loop-variable, - cell-var-from-loop, - not-callable, - global-variable-undefined, - global-statement, - global-variable-not-assigned, - attribute-defined-outside-init, - line-too-long, - eval-used, - no-value-for-parameter, - deprecated-method, - deprecated-argument, - anomalous-backslash-in-string, - redefined-builtin, - redefined-outer-name, - useless-object-inheritance, - useless-return, - consider-using-f-string, - consider-iterating-dictionary, - consider-using-dict-items, - consider-using-enumerate, - consider-using-in, - consider-using-with, - consider-using-generator, - consider-using-max-builtin, - consider-using-min-builtin, - consider-using-get, - unnecessary-comprehension, - unnecessary-pass, - super-with-arguments, - unidiomatic-typecheck, - use-implicit-booleaness-not-comparison, - no-else-break, - no-else-return, - no-else-raise, - simplifiable-if-statement, - use-maxsplit-arg, - use-list-literal, - use-a-generator, - unneeded-not, - chained-comparison, - use-symbolic-message-instead - -# 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=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'error', 'warning', 'refactor', and 'convention' -# 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=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, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=7 - -# 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 - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: fr_MC (myspell), fr_CA -# (myspell), fr_BE (myspell), fr_LU (myspell), fr_CH (myspell), fr_FR -# (myspell), ar (myspell), es_CR (myspell), de_CH_frami (myspell), es_EC -# (myspell), ar_YE (myspell), en_CA (myspell), ar_BH (myspell), ar_IN -# (myspell), ar_TN (myspell), en_ZA (myspell), de_DE_frami (myspell), ar_SY -# (myspell), ar_IQ (myspell), ar_LB (myspell), ar_KW (myspell), ru_RU -# (myspell), es_BO (myspell), en_GB (myspell), ar_SD (myspell), de_DE -# (myspell), es_CU (myspell), es_PA (myspell), ar_EG (myspell), es_HN -# (myspell), de_CH (myspell), es_NI (myspell), es_AR (myspell), es_ES -# (myspell), ar_SA (myspell), es_VE (myspell), de_AT_frami (myspell), it_IT -# (myspell), ar_OM (myspell), ar_DZ (myspell), it_CH (myspell), es_MX -# (myspell), es_PY (myspell), en_AU (myspell), es_DO (myspell), es_SV -# (myspell), es_PR (myspell), es_GT (myspell), ar_LY (myspell), ar_JO -# (myspell), en_US (myspell), de_AT (myspell), es_PE (myspell), ar_QA -# (myspell), es_CL (myspell), pt_BR (myspell), ar_AE (myspell), pt_PT -# (myspell), es_CO (myspell), es_UY (myspell), ar_MA (myspell), fr (myspell), -# es_US (myspell), en (aspell). -spelling-dict= - -# List of comma separated words that should be considered directives if they -# appear and 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=no - - -[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= - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no - - -[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. -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# 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=yes - -# 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 - -# List of module names for which member attributes should not be checked -# (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= - -# 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=yes - -# 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 ignore-mixin- -# members is set to 'yes' -mixin-class-rgx=.*[Mm]ixin - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -# Translation function is (unfortunately) defined as a buildin. -additional-builtins=_ - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# 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). -# On top of the defaults, simple unused is also permissible. -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=past.builtins,future.builtins,builtins,io - - -[SIMILARITIES] - -# Comments are removed from the similarity computation -ignore-comments=yes - -# Docstrings are removed from the similarity computation -ignore-docstrings=yes - -# Imports are removed from the similarity computation -ignore-imports=no - -# Signatures are removed from the similarity computation -ignore-signatures=no - -# Minimum lines number of a similarity. -# Matching only larger chunks of code, not the default 4 lines. -min-similarity-lines=50 - - -[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 - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# 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. -#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. -#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. -#class-const-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-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. -#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. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - x, - y, - z, - 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=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-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. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-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 - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. -#variable-rgx= - - -[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=2000 - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# 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=no - -# 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= - - -[CLASSES] - -# Warn about protected attribute access inside special methods -check-protected-access-in-special-methods=no - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# 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=cls - - -[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=15 - -# Maximum number of attributes for a class (see R0902). -max-attributes=25 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=8 - -# Maximum number of branch for function / method body. -max-branches=44 - -# Maximum number of locals for function / method body. -max-locals=50 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# 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=9 - -# Maximum number of statements in function / method body. -max-statements=220 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=1 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception diff --git a/gui/wxpython/.pylintrc b/gui/wxpython/.pylintrc deleted file mode 100644 index 7bfe0db218d..00000000000 --- a/gui/wxpython/.pylintrc +++ /dev/null @@ -1,688 +0,0 @@ -[MASTER] - -# 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 to be exceeded before program exits with error. -fail-under=10.0 - -# Files or directories to be skipped. They should be base names, not paths. -ignore=CVS - -# Add files or directories matching the regex patterns to the ignore-list. The -# regex matches against paths and can be in Posix or Windows format. -ignore-paths=core/.*, - dbmgr/.*, - docs/.*, # Sphinx config files. - gcp/.*, - gmodeler/.*, - gui_core/.*, - iclass/.*, - image2target/.*, - iscatt/.*, - lmgr/.*, # Close to being compliant. - location_wizard/.*, # Close to being compliant. - mapdisp/.*, # Close to being compliant. - mapswipe/.*, # Close to being compliant. - mapwin/.*, # Close to being compliant. - modules/.*, # Close to being compliant. - photo2image/.*, - nviz/.*, - psmap/.*, - tplot/.*, # Close to being compliant. - vdigit/.*, - vnet/.*, # Close to being compliant. - web_services/.*, # Close to being compliant. - wxplot/.*, # Close to being compliant. - xml/, # XML files only. - menustrings.py, - wxgui.py, - states.txt, - .*Makefile, - .*README.*, - - -# Files or directories matching the regex patterns are skipped. The regex -# matches against base names, not paths. -ignore-patterns= - -# 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. -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= - -# Pickle collected data for later comparisons. -persistent=yes - -# Minimum Python version to use for version dependent checks. Will default to -# the version used to run pylint. -py-version=3.8 - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# 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 reenable 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=raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - deprecated-pragma, - fixme, - unnecessary-lambda, - # Import issues - import-error, - wrong-import-position, - ungrouped-imports, - wrong-import-order, - unused-import, - import-outside-toplevel, - consider-using-from-import, - no-name-in-module, - # End of import issues - missing-function-docstring, - missing-module-docstring, - missing-class-docstring, - useless-object-inheritance, - attribute-defined-outside-init, - no-self-use, - unused-variable, - possibly-unused-variable, - unused-argument, - expression-not-assigned, - unnecessary-pass, - pointless-string-statement, - unreachable, - self-assigning-variable, - redefined-builtin, - redefined-outer-name, - cell-var-from-loop, - undefined-loop-variable, - unspecified-encoding, - arguments-differ, - arguments-renamed, - no-value-for-parameter, - redundant-keyword-arg, - protected-access, - inconsistent-return-statements, - too-many-function-args, - global-statement, - global-variable-not-assigned, - global-variable-undefined, - dangerous-default-value, - broad-except, - bare-except, - invalid-envvar-default, - anomalous-backslash-in-string, - # Here we start consider... warnings - consider-using-enumerate, - consider-using-set-comprehension, - consider-using-in, - consider-using-dict-items, - consider-iterating-dictionary, - consider-using-f-string, - unnecessary-comprehension, - simplifiable-if-expression, - simplifiable-if-statement, - use-list-literal, - use-dict-literal, - use-a-generator, - use-implicit-booleaness-not-len, - no-else-return, - no-else-raise, - no-else-continue, - raise-missing-from, - super-with-arguments, - useless-return, - # Here we end consider... warnings - consider-using-with, # Resource-related warning - use-symbolic-message-instead - -# 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=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'error', 'warning', 'refactor', and 'convention' -# 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=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, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=10 - -# 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 - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: fr_MC (myspell), fr_CA -# (myspell), fr_BE (myspell), fr_LU (myspell), fr_CH (myspell), fr_FR -# (myspell), ar (myspell), es_CR (myspell), de_CH_frami (myspell), es_EC -# (myspell), ar_YE (myspell), en_CA (myspell), ar_BH (myspell), ar_IN -# (myspell), ar_TN (myspell), en_ZA (myspell), de_DE_frami (myspell), ar_SY -# (myspell), ar_IQ (myspell), ar_LB (myspell), ar_KW (myspell), ru_RU -# (myspell), es_BO (myspell), en_GB (myspell), ar_SD (myspell), de_DE -# (myspell), es_CU (myspell), es_PA (myspell), ar_EG (myspell), es_HN -# (myspell), de_CH (myspell), es_NI (myspell), es_AR (myspell), es_ES -# (myspell), ar_SA (myspell), es_VE (myspell), de_AT_frami (myspell), it_IT -# (myspell), ar_OM (myspell), ar_DZ (myspell), it_CH (myspell), es_MX -# (myspell), es_PY (myspell), en_AU (myspell), es_DO (myspell), es_SV -# (myspell), es_PR (myspell), es_GT (myspell), ar_LY (myspell), ar_JO -# (myspell), en_US (myspell), de_AT (myspell), es_PE (myspell), ar_QA -# (myspell), es_CL (myspell), pt_BR (myspell), ar_AE (myspell), pt_PT -# (myspell), es_CO (myspell), es_UY (myspell), ar_MA (myspell), fr (myspell), -# es_US (myspell), en (aspell). -spelling-dict= - -# List of comma separated words that should be considered directives if they -# appear and 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=no - - -[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= - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no - - -[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. -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# 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=yes - -# 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,main_window.page.MainPageBase - -# List of module names for which member attributes should not be checked -# (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=wx - -# 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=yes - -# 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 ignore-mixin- -# members is set to 'yes' -mixin-class-rgx=.*[Mm]ixin - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -# Translation function is (unfortunately) defined as a buildin. -additional-builtins=_ - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# 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). -# On top of the defaults, simple unused is also permissible. -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_|^event$ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=past.builtins,future.builtins,builtins,io - - -[SIMILARITIES] - -# Comments are removed from the similarity computation -ignore-comments=yes - -# Docstrings are removed from the similarity computation -ignore-docstrings=yes - -# Imports are removed from the similarity computation -ignore-imports=no - -# Signatures are removed from the similarity computation -ignore-signatures=no - -# Minimum lines number of a similarity. -# Matching only larger chunks of code, not the default 4 lines. -min-similarity-lines=10 - - -[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 - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=any - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=any - -# Regular expression matching correct attribute names. Overrides attr-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. -#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. -#class-const-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=any - -# Regular expression matching correct constant names. Overrides const-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=any - -# Regular expression matching correct function names. Overrides function- -# naming-style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - x, - y, - z, - 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=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=any - -# Regular expression matching correct method names. Overrides method-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. -#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 - -# Naming style matching correct variable names. -variable-naming-style=any - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. -#variable-rgx= - - -[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=120 - -# Maximum number of lines in a module. -max-module-lines=3000 - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# 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=no - -# 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= - - -[CLASSES] - -# Warn about protected attribute access inside special methods -check-protected-access-in-special-methods=no - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# 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=cls - - -[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. -# We tend to have function with more arguments than the default 5 -# and that doesn't seem to be the problem of our code. -max-args=25 - -# Maximum number of attributes for a class (see R0902). -max-attributes=40 - -# 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=30 - -# Maximum number of locals for function / method body. -max-locals=40 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=120 - -# Maximum number of return / yield for function / method body. -max-returns=10 - -# Maximum number of statements in function / method body. -max-statements=100 - -# Minimum number of public methods for a class (see R0903). -# It is okay to inherit and have only __init__. -min-public-methods=0 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception diff --git a/gui/wxpython/Makefile b/gui/wxpython/Makefile index b1785f75dc0..a661e593bfc 100644 --- a/gui/wxpython/Makefile +++ b/gui/wxpython/Makefile @@ -49,7 +49,7 @@ xml/module_tree_menudata.xml: core/toolboxes.py $(call run_grass,$(PYTHON) $< "validate" $@) menustrings.py: core/menutree.py $(DSTDIR)/xml/menudata.xml $(DSTDIR)/xml/module_tree_menudata.xml $(DSTDIR)/xml/menudata_modeler.xml $(DSTDIR)/xml/menudata_psmap.xml - @echo "# This is a generated file.\n" > $@ + @echo "# This is a generated file.\n# pylint: skip-file\n" > $@ $(call run_grass,$(PYTHON) $< "manager" >> $@) $(call run_grass,$(PYTHON) $< "module_tree" >> $@) $(call run_grass,$(PYTHON) $< "modeler" >> $@) diff --git a/gui/wxpython/core/giface.py b/gui/wxpython/core/giface.py index 1b17a3e5932..af7accf19b3 100644 --- a/gui/wxpython/core/giface.py +++ b/gui/wxpython/core/giface.py @@ -22,9 +22,6 @@ from grass.pydispatch.signal import Signal -# to disable Abstract class not referenced -# pylint: disable=R0921 - class Notification: """Enum class for notifications suggestions. diff --git a/gui/wxpython/datacatalog/tree.py b/gui/wxpython/datacatalog/tree.py index bf06fd11ab8..76aee7e5eff 100644 --- a/gui/wxpython/datacatalog/tree.py +++ b/gui/wxpython/datacatalog/tree.py @@ -1892,6 +1892,7 @@ def done(event): gs.try_remove(event.userData) for i in range(len(self.selected_layer)): + cmd: list[str] = [] if self.selected_layer[i].data["type"] == "raster": cmd = ["r.info"] elif self.selected_layer[i].data["type"] == "vector": diff --git a/gui/wxpython/mapdisp/frame.py b/gui/wxpython/mapdisp/frame.py index a7622616b34..39916a11861 100644 --- a/gui/wxpython/mapdisp/frame.py +++ b/gui/wxpython/mapdisp/frame.py @@ -1158,7 +1158,9 @@ def OnQuery(self, event): # change the cursor self.MapWindow.SetNamedCursor("cross") - def AddTmpVectorMapLayer(self, name, cats, useId=False, addLayer=True): + def AddTmpVectorMapLayer( + self, name, cats, useId: bool = False, addLayer: bool = True + ): """Add temporal vector map layer to map composition :param name: name of map layer diff --git a/gui/wxpython/mapdisp/test_mapdisp.py b/gui/wxpython/mapdisp/test_mapdisp.py index 1494988fafb..786be1fc85c 100755 --- a/gui/wxpython/mapdisp/test_mapdisp.py +++ b/gui/wxpython/mapdisp/test_mapdisp.py @@ -44,7 +44,7 @@ # %end """ -Module to run test map window (BufferedWidnow) and map display (MapFrame). +Module to run test map window (BufferedMapWindow) and map display (MapFrame). @author Vaclav Petras """ diff --git a/gui/wxpython/mapwin/decorations.py b/gui/wxpython/mapwin/decorations.py index 9c643d17752..57da7ec2265 100644 --- a/gui/wxpython/mapwin/decorations.py +++ b/gui/wxpython/mapwin/decorations.py @@ -301,7 +301,7 @@ def GetPlacement(self, screensize): else: b, t, l, r = ( float(number) for number in param.split("=")[1].split(",") - ) # pylint: disable-msg=W0612 + ) # pylint: disable=W0612 x = int((l / 100.0) * screensize[0]) y = int((1 - t / 100.0) * screensize[1]) diff --git a/pyproject.toml b/pyproject.toml index 33570645399..5ca5276b677 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,11 @@ [project] name = "grass" requires-python = ">=3.9" +# *GRASS TODO: keep in sync with MIN_PYTHON_VERSION supported* [tool.black] -required-version = '24' line-length = 88 +required-version = '24' target-version = ['py39', 'py310', 'py311', 'py312', 'py313'] # 'extend-exclude' excludes files or directories in addition to the defaults extend-exclude = ''' @@ -277,8 +278,7 @@ ignore = [ "gui/wxpython/gmodeler/*.py" = ["SIM115"] "gui/wxpython/gui_core/*.py" = ["SIM115"] "gui/wxpython/gui_core/dialogs.py" = ["PTH208"] -"gui/wxpython/iclass/frame*.py" = ["SIM115"] -"gui/wxpython/iclass/frame.py" = ["FLY002"] +"gui/wxpython/iclass/frame.py" = ["FLY002", "SIM115"] "gui/wxpython/iclass/statistics.py" = ["A005"] "gui/wxpython/icons/grass_icons.py" = ["PTH208"] "gui/wxpython/image2target/*.py" = ["SIM115"] @@ -302,8 +302,7 @@ ignore = [ "gui/wxpython/vdigit/mapwindow.py" = ["SIM115"] "gui/wxpython/vnet/*.py" = ["SIM115"] "gui/wxpython/web_services/dialogs.py" = ["SIM115"] -"gui/wxpython/wxplot/profile*.py" = ["SIM115"] -"gui/wxpython/wxplot/profile.py" = ["A005"] +"gui/wxpython/wxplot/profile.py" = ["A005", "SIM115"] "imagery/i.atcorr/create_iwave.py" = ["SIM115"] "lib/imagery/testsuite/test_imagery_signature_management.py" = ["SIM115"] "lib/imagery/testsuite/test_imagery_sigsetfile.py" = ["FURB152"] @@ -398,8 +397,6 @@ ignore = [ "grass.temporal" = "tgis" [tool.pytest.ini_options] -minversion = "6.0" -python_files = "*/tests/*_test.py */tests/test_*.py" addopts = """ --ignore-glob='dist.*' --ignore-glob='bin.*' @@ -408,11 +405,13 @@ addopts = """ --doctest-glob='*doctest*.txt' --ignore='raster/r.category/test_rcategory_doctest.txt' """ -timeout = 300 markers = [ "slow: marks tests as slow (deselect with '-m \"not slow\"')", "needs_solo_run: marks tests that must be run without any other tests running in parallel", ] +minversion = "6.0" +python_files = "*/tests/*_test.py */tests/test_*.py" +timeout = 300 [tool.bandit] @@ -423,3 +422,338 @@ exclude_dirs = [ "utils/test_generate_last_commit_file.py", ] skips = ["B324", "B110", "B101", "B112", "B311", "B404", "B603"] + + +[tool.pylint.main] + +# Files or directories to be skipped. They should be base names, not paths. +ignore = ["CVS", ".git", ".ruff_cache", ".pytest_cache"] + +# 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 = [ + "bin[.].*", + "dist[.].*", + "gui/wxpython/menustrings.py", + "python/libgrass_interface_generator", +] + +# 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 = ["^\\.#", "OBJ[.].*", "Makefile"] + + +# 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 = 0 + +# 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. +# *GRASS modified: default 'limit-inference-results = 100'* +limit-inference-results = 10 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins = [ + "pylint.extensions.bad_builtin", + "pylint.extensions.no_self_use", + "pylint.extensions.redefined_variable_type", +] + + +# Minimum Python version to use for version dependent checks. Will default to the +# version used to run pylint. +# *GRASS modified* +# *GRASS TODO: keep in sync with MIN_PYTHON_VERSION supported* +py-version = "3.9" + +# 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 = ["python", "gui/wxpython"] + + +[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. +# *GRASS modified: default 5, (see R0913)* +# *GRASS TODO: Try to reduce this value* +max-args = 15 + +# Maximum number of attributes for a class (see R0902). +# *GRASS modified: default 7* +# *GRASS TODO: Try to reduce this value* +max-attributes = 25 + +# Maximum number of boolean expressions in an if statement (see R0916). +# *GRASS modified: default 5* +# *GRASS TODO: Try to reduce this value* +max-bool-expr = 8 + +# Maximum number of branch for function / method body. +# *GRASS modified: default 12, (see R0912)* +# *GRASS TODO: Try to reduce this value* +max-branches = 44 + +# Maximum number of locals for function / method body. +# *GRASS modified: default 15, (see R0914)* +# *GRASS TODO: Try to reduce this value* +max-locals = 50 + +# # Maximum number of parents for a class (see R0901). +# max-parents = 7 + +# Maximum number of positional arguments for function / method. +# *GRASS modified: default 5, (see R0917)* +# *GRASS TODO: Try to reduce this value* +max-positional-arguments = 7 + +# Maximum number of public methods for a class (see R0904). +# max-public-methods = 20 + +# Maximum number of return / yield for function / method body. +# *GRASS modified: default 6, (see R0911)* +# *GRASS TODO: Try to reduce this value* +max-returns = 9 + +# Maximum number of statements in function / method body. +# *GRASS modified: default 50, (see R0915)* +# *GRASS TODO: Try to reduce this value* +max-statements = 220 + +# Minimum number of public methods for a class (see R0903). +# *GRASS modified: default 2, (see R0915)* +# *GRASS TODO: Try to increase this value* +min-public-methods = 1 + + +[tool.pylint.format] + +# Maximum number of lines in a module. +# *GRASS modified: default 1000, (see C0302)* +# *GRASS TODO: Try to reduce this value* +max-module-lines = 2000 + + +[tool.pylint."messages control"] +# 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 = [ + # *GRASS: The 10 following rules are disabled by default* + "bad-inline-option", + "deprecated-pragma", + "file-ignored", + "locally-disabled", + "raw-checker-failed", + "suppressed-message", + "use-implicit-booleaness-not-comparison-to-string", + "use-implicit-booleaness-not-comparison-to-zero", + "use-symbolic-message-instead", + "useless-suppression", + # *GRASS modified: The following rules are added to the disabled list* + # *GRASS TODO: Try to ignore less rules* + "C0103", # Constant name "%s" doesn't conform to UPPER_CASE naming style (invalid-name) + "C0104", # Disallowed name "foo" (disallowed-name) + "C0112", # Empty %s docstring (empty-docstring) + "C0114", # Missing module docstring (missing-module-docstring) + "C0115", # Missing class docstring (missing-class-docstring) + "C0116", # Missing function or method docstring (missing-function-docstring) + "C0117", # Consider changing "not self.optype == 'boolean'" to "self.optype != 'boolean'" (unnecessary-negation) + "C0123", # Use isinstance() rather than type() for a typecheck. (unidiomatic-typecheck) + "C0200", # Consider using enumerate instead of iterating with range and len (consider-using-enumerate) + "C0201", # Consider iterating the dictionary directly instead of calling .keys() (consider-iterating-dictionary) + "C0204", # Metaclass class method %s should have %s as first argument (bad-mcs-classmethod-argument) + "C0206", # Consider iterating with .items() (consider-using-dict-items) + "C0207", # Use str(self.start).split(' ', maxsplit=1)[0] instead (use-maxsplit-arg) + "C0209", # Formatting a regular string which could be an f-string (consider-using-f-string) + "C0301", # Line too long (line-too-long) + "C0302", # Too many lines in module (%s/%s) (too-many-lines) + "C0325", # Unnecessary parens after %r keyword (superfluous-parens) + "C0411", # Standard library/third-party library import should be placed before local imports (wrong-import-order) + "C0412", # Imports from package %s are not grouped (ungrouped-imports) + "C0413", # Import "%s" should be placed at the top of the module (wrong-import-position) + "C0415", # (import-outside-toplevel) + "C1802", # Do not use `len(SEQUENCE)` without comparison to determine if a sequence is empty (use-implicit-booleaness-not-len) + "C1803", # "%s" can be simplified to "%s", if it is strictly a sequence, as an empty %s is falsey (use-implicit-booleaness-not-comparison) + "C2801", # Unnecessarily calls dunder method %s. %s. (unnecessary-dunder-call) + "E0102", # %s already defined line %s (function-redefined) + "E0203", # Access to member %r before its definition line %s (access-member-before-definition) + "E0213", # Method %r should have "self" as first argument (no-self-argument) + "E0401", # Unable to import %r (import-error) + "E0601", # Using variable %r before assignment (used-before-assignment) + "E0602", # Undefined variable %r (undefined-variable) + "E0606", # Possibly using variable %r before assignment (possibly-used-before-assignment) + "E0611", # No name %r in module %r (no-name-in-module) + "E0633", # Attempting to unpack a non-sequence%s (unpacking-non-sequence) + "E0704", # The raise statement is not inside an except clause (misplaced-bare-raise) + "E1003", # Bad first argument %r given to super() (bad-super-call) + "E1101", # Instance of %r has no %r member (no-member) + "E1102", # %s is not callable (not-callable) + "E1111", # Assigning result of a function call, where the function has no return (assignment-from-no-return) + "E1120", # No value for argument %r in constructor call (no-value-for-parameter) + "E1121", # (too-many-function-args) + "E1123", # Unexpected keyword argument %r in %s call (unexpected-keyword-arg) + "E1124", # Argument %r passed by position and keyword in %s call (redundant-keyword-arg) + "E1126", # Sequence index is not an int, slice, or instance with __index__ (invalid-sequence-index) + "E1128", # Assigning result of a function call, where the function returns None (assignment-from-none) + "E1133", # Non-iterable value %s is used in an iterating context (not-an-iterable) + "E1135", # Value '%s' doesn't support membership test (unsupported-membership-test) + "E1136", # Value '%s' is unsubscriptable (unsubscriptable-object) + "E1137", # %r does not support item assignment (unsupported-assignment-operation) + "E1307", # Argument %r does not match format type %r (bad-string-format-type) + "R0204", # Redefinition of %s type from %s to %s (redefined-variable-type) + "R0401", # Cyclic import (%s) (cyclic-import) + "R0801", # Similar lines in %s files %s (duplicate-code) + "R0901", # (too-many-ancestors) + "R0902", # (too-many-instance-attributes) + "R0903", # (too-few-public-methods) + "R0904", # (too-many-public-methods) + "R0911", # (too-many-return-statements) + "R0912", # (too-many-branches) + "R0913", # (too-many-arguments) + "R0914", # (too-many-locals) + "R0915", # (too-many-statements) + "R0916", # (too-many-boolean-expressions) + "R0917", # (too-many-positional-arguments) + "R1702", # (too-many-nested-blocks) + "R1703", # The if statement can be replaced with %s (simplifiable-if-statement) + "R1704", # Redefining argument with the local name %r (redefined-argument-from-local) + "R1705", # Unnecessary "else" after "return", remove the "else" and de-indent the code inside it (no-else-return) + "R1710", # Either all return statements in a function should return an expression, or none of them should. (inconsistent-return-statements) + "R1711", # Useless return at end of function or method (useless-return) + "R1712", # Consider using tuple unpacking for swapping variables (consider-swap-variables) + "R1713", # Consider using str.join(sequence) for concatenating strings from an iterable (consider-using-join) + "R1714", # Consider merging these comparisons with 'in' by using '%s %sin (%s)'. Use a set instead if elements are hashable. (consider-using-in) + "R1715", # Consider using dict.get for getting values from a dict if a key is present or a default if not (consider-using-get) + "R1716", # Simplify chained comparison between the operands (chained-comparison) + "R1721", # Unnecessary use of a comprehension, use %s instead. (unnecessary-comprehension) + "R1724", # Unnecessary "%s" after "continue", %s (no-else-continue) + "R1727", # Boolean condition '%s' will always evaluate to '%s' (condition-evals-to-constant) + "R1732", # Consider using 'with' for resource-allocating operations (consider-using-with) + "R1733", # Unnecessary dictionary index lookup, use '%s' instead (unnecessary-dict-index-lookup) + "R1735", # Consider using '{**item}' instead of a call to 'dict'. (use-dict-literal) + "R6301", # Method could be a function (no-self-use) + "RP0401", # Report: Imports checker: External dependencies + "RP0801", # Report: Similarities: Duplication + "W0101", # Unreachable code (unreachable) + "W0102", # Dangerous default value %s as argument (dangerous-default-value) + "W0104", # Statement seems to have no effect (pointless-statement) + "W0106", # Expression "%s" is assigned to nothing (expression-not-assigned) + "W0108", # Lambda may not be necessary (unnecessary-lambda) + "W0123", # Use of eval (eval-used) + "W0125", # Using a conditional statement with a constant value (using-constant-test) + "W0133", # Exception statement has no effect (pointless-exception-statement) + "W0141", # Used builtin function %s (bad-builtin) + "W0201", # Attribute %r defined outside __init__(attribute-defined-outside-init) + "W0212", # Access to a protected member %s of a client class (protected-access) + "W0221", # (arguments-differ) + "W0222", # Signature differs from %s %r method (signature-differs) + "W0223", # Method %r is abstract in class %r but is not overridden in child class %r (abstract-method) + "W0231", # __init__ method from base class %r is not called (super-init-not-called) + "W0237", # (arguments-renamed) + "W0246", # Useless parent or super() delegation in method %r (useless-parent-delegation) + "W0401", # Wildcard import %s (wildcard-import) + "W0404", # Reimport %r (imported line %s) (reimported) + "W0511", # (fixme) + "W0601", # Global variable %r undefined at the module level (global-variable-undefined) + "W0602", # Using global for %r but no assignment is done (global-variable-not-assigned) + "W0603", # Using the global statement (global-statement) + "W0604", # Using the global statement at the module level (global-at-module-level) + "W0611", # (unused-import) + "W0612", # Unused variable %r (unused-variable) + "W0613", # Unused argument %r (unused-argument) + "W0614", # Unused import(s) %s from wildcard import of %s (unused-wildcard-import) + "W0621", # Redefining name %r from outer scope (line %s) (redefined-outer-name) + "W0621", # Redefining name %r from outer scope (line %s) (redefined-outer-name) + "W0622", # Redefining built-in %r (redefined-builtin) + "W0631", # Using possibly undefined loop variable %r (undefined-loop-variable) + "W0632", # Possible unbalanced tuple unpacking with sequence %s: left side has %d label%s, right side has %d value%s (unbalanced-tuple-unpacking) + "W0640", # Cell variable %s defined in loop (cell-var-from-loop) + "W0641", # Possibly unused variable %r (possibly-unused-variable) + "W0702", # No exception type(s) specified (bare-except) + "W0707", # Consider explicitly re-raising using %s'%s from %s' (raise-missing-from) + "W0716", # Invalid exception operation. %s (wrong-exception-operation) + "W0718", # Catching too general exception Exception (broad-exception-caught) + "W0719", # Raising too general exception: %s (broad-exception-raised) + "W1113", # Keyword argument before variable positional arguments list in the definition of %s function (keyword-arg-before-vararg) + "W1114", # Positional arguments appear to be out of order (arguments-out-of-order) + "W1308", # Duplicate string formatting argument %r, consider passing as named argument (duplicate-string-formatting-argument) + "W1503", # Redundant use of %s with constant value %r (redundant-unittest-assert) + "W1508", # %s default type is %s. Expected str or None. (invalid-envvar-default) + "W1510", # 'subprocess.run' used without explicitly defining the value for 'check'. (subprocess-run-check) + "W1514", # Using open without explicitly specifying an encoding (unspecified-encoding) + "W4701", # Iterated list '%s' is being modified inside for loop body, consider iterating through a copy of it instead. (modified-iterating-list) + "W4901", # Deprecated module %r (deprecated-module) + "W4902", # Using deprecated method %s (deprecated-method) + # "RP0402", # Report: Imports checker: Modules dependencies graph + + "similarities", # too long to run +] + +# 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 = ["deprecated-pragma"] + + +[tool.pylint.refactoring] +# Maximum number of nested blocks for function / method body +# *GRASS modified: default 5, (see R1702)* +# *GRASS TODO: Try to reduce this value* +max-nested-blocks = 7 + + +[tool.pylint.reports] +# 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 = "colorized" + +# Tells whether to display a full report or only the messages. +reports = true + +[tool.pylint.similarities] +# Minimum lines number of a similarity. +# *GRASS modified: default 4, (see R0801)* +# *GRASS TODO: Try to reduce this value* +# *GRASS justification: Matching only larger chunks of code, not the default 4 lines.* +min-similarity-lines = 50 + +[tool.pylint.variables] +# List of additional names supposed to be defined in builtins. Remember that you +# should avoid defining new builtins when possible. +# *GRASS modified: default '# additional-builtins ='* +# *GRASS justification: Translation function is (unfortunately) defined as a builtin.* +# *GRASS TODO: Find another pattern for translation that allows to use _ as a discard variable and other* +additional-builtins = ["_"] + + +[tool.pyright] +exclude = ["**/__pycache__", "**/OBJ.*", "bin.*/**", "dist.*/**"] +include = ["python"] + +# Set extraPath to the output of $(grass --config python_path) + +# *GRASS modified* +# *GRASS TODO: keep in sync with MIN_PYTHON_VERSION supported* +pythonVersion = "3.9" diff --git a/python/.pylintrc b/python/.pylintrc deleted file mode 100644 index 0df20a6e3ba..00000000000 --- a/python/.pylintrc +++ /dev/null @@ -1,608 +0,0 @@ -[MASTER] - -# 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 to be exceeded before program exits with error. -fail-under=10.0 - -# Files or directories to be skipped. They should be base names, not paths. -ignore=CVS - -# Add files or directories matching the regex patterns to the ignore-list. The -# regex matches against paths and can be in Posix or Windows format. -ignore-paths=grass/temporal/.*, - grass/script/.*, - grass/gunittest/.*, - grass/pydispatch/.*, - grass/pygrass/.*, - grass/imaging/.*, - grass/semantic_label/.*, - grass/grassdb/.*, - grass/utils/.*, - grass/exceptions/.*, - grass/app/.*, - - -# Files or directories matching the regex patterns are skipped. The regex -# matches against base names, not paths. -ignore-patterns= - -# 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. -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= - -# Pickle collected data for later comparisons. -persistent=yes - -# Minimum Python version to use for version dependent checks. Will default to -# the version used to run pylint. -py-version=3.8 - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# 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=raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - deprecated-pragma, - use-symbolic-message-instead, - duplicate-code - -# 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=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'error', 'warning', 'refactor', and 'convention' -# 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=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, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[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 - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: fr_MC (myspell), fr_CA -# (myspell), fr_BE (myspell), fr_LU (myspell), fr_CH (myspell), fr_FR -# (myspell), ar (myspell), es_CR (myspell), de_CH_frami (myspell), es_EC -# (myspell), ar_YE (myspell), en_CA (myspell), ar_BH (myspell), ar_IN -# (myspell), ar_TN (myspell), en_ZA (myspell), de_DE_frami (myspell), ar_SY -# (myspell), ar_IQ (myspell), ar_LB (myspell), ar_KW (myspell), ru_RU -# (myspell), es_BO (myspell), en_GB (myspell), ar_SD (myspell), de_DE -# (myspell), es_CU (myspell), es_PA (myspell), ar_EG (myspell), es_HN -# (myspell), de_CH (myspell), es_NI (myspell), es_AR (myspell), es_ES -# (myspell), ar_SA (myspell), es_VE (myspell), de_AT_frami (myspell), it_IT -# (myspell), ar_OM (myspell), ar_DZ (myspell), it_CH (myspell), es_MX -# (myspell), es_PY (myspell), en_AU (myspell), es_DO (myspell), es_SV -# (myspell), es_PR (myspell), es_GT (myspell), ar_LY (myspell), ar_JO -# (myspell), en_US (myspell), de_AT (myspell), es_PE (myspell), ar_QA -# (myspell), es_CL (myspell), pt_BR (myspell), ar_AE (myspell), pt_PT -# (myspell), es_CO (myspell), es_UY (myspell), ar_MA (myspell), fr (myspell), -# es_US (myspell), en (aspell). -spelling-dict= - -# List of comma separated words that should be considered directives if they -# appear and 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=no - - -[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= - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no - - -[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. -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# 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=yes - -# 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 - -# List of module names for which member attributes should not be checked -# (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= - -# 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=yes - -# 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 ignore-mixin- -# members is set to 'yes' -mixin-class-rgx=.*[Mm]ixin - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -# Translation function is (unfortunately) defined as a buildin. -additional-builtins=_ - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# 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). -# On top of the defaults, simple unused is also permissible. -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=past.builtins,future.builtins,builtins,io - - -[SIMILARITIES] - -# Comments are removed from the similarity computation -ignore-comments=yes - -# Docstrings are removed from the similarity computation -ignore-docstrings=yes - -# Imports are removed from the similarity computation -ignore-imports=no - -# Signatures are removed from the similarity computation -ignore-signatures=no - -# Minimum lines number of a similarity. -# Matching only larger chunks of code, not the default 4 lines. -min-similarity-lines=10 - - -[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 - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# 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. -#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. -#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. -#class-const-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-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. -#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. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - x, - y, - z, - 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=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-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. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-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 - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. -#variable-rgx= - - -[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=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# 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=no - -# 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= - - -[CLASSES] - -# Warn about protected attribute access inside special methods -check-protected-access-in-special-methods=no - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# 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=cls - - -[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. -# We tend to have function with more arguments than the default 5 -# and that doesn't seem to be the problem of our code. -max-args=12 - -# Maximum number of attributes for a class (see R0902). -# We tend to have classes with more attributes than the default 7. -max-attributes=15 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=5 - -# Maximum number of branch for function / method body. -# We add 3 more to the default to make it easier to adopt the check quickly. -# (Many branches may or may not be an issue, but in any case this is potential -# place to improve.) -max-branches=15 - -# Maximum number of locals for function / method body. -# Since we allow many more arguments, we leave some space for locals as well, -# although the default 15 should be high enough. -max-locals=17 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# 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=1 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception diff --git a/python/grass/imaging/images2gif.py b/python/grass/imaging/images2gif.py index 2218233d7d9..b3ee3062719 100644 --- a/python/grass/imaging/images2gif.py +++ b/python/grass/imaging/images2gif.py @@ -215,12 +215,11 @@ def getAppExt(self, loops=float("inf")): # (the extension interprets zero loops # to mean an infinite number of loops) # Mmm, does not seem to work - if True: - bb = "\x21\xFF\x0B" # application extension - bb += "NETSCAPE2.0" - bb += "\x03\x01" - bb += intToBin(loops) - bb += "\x00" # end + bb = "\x21\xFF\x0B" # application extension + bb += "NETSCAPE2.0" + bb += "\x03\x01" + bb += intToBin(loops) + bb += "\x00" # end return bb def getGraphicsControlExt(self, duration=0.1, dispose=2): @@ -446,33 +445,29 @@ def writeGifToFile(self, fp, images, durations, loops, xys, disposes): # Next frame is not the first firstFrame = False - if True: - # Write palette and image data - - # Gather info - data = getdata(im) - imdes, data = data[0], data[1:] - graphext = self.getGraphicsControlExt( - durations[frames], disposes[frames] - ) - # Make image descriptor suitable for using 256 local color palette - lid = self.getImageDescriptor(im, xys[frames]) - - # Write local header - if (palette != globalPalette) or (disposes[frames] != 2): - # Use local color palette - fp.write(graphext) - fp.write(lid) # write suitable image descriptor - fp.write(palette) # write local color table - fp.write("\x08") # LZW minimum size code - else: - # Use global color palette - fp.write(graphext) - fp.write(imdes) # write suitable image descriptor + # Write palette and image data + # Gather info + data = getdata(im) + imdes, data = data[0], data[1:] + graphext = self.getGraphicsControlExt(durations[frames], disposes[frames]) + # Make image descriptor suitable for using 256 local color palette + lid = self.getImageDescriptor(im, xys[frames]) + + # Write local header + if (palette != globalPalette) or (disposes[frames] != 2): + # Use local color palette + fp.write(graphext) + fp.write(lid) # write suitable image descriptor + fp.write(palette) # write local color table + fp.write("\x08") # LZW minimum size code + else: + # Use global color palette + fp.write(graphext) + fp.write(imdes) # write suitable image descriptor - # Write image data - for d in data: - fp.write(d) + # Write image data + for d in data: + fp.write(d) # Prepare for next round frames += 1 diff --git a/python/grass/jupyter/utils.py b/python/grass/jupyter/utils.py index b06553d2d3b..c443d2590f2 100644 --- a/python/grass/jupyter/utils.py +++ b/python/grass/jupyter/utils.py @@ -11,6 +11,7 @@ # for details. """Utility functions warpping existing processes in a suitable way""" +from collections.abc import Mapping import tempfile import json import os @@ -303,7 +304,9 @@ def query_vector(coord, vector_list, distance): return _style_table(final_output) -def estimate_resolution(raster, mapset, location, dbase, env): +def estimate_resolution( + raster: str, mapset: str, location: str, dbase: str, env: Mapping +) -> float: """Estimates resolution of reprojected raster. :param str raster: name of raster @@ -326,9 +329,9 @@ def estimate_resolution(raster, mapset, location, dbase, env): ).strip() params = gs.parse_key_val(output, vsep=" ") output = gs.read_command("g.region", flags="ug", env=env, **params) - output = gs.parse_key_val(output, val_type=float) - cell_ns = (output["n"] - output["s"]) / output["rows"] - cell_ew = (output["e"] - output["w"]) / output["cols"] + keyval = gs.parse_key_val(output, val_type=float) + cell_ns = (keyval["n"] - keyval["s"]) / keyval["rows"] + cell_ew = (keyval["e"] - keyval["w"]) / keyval["cols"] return (cell_ew + cell_ns) / 2.0 diff --git a/python/grass/pygrass/rpc/__init__.py b/python/grass/pygrass/rpc/__init__.py index e95c3453250..9685b279b0e 100644 --- a/python/grass/pygrass/rpc/__init__.py +++ b/python/grass/pygrass/rpc/__init__.py @@ -478,7 +478,7 @@ def get_vector_features_as_wkb_list( doctest.testmod() - """Remove the generated maps, if exist""" + # Remove the generated maps, if exist mset = utils.get_mapset_raster(test_raster_name, mapset="") if mset: Module("g.remove", flags="f", type="raster", name=test_raster_name) diff --git a/python/grass/pygrass/vector/testsuite/test_geometry.py b/python/grass/pygrass/vector/testsuite/test_geometry.py index 0b5a7d48ebe..3dfd0e5c655 100644 --- a/python/grass/pygrass/vector/testsuite/test_geometry.py +++ b/python/grass/pygrass/vector/testsuite/test_geometry.py @@ -83,7 +83,7 @@ def test_eq(self): point1 = Point(1, 0) self.assertFalse(point0 == point1) self.assertFalse(point0 == (1, 0)) - self.assertTrue(point0 == point0) # noqa: PLR0124 + self.assertTrue(point0 == point0) # noqa: PLR0124 # pylint: disable=R0124 self.assertTrue(point0 == (0, 0)) def test_repr(self): diff --git a/python/grass/script/array.py b/python/grass/script/array.py index 29c99d7617c..5f23bb6f022 100644 --- a/python/grass/script/array.py +++ b/python/grass/script/array.py @@ -131,6 +131,7 @@ def __del__(self): class array(np.memmap): + # pylint: disable-next=signature-differs; W0222 def __new__(cls, mapname=None, null=None, dtype=np.double, env=None): """Define new numpy array @@ -242,6 +243,7 @@ def write(self, mapname, title=None, null=None, overwrite=None, quiet=None): class array3d(np.memmap): + # pylint: disable-next=signature-differs; W0222 def __new__(cls, mapname=None, null=None, dtype=np.double, env=None): """Define new 3d numpy array diff --git a/python/grass/script/core.py b/python/grass/script/core.py index e6e95d68c2f..c58dee4bae2 100644 --- a/python/grass/script/core.py +++ b/python/grass/script/core.py @@ -1802,6 +1802,7 @@ def create_project( if datum_trans: kwargs["datum_trans"] = datum_trans + ps = None if epsg: ps = pipe_command( "g.proj", @@ -1857,7 +1858,7 @@ def create_project( else: _create_location_xy(mapset_path.directory, mapset_path.location) - if epsg or proj4 or filename or wkt: + if ps is not None and (epsg or proj4 or filename or wkt): error = ps.communicate(stdin)[1] try_remove(tmp_gisrc) diff --git a/python/grass/script/db.py b/python/grass/script/db.py index 5591b92d4ca..0ae4fe6b53f 100644 --- a/python/grass/script/db.py +++ b/python/grass/script/db.py @@ -127,9 +127,8 @@ def db_connection(force=False, env=None): :return: parsed output of db.connect """ # noqa: E501 try: - nuldev = open(os.devnull, "w") - conn = parse_command("db.connect", flags="g", stderr=nuldev, env=env) - nuldev.close() + with open(os.devnull, "w") as nuldev: + conn = parse_command("db.connect", flags="g", stderr=nuldev, env=env) except CalledModuleError: conn = None diff --git a/python/grass/script/utils.py b/python/grass/script/utils.py index c03f44b50ef..a30b3365e35 100644 --- a/python/grass/script/utils.py +++ b/python/grass/script/utils.py @@ -241,7 +241,7 @@ def text_to_string(text, encoding=None): return decode(text, encoding=encoding) -def parse_key_val(s, sep="=", dflt=None, val_type=None, vsep=None): +def parse_key_val(s, sep="=", dflt=None, val_type=None, vsep=None) -> KeyValue: """Parse a string into a dictionary, where entries are separated by newlines and the key and value are separated by `sep` (default: `=`) diff --git a/temporal/t.unregister/t.unregister.py b/temporal/t.unregister/t.unregister.py index cacfe579a7b..a67ef91adb5 100755 --- a/temporal/t.unregister/t.unregister.py +++ b/temporal/t.unregister/t.unregister.py @@ -103,17 +103,16 @@ def main(): # Read the map list from file if file: - fd = open(file) - - line = True - while True: - line = fd.readline() - if not line: - break - - mapname = line.strip() - mapid = dummy.build_id(mapname, mapset) - maplist.append(mapid) + with open(file) as fd: + line = True + while True: + line = fd.readline() + if not line: + break + + mapname = line.strip() + mapid = dummy.build_id(mapname, mapset) + maplist.append(mapid) num_maps = len(maplist) update_dict = {} diff --git a/utils/generate_release_notes.py b/utils/generate_release_notes.py index c6766ecb024..a6c9c1485f4 100755 --- a/utils/generate_release_notes.py +++ b/utils/generate_release_notes.py @@ -131,7 +131,7 @@ def binder_badge(tag): def print_support(file=None): url = "https://opencollective.com/grass/tiers/supporter/all.json" - response = requests.get(url=url) + response = requests.get(url=url, timeout=7) data = response.json() if data: print_section_heading_3("Monthly Financial Supporters", file=file) diff --git a/utils/pylintrc.txt b/utils/pylintrc.txt deleted file mode 100644 index 2b812c4ace2..00000000000 --- a/utils/pylintrc.txt +++ /dev/null @@ -1,287 +0,0 @@ -# This is a configuration file for pylint. - -# (C) 2011-2013 by the GRASS Development Team - -# This program is free software under the GNU General Public License -# (>=v2). Read the file COPYING that comes with GRASS for details. - -# author: Vaclav Petras - -# This configuration should work for all Python library, Python scripts and -# wxPython GUI. -# Example for gui/wxpython: -# pylint --rcfile=../../utils/pylintrc.txt -f parseable -r n -i y lmgr/ - -# A lot of errors need to be ignored now to avoid a large number of messages. -# Files need to be fixed one by one (partially without this configuration). - -# Save this file ~/.pylintrc on Linux - - -[MASTER] - -# Specify a configuration file. -#rcfile= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Profiled execution. -profile=no - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS - -# Pickle collected data for later comparisons. -persistent=no - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - - -[MESSAGES CONTROL] - -# 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. -#enable= - -# Disable 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). -disable=E1103,W0141,W0201,W0311,W0312,W0612,W0613,W0614,W0622,R0201,R0901,R0904,C0103,C0111,C0322,C0323,C0324,F0401 - -# E1103: caused probably by wxPython -# W0613: unused arg -> solve somewhere here using event -# C0103: names not defined -# W0201: define methods used for init -# W0622: Redefining built-in %r: needs complex solution - -# E1101: %s %r has no %r member: why? -# R0201: can be solved -# F0401: something is possible to import only in grass - - -[REPORTS] - -# Set the output format. Available formats are text, parseable, colorized, msvs -# (visual studio) and html -output-format=text - -# Include message's id in output -include-ids=no - -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - -# Tells whether to display a full report or only the messages -reports=yes - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Add a comment according to your evaluation note. This is used by the global -# evaluation report (RP0004). -comment=no - - -[VARIABLES] - -# Tells whether we should check for unused import in __init__ files. -init-import=yes - -# A regular expression matching the beginning of the name of dummy variables -# (i.e. not used). -dummy-variables-rgx=dummy|unused - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins=_ - - -[BASIC] - -# Required attributes for module, separated by a comma -required-attributes= - -# List of builtins function names that should not be used, separated by a comma -bad-functions=map,filter,apply,input - -# Regular expression which should only match correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression which should only match correct module level names -const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Regular expression which should only match correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression which should only match correct function names -function-rgx=[a-z_][a-zA-Z0-9_]{2,30}$ - -# Regular expression which should only match correct method names -method-rgx=[a-zA-Z_][a-zA-Z0-9_]{2,30}$ - -# Regular expression which should only match correct instance attribute names -attr-rgx=[a-z_][a-zA-Z0-9_]{2,30}$ - -# Regular expression which should only match correct argument names -argument-rgx=[a-z_][a-zA-Z0-9_]{2,30}$ - -# Regular expression which should only match correct variable names -variable-rgx=[a-z_][a-zA-Z0-9_]{2,30}$|[a-z] - -# Regular expression which should only match correct list comprehension / -# generator expression variable names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,_,x,y,z,N,E,S,W,id - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# Regular expression which should only match functions or classes name which do -# not require a docstring -no-docstring-rgx=__.*__ - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,TODO,\\todo,@todo - -# general regexp for convention, warning etc. would be great - -[TYPECHECK] - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# List of classes names for which member attributes should not be checked -# (useful for classes with attributes dynamically set). -ignored-classes=SQLObject - -# When zope mode is activated, add a predefined set of Zope acquired attributes -# to generated-members. -zope=no - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E0201 when accessed. Python regular -# expressions are accepted. -generated-members=REQUEST,acl_users,aq_parent - - -[FORMAT] - -# Maximum number of characters on a single line. -# Increased form 80. -max-line-length=150 - -# Maximum number of lines in a module -# Increased from 1000. -max-module-lines=2000 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - - -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=4 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - - -[DESIGN] - -# Maximum number of arguments for function / method -# Increased from 5. -max-args=10 - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore -ignored-argument-names=_.*|event - -# Maximum number of locals for function / method body -# Changed from 15. -max-locals=20 - -# Maximum number of return / yield for function / method body -max-returns=6 - -# Maximum number of branch for function / method body -# Changed from 12. -max-branchs=20 - -# Maximum number of statements in function / method body -max-statements=50 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of attributes for a class (see R0902). -# Changed from 7. -max-attributes=10 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - -# Maximum number of public methods for a class (see R0904). -# Increased from 20 -max-public-methods=30 - - -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,string,TERMIOS,Bastion,rexec - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled) -int-import-graph= - - -[CLASSES] - -# List of interface methods to ignore, separated by a comma. This is used for -# instance to not check methods defines in Zope's Interface base class. -ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "Exception" -overgeneral-exceptions=Exception