diff --git a/.pep8rc b/.pep8rc deleted file mode 100644 index 11197e7df..000000000 --- a/.pep8rc +++ /dev/null @@ -1,13 +0,0 @@ -[pep8] -show-source = yes -statistics = yes -count = yes -max-line-length = 100 - -# List of currently ignored PEP8 issues. Some of them definetely should be -# enabled in future. -# - -ignore = E731,E402 -# E731: ignore use def instead of lambda assignation -# E402: ignore module level import not at top of file diff --git a/.pylintrc b/.pylintrc deleted file mode 100644 index dd3b0a31d..000000000 --- a/.pylintrc +++ /dev/null @@ -1,512 +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-whitelist= - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS - -# Add files or directories matching the regex patterns to the blacklist. 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=4 - -# 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 modules names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# Specify a configuration file. -#rcfile= - -# 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= - arguments-differ, - attribute-defined-outside-init, - broad-except, - consider-using-ternary, - deprecated-method, - deprecated-module, - duplicate-code, - fixme, - import-error, # needed for travis build - inconsistent-return-statements, - invalid-name, - missing-docstring, - no-member, - no-method-argument, - no-name-in-module, - no-value-for-parameter, - pointless-string-statement, - protected-access, - redefined-builtin, - too-few-public-methods, - too-many-arguments, - too-many-boolean-expressions, - too-many-branches, - too-many-instance-attributes, - too-many-lines, - too-many-locals, - too-many-nested-blocks, - too-many-public-methods, - too-many-positional-arguments, - too-many-statements, - undefined-variable, - ungrouped-imports, - unnecessary-pass, - unreachable, - unused-argument, - unused-import, - unused-variable, - wrong-import-order, - wrong-import-position, - consider-using-dict-items, - -# 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 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) - -# 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 - - -[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 - -# 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 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, - ex, - Run, - _ - -# 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= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. 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=six.moves,past.builtins,future.builtins,builtins,io - - -[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 - - -[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 -# mixin class is detected if its name ends with "mixin" (case insensitive). -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 - - -[LOGGING] - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: none. To make it working -# install python-enchant package.. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to indicated private dictionary in -# --spelling-private-dict-file option instead of raising a message. -spelling-store-unknown-words=no - - -[IMPORTS] - -# 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=optparse,tkinter.tix - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled). -ext-import-graph= - -# 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 internal dependencies in 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 - - -[DESIGN] - -# Maximum number of arguments for function / method. -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in an if statement. -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=12 - -# Maximum number of locals for function / method body. -max-locals=15 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp - -# 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 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "Exception". -overgeneral-exceptions=Exception diff --git a/Makefile b/Makefile index 38c2538b8..100b5854a 100644 --- a/Makefile +++ b/Makefile @@ -195,7 +195,7 @@ flake8: PIPENV_IGNORE_VIRTUALENVS=1 pipenv run flake8 guake pylint: - PIPENV_IGNORE_VIRTUALENVS=1 pipenv run pylint --rcfile=.pylintrc --output-format=colorized $(MODULE) + PIPENV_IGNORE_VIRTUALENVS=1 pipenv run pylint --output-format=colorized $(MODULE) sc: style check diff --git a/Pipfile b/Pipfile index 3f52f5b90..c5aacf643 100644 --- a/Pipfile +++ b/Pipfile @@ -33,6 +33,7 @@ typing-extensions = "*" toml = "*" tomli = "*" pre-commit = "==2.17.0" +setuptools-scm = "<9,>=8" [packages] wheel = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 5117038e0..706577418 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "54735286e36ac689caf1b2ee68690d2e8abf1620f54cd35208ba386c073c9203" + "sha256": "624b61048a6c3eb06a08b9c1e550c6d08f1bfa41b426eaed64948c934e61b2b8" }, "pipfile-spec": 6, "requires": { @@ -2455,6 +2455,15 @@ "markers": "python_version >= '3.10'", "version": "==84.0.0" }, + "setuptools-scm": { + "hashes": [ + "sha256:332ca0d43791b818b841213e76b1971b7711a960761c5bea5fc5cdb5196fbce3", + "sha256:3d555e92b75dacd037d32bafdf94f97af51ea29ae8c7b234cf94b7a5bd242a63" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==8.3.1" + }, "six": { "hashes": [ "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", diff --git a/guake/prefs.py b/guake/prefs.py index 42c240625..47c60e28a 100644 --- a/guake/prefs.py +++ b/guake/prefs.py @@ -1442,6 +1442,7 @@ def each_key(model, path, subiter): self.hotkey_alread_used = True msg = _('The shortcut "%s" is already in use.') % html_escape(accelerator) ShowableError(self.window, _("Error setting keybinding."), msg, -1) + # pylint: disable-next=broad-exception-raised raise Exception("This is ok, we just use it to break the foreach loop!") self.store.foreach(each_key) diff --git a/pyproject.toml b/pyproject.toml index d7697e35d..2cc5dc3ea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,4 +1,95 @@ +[build-system] +requires = ["setuptools>=64", "setuptools_scm>=8,<9"] +build-backend = "setuptools.build_meta" + +[project] +name = "guake" +description = "Guake Terminal" +readme = "README.rst" +authors = [{ name = "Gaetan Semet", email = "gaetan@xeberon.net" }] +requires-python = ">=3.8" +classifiers = [ + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: Terminals", + "Topic :: Terminals :: Terminal Emulators/X Terminals", + "Topic :: Desktop Environment :: Gnome", +] +dynamic = ["version"] + +[project.urls] +Homepage = "https://github.com/Guake/guake" + +[project.scripts] +guake = "guake.main:exec_main" +guake-toggle = "guake.guake_toggle:toggle_guake_by_dbus" + +[tool.setuptools] +packages = ["guake"] +include-package-data = true + +[tool.setuptools_scm] +version_file = "guake/_version.py" +local_scheme = "no-local-version" + [tool.black] line-length = 100 -target-version = ['py36'] +target-version = ['py38'] include = '\.pyi?$' + +[tool.pylint.main] +jobs = 0 + +[tool.pylint.format] +max-line-length = 100 + +[tool.pylint."messages control"] +disable = [ + "arguments-differ", + "attribute-defined-outside-init", + "broad-exception-caught", + "consider-using-ternary", + "deprecated-method", + "deprecated-module", + "duplicate-code", + "fixme", + "import-error", + "inconsistent-return-statements", + "invalid-name", + "missing-docstring", + "no-member", + "no-method-argument", + "no-name-in-module", + "no-value-for-parameter", + "pointless-string-statement", + "protected-access", + "redefined-builtin", + "too-few-public-methods", + "too-many-arguments", + "too-many-boolean-expressions", + "too-many-branches", + "too-many-instance-attributes", + "too-many-lines", + "too-many-locals", + "too-many-nested-blocks", + "too-many-public-methods", + "too-many-positional-arguments", + "too-many-statements", + "undefined-variable", + "ungrouped-imports", + "unnecessary-pass", + "unreachable", + "unused-argument", + "unused-import", + "unused-variable", + "wrong-import-order", + "wrong-import-position", + "consider-using-dict-items", +] +enable = ["c-extension-no-member"] diff --git a/releasenotes/notes/pyproject-abfdd856d4efd8ca.yaml b/releasenotes/notes/pyproject-abfdd856d4efd8ca.yaml new file mode 100644 index 000000000..80481fa78 --- /dev/null +++ b/releasenotes/notes/pyproject-abfdd856d4efd8ca.yaml @@ -0,0 +1,6 @@ +other: + - | + Move packaging metadata (``setup.cfg``) and pylint configuration (``.pylintrc``) + into ``pyproject.toml``, and remove the unused ``.pep8rc``. The build backend + is still setuptools. The wheel is now tagged ``py3-none-any`` instead of + ``py2.py3-none-any``, and its metadata declares ``Requires-Python: >=3.8``. diff --git a/requirements-dev.txt b/requirements-dev.txt index 329d6e20a..2e76f21b2 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -69,6 +69,7 @@ rich==13.9.4; python_full_version >= '3.8.0' scandir==1.10.0; python_version < '3.5' secretstorage==3.3.3; python_version >= '3.6' setuptools==75.6.0; python_version >= '3.9' +setuptools-scm==8.3.1; python_version >= '3.8' six==1.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' snowballstemmer==2.2.0 sphinx==8.1.3; python_version >= '3.10' diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index b223b7bc0..000000000 --- a/setup.cfg +++ /dev/null @@ -1,58 +0,0 @@ -[metadata] -name = guake -summary = Guake Terminal -long_description = file: README.rst -long_description_content_type = text/x-rst -license_file = COPYING -author = Gaetan Semet -author_email = gaetan@xeberon.net -home_page = https://github.com/Guake/guake -# https://pypi.python.org/pypi?%3Aaction=list_classifiers check this list for classifiers -classifier = - Intended Audience :: Information Technology - Intended Audience :: System Administrators - License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) - Operating System :: POSIX :: Linux - Programming Language :: Python :: 3.8 - Programming Language :: Python :: 3.9 - Programming Language :: Python :: 3.10 - Programming Language :: Python :: 3.11 - Topic :: Terminals - Topic :: Terminals :: Terminal Emulators/X Terminals - Topic :: Desktop Environment :: Gnome - -[options] -packages = - guake -setup_requires = - setuptools>=57.5.0 - setuptools_scm<9 -install_requires = - importlib_metadata; python_version < '3.8' - typing; python_version < '3.5' -include_package_data = True - -[options.entry_points] -console_scripts = - guake = guake.main:exec_main - guake-toggle = guake.guake_toggle:toggle_guake_by_dbus - -[build_sphinx] -source-dir = doc/source -build-dir = doc/build -all_files = 1 - -[upload_sphinx] -upload-dir = doc/build/html - -[wheel] -universal = 1 - -[bdist_wheel] -# This flag says that the code is written to work on both Python 2 and Python -# 3. If at all possible, it is good practice to do this. If you cannot, you -# will need to generate wheels for each Python version that you support. -universal=1 - -[pep8] -max-line-length = 100 diff --git a/setup.py b/setup.py index 2a85ce94c..654f0314c 100644 --- a/setup.py +++ b/setup.py @@ -2,6 +2,7 @@ import setuptools -setuptools.setup( - use_scm_version={"write_to": "guake/_version.py", "local_scheme": "no-local-version"} -) +# Only kept because the Makefile still runs `python setup.py ...`. All configuration +# lives in pyproject.toml; setuptools_scm comes from the dev environment (Pipfile) +# for these direct calls, and from [build-system].requires for pip / build. +setuptools.setup()