From fbc020d3bb9d20412685d5a0a6de4b12c433dd89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2026 01:50:43 +0000 Subject: [PATCH 1/2] chore(deps-dev): Bump pyproject-fmt from 2.21.2 to 2.23.0 Bumps [pyproject-fmt](https://github.com/tox-dev/toml-fmt) from 2.21.2 to 2.23.0. - [Release notes](https://github.com/tox-dev/toml-fmt/releases) - [Commits](https://github.com/tox-dev/toml-fmt/compare/pyproject-fmt/2.21.2...pyproject-fmt/2.23.0) --- updated-dependencies: - dependency-name: pyproject-fmt dependency-version: 2.23.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 03d8d502..2dcf46d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,7 +53,7 @@ optional-dependencies.dev = [ "prek==0.4.1", "pydocstringformatter==0.7.5", "pylint[spelling]==4.0.5", - "pyproject-fmt==2.21.2", + "pyproject-fmt==2.23.0", "pyrefly==1.0.0", "pyright==1.1.409", "pyroma==5.0.1", From d1fd9b0e71f5f75bc48d3122b599a70be24fcc2e Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Wed, 3 Jun 2026 06:26:56 +0100 Subject: [PATCH 2/2] Apply pyproject-fmt 2.23.0 formatting changes. Dependabot only bumped the version pin; run the formatter so pre-commit passes. Co-authored-by: Cursor --- pyproject.toml | 228 ++++++++++++++++++++++++------------------------- 1 file changed, 114 insertions(+), 114 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2dcf46d2..c04a878e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,13 +94,13 @@ scripts.vws-web-tools = "vws_web_tools:vws_web_tools_group" dev = [] [tool.setuptools] -zip-safe = false -package-data.vws_web_tools = [ - "py.typed", -] packages.find.where = [ "src", ] +package-data.vws_web_tools = [ + "py.typed", +] +zip-safe = false [tool.distutils] bdist_wheel.universal = true @@ -154,11 +154,24 @@ lint.flake8-tidy-imports.banned-api."typing.cast".msg = "typing.cast is banned: lint.pydocstyle.convention = "google" [tool.pylint] +DEPRECATED_BUILTINS.bad-functions = [ + # Use Pylint until Ruff can ban bare builtin calls, or until custom rules + # make this removable: + # https://github.com/astral-sh/ruff/issues/10079 + # https://github.com/astral-sh/ruff/issues/970 + "filter", + "getattr", + "hasattr", + "map", + "setattr", +] # Allow the body of an if to be on the same line as the test if there is no # else. FORMAT.single-line-if-stmt = false -# Pickle collected data for later comparisons. -MASTER.persistent = true +# Return non-zero exit code if useless-suppression is emitted. +MAIN.fail-on = [ + "useless-suppression", +] # Use multiple processes to speed up Pylint. MASTER.jobs = 0 # List of plugins (as comma separated values of python modules names) to load, @@ -186,36 +199,11 @@ MASTER.load-plugins = [ "pylint.extensions.set_membership", "pylint.extensions.typing", ] +# Pickle collected data for later comparisons. +MASTER.persistent = true # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. MASTER.unsafe-load-any-extension = false -# Return non-zero exit code if useless-suppression is emitted. -MAIN.fail-on = [ - "useless-suppression", -] -DEPRECATED_BUILTINS.bad-functions = [ - # Use Pylint until Ruff can ban bare builtin calls, or until custom rules - # make this removable: - # https://github.com/astral-sh/ruff/issues/10079 - # https://github.com/astral-sh/ruff/issues/970 - "filter", - "getattr", - "hasattr", - "map", - "setattr", -] -# 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. -MESSAGES-CONTROL.enable = [ - "bad-inline-option", - "deprecated-pragma", - "file-ignored", - "spelling", - "use-symbolic-message-instead", - "useless-suppression", -] # 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 @@ -226,27 +214,39 @@ MESSAGES-CONTROL.enable = [ # no Warning level messages displayed, use"--disable=all --enable=classes # --disable=W" MESSAGES-CONTROL.disable = [ + # Too difficult to please + "duplicate-code", + # Let ruff handle long lines + "line-too-long", + "locally-disabled", + "missing-return-type-doc", + # We don't need everything to be documented because of mypy + "missing-type-doc", "too-few-public-methods", - "too-many-locals", "too-many-arguments", "too-many-instance-attributes", - "too-many-return-statements", "too-many-lines", - "locally-disabled", - # Let ruff handle long lines - "line-too-long", - # Let ruff handle unused imports - "unused-import", + "too-many-locals", + "too-many-return-statements", # Let isort deal with sorting "ungrouped-imports", - # We don't need everything to be documented because of mypy - "missing-type-doc", - "missing-return-type-doc", - # Too difficult to please - "duplicate-code", + # Let ruff handle unused imports + "unused-import", # Let ruff handle imports "wrong-import-order", ] +# 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. +MESSAGES-CONTROL.enable = [ + "bad-inline-option", + "deprecated-pragma", + "file-ignored", + "spelling", + "use-symbolic-message-instead", + "useless-suppression", +] # Spelling dictionary name. Available dictionaries: none. To make it working # install python-enchant package. SPELLING.spelling-dict = "en_US" @@ -256,34 +256,39 @@ SPELLING.spelling-private-dict-file = "spelling_private_dict.txt" # --spelling-private-dict-file option instead of raising a message. SPELLING.spelling-store-unknown-words = "no" +[tool.interrogate] +fail-under = 100 +verbose = 2 +omit-covered-files = true + [tool.check-manifest] ignore = [ + "*.enc", ".checkmake-config.ini", + ".git_archival.txt", + ".pre-commit-config.yaml", ".prettierrc", + ".vscode/**", ".yamlfmt", - "*.enc", - ".pre-commit-config.yaml", "admin", "admin/**", "CHANGELOG.rst", - "newsfragments", - "newsfragments/**", - "CODE_OF_CONDUCT.rst", - "CONTRIBUTING.rst", - "LICENSE", - "Makefile", "ci", "ci/**", + "CODE_OF_CONDUCT.rst", + "CONTRIBUTING.rst", "docs", "docs/**", - ".git_archival.txt", + "LICENSE", + "lint.mk", + "Makefile", + "newsfragments", + "newsfragments/**", "spelling_private_dict.txt", "tests", "tests-pylintrc", "tests/**", "vuforia_secrets.env.example", - "lint.mk", - ".vscode/**", "zizmor.yml", ] @@ -293,16 +298,65 @@ optional_dependencies_dev_groups = [ "release", ] +[tool.vulture] +# Duplicate some of .gitignore +exclude = [ ".venv" ] +# Ideally we would limit the paths to the source code where we want to ignore names, +# but Vulture does not enable this. +ignore_names = [ + # Sphinx + "autoclass_content", + "autoclass_content", + "autodoc_member_order", + "autodoc_typehints", + # public API used by downstream secret generation + "cad_data_url", + "copybutton_exclude", + "extensions", + # pytest fixtures - we name fixtures like this for this purpose + "fixture_*", + "get_model_target_web_api_details", + "html_show_copyright", + "html_show_sourcelink", + "html_show_sphinx", + "html_theme", + "html_theme_options", + "html_title", + "htmlhelp_basename", + "intersphinx_mapping", + "language", + "linkcheck_ignore", + "linkcheck_retries", + "master_doc", + "MODEL_TARGET_WEB_API_ADVANCED_SCOPE", + "MODEL_TARGET_WEB_API_ADVANCED_SCOPES", + "MODEL_TARGET_WEB_API_STANDARD_SCOPES", + "nitpicky", + "project_copyright", + "pygments_style", + # pytest configuration + "pytest_collect_file", + "pytest_plugins", + "rst_prolog", + "source_suffix", + "spelling_word_list_filename", + "templates_path", + "towncrier_draft_autoversion_mode", + "towncrier_draft_include_empty", + "towncrier_draft_working_directory", + "warning_is_error", +] + [tool.pyproject-fmt] indent = 4 keep_full_version = true max_supported_python = "3.14" [tool.mypy] -strict = true files = [ "." ] exclude = [ "build" ] follow_untyped_imports = true +strict = true plugins = [ "mypy_strict_kwargs", ] @@ -315,13 +369,13 @@ search_path = [ errors.non-exhaustive-match = "error" [tool.pyright] +typeCheckingMode = "strict" enableTypeIgnoreComments = false reportUnnecessaryTypeIgnoreComment = true -typeCheckingMode = "strict" [tool.pytest] -xfail_strict = true log_cli = true +xfail_strict = true [tool.coverage] run.branch = true @@ -342,11 +396,11 @@ filename = "CHANGELOG.rst" # date) followed by a flat bullet list with no per-type sub-headings. template = "docs/towncrier_template.rst.jinja" title_format = "{version}" +issue_format = "#{issue}" # ``title_format`` underline first, then any nested headings. A bare # version such as ``2026.05.18`` underlined with ``-`` matches every # pre-towncrier entry in CHANGELOG.rst. underlines = [ "-", "~", "^" ] -issue_format = "#{issue}" type = [ # A single, unnamed fragment type keeps the assembled output as one # flat bullet list, matching the historical changelog (which never @@ -360,11 +414,6 @@ split-summary-body = false max-line-length = 75 linewrap-full-docstring = true -[tool.interrogate] -fail-under = 100 -omit-covered-files = true -verbose = 2 - [tool.doc8] max_line_length = 2000 ignore_path = [ @@ -376,55 +425,6 @@ ignore_path = [ "./src/*/_setuptools_scm_version.txt", ] -[tool.vulture] -# Ideally we would limit the paths to the source code where we want to ignore names, -# but Vulture does not enable this. -ignore_names = [ - # pytest configuration - "pytest_collect_file", - "pytest_plugins", - # public API used by downstream secret generation - "cad_data_url", - "get_model_target_web_api_details", - "MODEL_TARGET_WEB_API_ADVANCED_SCOPE", - "MODEL_TARGET_WEB_API_ADVANCED_SCOPES", - "MODEL_TARGET_WEB_API_STANDARD_SCOPES", - # pytest fixtures - we name fixtures like this for this purpose - "fixture_*", - # Sphinx - "autoclass_content", - "autoclass_content", - "autodoc_member_order", - "autodoc_typehints", - "copybutton_exclude", - "extensions", - "html_show_copyright", - "html_show_sourcelink", - "html_show_sphinx", - "html_theme", - "html_theme_options", - "html_title", - "htmlhelp_basename", - "intersphinx_mapping", - "language", - "linkcheck_ignore", - "linkcheck_retries", - "master_doc", - "nitpicky", - "project_copyright", - "pygments_style", - "rst_prolog", - "source_suffix", - "spelling_word_list_filename", - "templates_path", - "warning_is_error", - "towncrier_draft_autoversion_mode", - "towncrier_draft_include_empty", - "towncrier_draft_working_directory", -] -# Duplicate some of .gitignore -exclude = [ ".venv" ] - [tool.yamlfix] section_whitelines = 1 whitelines = 1