Add basic mypy linting

Based on pytest setup, though more lax. Currently only the tests are
annotated so only helpful for them.

Fix #721.
This commit is contained in:
Ran Benita
2021-10-30 12:18:11 +03:00
parent 9ddb274f23
commit 787b8d9c14
5 changed files with 32 additions and 6 deletions

View File

@@ -28,3 +28,12 @@ repos:
files: ^(CHANGELOG.rst|HOWTORELEASE.rst|README.rst|changelog/.*)$ files: ^(CHANGELOG.rst|HOWTORELEASE.rst|README.rst|changelog/.*)$
language: python language: python
additional_dependencies: [pygments, restructuredtext_lint] additional_dependencies: [pygments, restructuredtext_lint]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.910-1
hooks:
- id: mypy
files: ^(src/|testing/)
args: []
additional_dependencies:
- pytest>=6.2.0
- py>=1.10.0

View File

@@ -0,0 +1 @@
Started using type annotations and mypy checking internally. The types are incomplete and not published.

View File

@@ -58,3 +58,19 @@ setproctitle = setproctitle
[flake8] [flake8]
max-line-length = 100 max-line-length = 100
[mypy]
mypy_path = src
# TODO: Enable this & fix errors.
# check_untyped_defs = True
disallow_any_generics = True
ignore_missing_imports = True
no_implicit_optional = True
show_error_codes = True
strict_equality = True
warn_redundant_casts = True
warn_return_any = True
warn_unreachable = True
warn_unused_configs = True
# TODO: Enable this & fix errors.
# no_implicit_reexport = True

View File

@@ -250,7 +250,7 @@ def is_xdist_controller(request_or_session) -> bool:
is_xdist_master = is_xdist_controller is_xdist_master = is_xdist_controller
def get_xdist_worker_id(request_or_session) -> str: def get_xdist_worker_id(request_or_session):
"""Return the id of the current worker ('gw0', 'gw1', etc) or 'master' """Return the id of the current worker ('gw0', 'gw1', etc) or 'master'
if running on the controller node. if running on the controller node.

View File

@@ -236,8 +236,8 @@ def setup_config(config, basetemp):
if __name__ == "__channelexec__": if __name__ == "__channelexec__":
channel = channel # noqa channel = channel # type: ignore[name-defined] # noqa: F821
workerinput, args, option_dict, change_sys_path = channel.receive() workerinput, args, option_dict, change_sys_path = channel.receive() # type: ignore[name-defined]
if change_sys_path is None: if change_sys_path is None:
importpath = os.getcwd() importpath = os.getcwd()
@@ -260,7 +260,7 @@ if __name__ == "__channelexec__":
setup_config(config, option_dict.get("basetemp")) setup_config(config, option_dict.get("basetemp"))
config._parser.prog = os.path.basename(workerinput["mainargv"][0]) config._parser.prog = os.path.basename(workerinput["mainargv"][0])
config.workerinput = workerinput config.workerinput = workerinput # type: ignore[attr-defined]
config.workeroutput = {} config.workeroutput = {} # type: ignore[attr-defined]
interactor = WorkerInteractor(config, channel) interactor = WorkerInteractor(config, channel) # type: ignore[name-defined]
config.hook.pytest_cmdline_main(config=config) config.hook.pytest_cmdline_main(config=config)