diff --git a/.flake8 b/.flake8 index f7b3c7f8e1a..3e7f6b97cbf 100644 --- a/.flake8 +++ b/.flake8 @@ -39,9 +39,6 @@ per-file-ignores = gui/wxpython/timeline/g.gui.timeline.py: E501 # Generated file gui/wxpython/menustrings.py: E501 - # F821 undefined name 'cmp' - # https://github.com/OSGeo/grass/issues/1809 - python/grass/pydispatch/saferef.py: F821 # C wrappers call libgis.G_gisinit before importing other modules. # TODO: Is this really needed? python/grass/pygrass/vector/__init__.py: E402 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/general/g.tempfile/g.tempfile.html b/general/g.tempfile/g.tempfile.html index 224db92106e..668252e8a7b 100644 --- a/general/g.tempfile/g.tempfile.html +++ b/general/g.tempfile/g.tempfile.html @@ -42,7 +42,7 @@
/bin/sh
scripts,
-learn to use the /bin/sh related trap
command. If you
+learn to use the /bin/sh
related trap
command. If you
write /bin/csh
scripts, learn to use the /bin/csh
related onintr
command.
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/imagery/i.ortho.photo/i.ortho.transform/i.ortho.transform.html b/imagery/i.ortho.photo/i.ortho.transform/i.ortho.transform.html
index 83c7f32f65c..9eb8b293b33 100644
--- a/imagery/i.ortho.photo/i.ortho.transform/i.ortho.transform.html
+++ b/imagery/i.ortho.photo/i.ortho.transform/i.ortho.transform.html
@@ -28,7 +28,7 @@ SEE ALSO
TODO
-Update this document with x,y,z<->E,N,H information
+Update this document with x,y,z<->E,N,H information
AUTHORS
diff --git a/imagery/imageryintro.html b/imagery/imageryintro.html
index deda9a28a11..b9258352b86 100644
--- a/imagery/imageryintro.html
+++ b/imagery/imageryintro.html
@@ -48,7 +48,7 @@ Image processing in general
interaction with the sun energy reflected back into space by
ground/vegetation/soil needs to be corrected. The need of
removing atmospheric artifacts stems from the fact that the
-atmosphericic conditions are changing over time. Hence, to gain
+atmospheric conditions are changing over time. Hence, to gain
comparability between Earth surface images taken at different
times, atmospheric need to be removed converting at-sensor values
which are top of atmosphere to surface reflectance values.
@@ -114,7 +114,7 @@ Semantic label information
a different group with identical semantic labels.
-
+
New enhanced classification workflow involving semantic labels.
@@ -204,16 +204,19 @@ Image classification
or g.gui.iclass, i.maxlik)
using the Maximum Likelihood classification method
+
Combined radiometric/geometric (segmentation based) classification:
- Supervised classification (i.gensigset,
i.smap)
+
Object-oriented classification:
- Unsupervised classification (segmentation based:
i.segment)
+
Kappa statistic can be calculated to validate the results
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/pydispatch/saferef.py b/python/grass/pydispatch/saferef.py
index 90769c46b36..a8eadaa5376 100644
--- a/python/grass/pydispatch/saferef.py
+++ b/python/grass/pydispatch/saferef.py
@@ -164,11 +164,20 @@ def __nonzero__(self):
__bool__ = __nonzero__
- def __cmp__(self, other):
- """Compare with another reference"""
+ def __eq__(self, other):
if not isinstance(other, self.__class__):
- return cmp(self.__class__, type(other))
- return cmp(self.key, other.key)
+ return False
+ return self.key == other.key
+
+ def __lt__(self, other):
+ if not isinstance(other, self.__class__):
+ return self.__class__.__name__ < other.__class__.__name__
+ return self.key < other.key
+
+ def __gt__(self, other):
+ if not isinstance(other, self.__class__):
+ return self.__class__.__name__ > other.__class__.__name__
+ return self.key > other.key
def __call__(self):
"""Return a strong reference to the bound method
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 a6f82c3d803..a30b3365e35 100644
--- a/python/grass/script/utils.py
+++ b/python/grass/script/utils.py
@@ -17,6 +17,8 @@
.. sectionauthor:: Anna Petrasova
"""
+from __future__ import annotations
+
import os
import shutil
import locale
@@ -29,9 +31,13 @@
import string
from pathlib import Path
+from typing import TYPE_CHECKING
+
+if TYPE_CHECKING:
+ from _typeshed import FileDescriptorOrPath, StrPath, StrOrBytesPath
-def float_or_dms(s):
+def float_or_dms(s) -> float:
"""Convert DMS to float.
>>> round(float_or_dms('26:45:30'), 5)
@@ -48,7 +54,7 @@ def float_or_dms(s):
return sum(float(x) / 60**n for (n, x) in enumerate(s.split(":")))
-def separator(sep):
+def separator(sep: str) -> str:
"""Returns separator from G_OPT_F_SEP appropriately converted
to character.
@@ -80,7 +86,9 @@ def separator(sep):
return sep
-def diff_files(filename_a, filename_b):
+def diff_files(
+ filename_a: FileDescriptorOrPath, filename_b: FileDescriptorOrPath
+) -> list[str]:
"""Diffs two text files and returns difference.
:param str filename_a: first file path
@@ -96,7 +104,7 @@ def diff_files(filename_a, filename_b):
return list(differ.compare(fh_a.readlines(), fh_b.readlines()))
-def try_remove(path):
+def try_remove(path: StrOrBytesPath) -> None:
"""Attempt to remove a file; no exception is generated if the
attempt fails.
@@ -108,7 +116,7 @@ def try_remove(path):
pass
-def try_rmdir(path):
+def try_rmdir(path: StrOrBytesPath) -> None:
"""Attempt to remove a directory; no exception is generated if the
attempt fails.
@@ -120,17 +128,17 @@ def try_rmdir(path):
shutil.rmtree(path, ignore_errors=True)
-def basename(path, ext=None):
+def basename(path: StrPath, ext: str | None = None) -> str:
"""Remove leading directory components and an optional extension
from the specified path
:param str path: path
:param str ext: extension
"""
- name = os.path.basename(path)
+ name: str = os.path.basename(path)
if not ext:
return name
- fs = name.rsplit(".", 1)
+ fs: list[str] = name.rsplit(".", 1)
if len(fs) > 1 and fs[1].lower() == ext:
name = fs[0]
return name
@@ -233,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: `=`)
@@ -354,8 +362,8 @@ def alphanum_key(actual_key):
def get_lib_path(modname, libname=None):
"""Return the path of the libname contained in the module."""
- from os.path import isdir, join, sep
from os import getenv
+ from os.path import isdir, join, sep
if isdir(join(getenv("GISBASE"), "etc", modname)):
path = join(os.getenv("GISBASE"), "etc", modname)
diff --git a/raster3d/r3.to.rast/r3.to.rast.html b/raster3d/r3.to.rast/r3.to.rast.html
index 45858ffdd47..c6e52b922aa 100644
--- a/raster3d/r3.to.rast/r3.to.rast.html
+++ b/raster3d/r3.to.rast/r3.to.rast.html
@@ -69,5 +69,5 @@ SEE ALSO
AUTHORS
-Sören Gebbert
+Sören Gebbert
Vaclav Petras, NCSU GeoForAll Lab
diff --git a/scripts/db.in.ogr/db.in.ogr.html b/scripts/db.in.ogr/db.in.ogr.html
index b4704a6cf64..14c46cd6c06 100644
--- a/scripts/db.in.ogr/db.in.ogr.html
+++ b/scripts/db.in.ogr/db.in.ogr.html
@@ -16,7 +16,8 @@ Import CSV file
# NOTE: create koeppen_gridcode.csvt first for automated type recognition
-db.in.ogr input=koeppen_gridcode.csv output=koeppen_gridcode
+db.in.ogr input=koeppen_gridcode.csv output=koeppen_gridcode gdal_doo="AUTODETECT_TYPE=YES"
+db.describe koeppen_gridcode -c
db.select table=koeppen_gridcode
diff --git a/scripts/r.mapcalc.simple/r.mapcalc.simple.html b/scripts/r.mapcalc.simple/r.mapcalc.simple.html
index 0de77893654..1277602f1a7 100644
--- a/scripts/r.mapcalc.simple/r.mapcalc.simple.html
+++ b/scripts/r.mapcalc.simple/r.mapcalc.simple.html
@@ -44,7 +44,7 @@ NOTES
The variable names are case-insensitive to allow the original
uppercase as well as lowercase as in option names
(unless the -c flag is used).
- Option names for each map are just one letter (not amap, etc.).
+ Option names for each map are just one letter (not amap, etc.).
Output option name is output as for other modules
(not outfile).
Raster map names can be optionally quoted (the -q flag).
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
diff --git a/utils/release.yml b/utils/release.yml
index eb601419274..c0d9cc17400 100644
--- a/utils/release.yml
+++ b/utils/release.yml
@@ -6,7 +6,7 @@ notes:
example: 'r.slope.aspect:'
- title: Graphical User Interface
- regexp: '(wxGUI.*|gui|GUI): '
+ regexp: '(wxGUI.*|gui|GUI)(\(\w[\w.-]*\))?: '
example: 'wxGUI:'
- title: Python
@@ -14,7 +14,7 @@ notes:
example: 'grass.script:'
- title: Documentation and Messages
- regexp: '(docs?|man|manual|manual pages|[Ss]phinx|mkhtml|messages?): '
+ regexp: '(docs?|man|manual|manual pages|[Ss]phinx|mkhtml|MkDocs|mkdocs|messages?): '
example: 'doc:'
- title: Libraries and General Functionality
diff --git a/vector/v.edit/v.edit.html b/vector/v.edit/v.edit.html
index 7597e157452..f29b665841b 100644
--- a/vector/v.edit/v.edit.html
+++ b/vector/v.edit/v.edit.html
@@ -139,7 +139,7 @@ Tool description
chtype - Change feature type of selected geometry
objects. Points are converted to centroids, centroids to points,
- lines to boundaries and boundaries to lines.
+ lines to boundaries and boundaries to lines.
vertexadd - Add vertex(ces) to the given vector lines
or boundaries. Location of the new vertex is given by coord