From 8bfae4e77734ae5b15148e1f9eb92a46002ac191 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Fri, 26 Dec 2025 14:25:22 +0000 Subject: [PATCH 1/3] Add pyrefly and pyrefly-docs configuration --- .pre-commit-config.yaml | 20 ++++++++++++++++++++ pyproject.toml | 1 + 2 files changed, 21 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 610fffad..b6bd8e18 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -38,6 +38,8 @@ ci: - vulture - vulture-docs - yamlfix + - pyrefly + - pyrefly-docs # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks @@ -389,3 +391,21 @@ repos: types_or: [rst] additional_dependencies: [uv==0.9.5] stages: [pre-commit] + + - id: pyrefly + name: pyrefly + stages: [pre-push] + entry: uv run --extra=dev pyrefly check + language: python + types_or: [python, toml] + pass_filenames: false + additional_dependencies: [uv==0.9.5] + + - id: pyrefly-docs + name: pyrefly-docs + stages: [pre-push] + entry: uv run --extra=dev doccmd --no-write-to-file --example-workers 0 --language=python + --command="pyrefly check" + language: python + types_or: [markdown, rst] + additional_dependencies: [uv==0.9.5] diff --git a/pyproject.toml b/pyproject.toml index 1fd79f40..dac6af2f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,6 +70,7 @@ optional-dependencies.dev = [ "pylint[spelling]==4.0.4", "pylint-per-file-ignores==3.2.0", "pyproject-fmt==2.11.1", + "pyrefly==0.46.1", "pyright==1.1.407", "pyroma==5.0.1", "pytest==9.0.2", From 097bba6f671231bf286107246c87defcaa7b9ab5 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Fri, 26 Dec 2025 15:24:27 +0000 Subject: [PATCH 2/3] Fix pyrefly --- admin/create_secrets_files.py | 6 +++++- pyproject.toml | 6 ++++++ src/mock_vws/_flask_server/target_manager.py | 9 +++++++-- .../_requests_mock_server/mock_web_services_api.py | 9 +++++++-- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/admin/create_secrets_files.py b/admin/create_secrets_files.py index 4a6dd744..a41a5ad8 100644 --- a/admin/create_secrets_files.py +++ b/admin/create_secrets_files.py @@ -8,12 +8,16 @@ import sys import textwrap from pathlib import Path +from typing import TYPE_CHECKING import vws_web_tools from dotenv import load_dotenv from selenium import webdriver from selenium.common.exceptions import TimeoutException +if TYPE_CHECKING: + from selenium.webdriver.remote.webdriver import WebDriver + def main() -> None: """ @@ -37,7 +41,7 @@ def main() -> None: for i in range(num_databases) ] files_to_create = [file for file in required_files if not file.exists()] - driver = None + driver: WebDriver | None = None while files_to_create: if driver is None: diff --git a/pyproject.toml b/pyproject.toml index dac6af2f..445a0977 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -390,6 +390,12 @@ plugins = [ ] follow_untyped_imports = true +[tool.pyrefly] +search_path = [ + ".", + "src", +] + [tool.pyright] enableTypeIgnoreComments = false diff --git a/src/mock_vws/_flask_server/target_manager.py b/src/mock_vws/_flask_server/target_manager.py index 3e97b86d..7b112d36 100644 --- a/src/mock_vws/_flask_server/target_manager.py +++ b/src/mock_vws/_flask_server/target_manager.py @@ -248,7 +248,11 @@ def delete_target(database_name: str, target_id: str) -> Response: ) target = database.get_target(target_id=target_id) now = datetime.datetime.now(tz=target.upload_date.tzinfo) - new_target = copy.replace(target, delete_date=now) + # See https://github.com/facebook/pyrefly/issues/1897 + new_target = copy.replace( + target, # pyrefly: ignore[bad-argument-type] + delete_date=now, + ) database.targets.remove(target) database.targets.add(new_target) return Response( @@ -289,8 +293,9 @@ def update_target(database_name: str, target_id: str) -> Response: gmt = ZoneInfo(key="GMT") last_modified_date = datetime.datetime.now(tz=gmt) + # See https://github.com/facebook/pyrefly/issues/1897 new_target = copy.replace( - target, + target, # pyrefly: ignore[bad-argument-type] name=name, width=width, active_flag=active_flag, diff --git a/src/mock_vws/_requests_mock_server/mock_web_services_api.py b/src/mock_vws/_requests_mock_server/mock_web_services_api.py index 13570ed9..a4c2065d 100644 --- a/src/mock_vws/_requests_mock_server/mock_web_services_api.py +++ b/src/mock_vws/_requests_mock_server/mock_web_services_api.py @@ -259,7 +259,11 @@ def delete_target(self, request: PreparedRequest) -> _ResponseType: ) now = datetime.datetime.now(tz=target.upload_date.tzinfo) - new_target = copy.replace(target, delete_date=now) + # See https://github.com/facebook/pyrefly/issues/1897 + new_target = copy.replace( + target, # pyrefly: ignore[bad-argument-type] + delete_date=now, + ) database.targets.remove(target) database.targets.add(new_target) date = email.utils.formatdate( @@ -618,8 +622,9 @@ def update_target(self, request: PreparedRequest) -> _ResponseType: gmt = ZoneInfo(key="GMT") last_modified_date = datetime.datetime.now(tz=gmt) + # See https://github.com/facebook/pyrefly/issues/1897 new_target = copy.replace( - target, + target, # pyrefly: ignore[bad-argument-type] name=name, width=width, active_flag=active_flag, From b7fcaf691550ae95b5817948b5862d8d8f4ca70b Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Fri, 26 Dec 2025 15:43:27 +0000 Subject: [PATCH 3/3] Allow "pyrefly" in comments --- spelling_private_dict.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/spelling_private_dict.txt b/spelling_private_dict.txt index 43155171..36530907 100644 --- a/spelling_private_dict.txt +++ b/spelling_private_dict.txt @@ -74,6 +74,7 @@ plugins png pragma processable +pyrefly pyright pytest readme