From ef79c26f18f6bc1e57defe5f93862a06491c2dee Mon Sep 17 00:00:00 2001 From: Christophe Bornet Date: Wed, 12 Nov 2025 20:06:31 +0100 Subject: [PATCH] chore(cli,standard-tests,text-splitters): fix some ruff TC rules (#33934) Co-authored-by: Mason Daugherty --- libs/cli/langchain_cli/utils/git.py | 6 ++++-- libs/cli/tests/unit_tests/migrate/cli_runner/case.py | 6 ++++-- libs/cli/tests/unit_tests/migrate/cli_runner/folder.py | 5 ++++- libs/standard-tests/langchain_tests/conftest.py | 6 ++++-- .../langchain_tests/integration_tests/chat_models.py | 10 +++++++--- .../langchain_tests/unit_tests/chat_models.py | 10 +++++++--- .../tests/unit_tests/custom_chat_model.py | 9 ++++++--- .../tests/unit_tests/test_custom_chat_model.py | 6 +++++- libs/standard-tests/uv.lock | 4 ++-- libs/text-splitters/langchain_text_splitters/html.py | 3 +-- libs/text-splitters/langchain_text_splitters/spacy.py | 8 ++++++-- .../tests/unit_tests/test_text_splitters.py | 9 ++++++--- 12 files changed, 56 insertions(+), 26 deletions(-) diff --git a/libs/cli/langchain_cli/utils/git.py b/libs/cli/langchain_cli/utils/git.py index cf06b67ee6b..550ae76fda9 100644 --- a/libs/cli/langchain_cli/utils/git.py +++ b/libs/cli/langchain_cli/utils/git.py @@ -6,9 +6,8 @@ import hashlib import logging import re import shutil -from collections.abc import Sequence from pathlib import Path -from typing import Any, TypedDict +from typing import TYPE_CHECKING, Any, TypedDict from git import Repo @@ -18,6 +17,9 @@ from langchain_cli.constants import ( DEFAULT_GIT_SUBDIRECTORY, ) +if TYPE_CHECKING: + from collections.abc import Sequence + logger = logging.getLogger(__name__) diff --git a/libs/cli/tests/unit_tests/migrate/cli_runner/case.py b/libs/cli/tests/unit_tests/migrate/cli_runner/case.py index e208d0acd4c..e344e3e96c5 100644 --- a/libs/cli/tests/unit_tests/migrate/cli_runner/case.py +++ b/libs/cli/tests/unit_tests/migrate/cli_runner/case.py @@ -1,9 +1,11 @@ from __future__ import annotations from dataclasses import dataclass +from typing import TYPE_CHECKING -from .file import File -from .folder import Folder +if TYPE_CHECKING: + from .file import File + from .folder import Folder @dataclass diff --git a/libs/cli/tests/unit_tests/migrate/cli_runner/folder.py b/libs/cli/tests/unit_tests/migrate/cli_runner/folder.py index 6fa92879ada..45f6867966f 100644 --- a/libs/cli/tests/unit_tests/migrate/cli_runner/folder.py +++ b/libs/cli/tests/unit_tests/migrate/cli_runner/folder.py @@ -1,9 +1,12 @@ from __future__ import annotations -from pathlib import Path +from typing import TYPE_CHECKING from .file import File +if TYPE_CHECKING: + from pathlib import Path + class Folder: def __init__(self, name: str, *files: Folder | File) -> None: diff --git a/libs/standard-tests/langchain_tests/conftest.py b/libs/standard-tests/langchain_tests/conftest.py index 5a6b3458979..161fc744cbf 100644 --- a/libs/standard-tests/langchain_tests/conftest.py +++ b/libs/standard-tests/langchain_tests/conftest.py @@ -3,9 +3,8 @@ from __future__ import annotations import gzip -from os import PathLike from pathlib import Path -from typing import Any, cast +from typing import TYPE_CHECKING, Any, cast import pytest import yaml @@ -13,6 +12,9 @@ from vcr import VCR from vcr.persisters.filesystem import CassetteNotFoundError from vcr.request import Request +if TYPE_CHECKING: + from os import PathLike + class CustomSerializer: """Custom serializer for VCR cassettes using YAML and gzip. diff --git a/libs/standard-tests/langchain_tests/integration_tests/chat_models.py b/libs/standard-tests/langchain_tests/integration_tests/chat_models.py index 93e55949a02..fcd34e153a4 100644 --- a/libs/standard-tests/langchain_tests/integration_tests/chat_models.py +++ b/libs/standard-tests/langchain_tests/integration_tests/chat_models.py @@ -6,7 +6,7 @@ import base64 import json import os import warnings -from typing import Annotated, Any, Literal +from typing import TYPE_CHECKING, Annotated, Any, Literal from unittest.mock import MagicMock import httpx @@ -31,13 +31,17 @@ from langchain_core.utils.function_calling import ( from pydantic import BaseModel, Field from pydantic.v1 import BaseModel as BaseModelV1 from pydantic.v1 import Field as FieldV1 -from pytest_benchmark.fixture import BenchmarkFixture # type: ignore[import-untyped] from typing_extensions import TypedDict, override -from vcr.cassette import Cassette from langchain_tests.unit_tests.chat_models import ChatModelTests from langchain_tests.utils.pydantic import PYDANTIC_MAJOR_VERSION +if TYPE_CHECKING: + from pytest_benchmark.fixture import ( # type: ignore[import-untyped] + BenchmarkFixture, + ) + from vcr.cassette import Cassette + def _get_joke_class( # noqa: RET503 schema_type: Literal["pydantic", "typeddict", "json_schema"], diff --git a/libs/standard-tests/langchain_tests/unit_tests/chat_models.py b/libs/standard-tests/langchain_tests/unit_tests/chat_models.py index 895608b3f12..105f868c90b 100644 --- a/libs/standard-tests/langchain_tests/unit_tests/chat_models.py +++ b/libs/standard-tests/langchain_tests/unit_tests/chat_models.py @@ -5,7 +5,7 @@ from __future__ import annotations import inspect import os from abc import abstractmethod -from typing import Any, Literal +from typing import TYPE_CHECKING, Any, Literal from unittest import mock import pytest @@ -17,12 +17,16 @@ from pydantic import BaseModel, Field, SecretStr from pydantic.v1 import BaseModel as BaseModelV1 from pydantic.v1 import Field as FieldV1 from pydantic.v1 import ValidationError as ValidationErrorV1 -from pytest_benchmark.fixture import BenchmarkFixture # type: ignore[import-untyped] -from syrupy.assertion import SnapshotAssertion from langchain_tests.base import BaseStandardTests from langchain_tests.utils.pydantic import PYDANTIC_MAJOR_VERSION +if TYPE_CHECKING: + from pytest_benchmark.fixture import ( # type: ignore[import-untyped] + BenchmarkFixture, + ) + from syrupy.assertion import SnapshotAssertion + def generate_schema_pydantic_v1_from_2() -> Any: """Use to generate a schema from v1 namespace in pydantic 2.""" diff --git a/libs/standard-tests/tests/unit_tests/custom_chat_model.py b/libs/standard-tests/tests/unit_tests/custom_chat_model.py index 5a7d262c4a5..2ecd7296e63 100644 --- a/libs/standard-tests/tests/unit_tests/custom_chat_model.py +++ b/libs/standard-tests/tests/unit_tests/custom_chat_model.py @@ -1,9 +1,7 @@ from __future__ import annotations -from collections.abc import Iterator -from typing import Any +from typing import TYPE_CHECKING, Any -from langchain_core.callbacks import CallbackManagerForLLMRun from langchain_core.language_models import BaseChatModel from langchain_core.messages import AIMessage, AIMessageChunk, BaseMessage from langchain_core.messages.ai import UsageMetadata @@ -11,6 +9,11 @@ from langchain_core.outputs import ChatGeneration, ChatGenerationChunk, ChatResu from pydantic import Field from typing_extensions import override +if TYPE_CHECKING: + from collections.abc import Iterator + + from langchain_core.callbacks import CallbackManagerForLLMRun + class ChatParrotLink(BaseChatModel): """Chat Parrot Link. diff --git a/libs/standard-tests/tests/unit_tests/test_custom_chat_model.py b/libs/standard-tests/tests/unit_tests/test_custom_chat_model.py index 569ea9a8e6d..eea5550ee62 100644 --- a/libs/standard-tests/tests/unit_tests/test_custom_chat_model.py +++ b/libs/standard-tests/tests/unit_tests/test_custom_chat_model.py @@ -2,14 +2,18 @@ from __future__ import annotations +from typing import TYPE_CHECKING + import pytest -from langchain_core.language_models.chat_models import BaseChatModel from langchain_tests.integration_tests import ChatModelIntegrationTests from langchain_tests.unit_tests import ChatModelUnitTests from .custom_chat_model import ChatParrotLink +if TYPE_CHECKING: + from langchain_core.language_models.chat_models import BaseChatModel + class TestChatParrotLinkUnit(ChatModelUnitTests): @property diff --git a/libs/standard-tests/uv.lock b/libs/standard-tests/uv.lock index 29846a61ab8..4f24c7d54cd 100644 --- a/libs/standard-tests/uv.lock +++ b/libs/standard-tests/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.10.0, <4.0.0" resolution-markers = [ "python_full_version >= '3.13' and platform_python_implementation == 'PyPy'", @@ -297,7 +297,7 @@ wheels = [ [[package]] name = "langchain-core" -version = "1.0.3" +version = "1.0.4" source = { editable = "../core" } dependencies = [ { name = "jsonpatch" }, diff --git a/libs/text-splitters/langchain_text_splitters/html.py b/libs/text-splitters/langchain_text_splitters/html.py index 2eee21a3b21..65613bde399 100644 --- a/libs/text-splitters/langchain_text_splitters/html.py +++ b/libs/text-splitters/langchain_text_splitters/html.py @@ -5,7 +5,6 @@ from __future__ import annotations import copy import pathlib import re -from collections.abc import Iterator from io import StringIO from typing import ( IO, @@ -24,7 +23,7 @@ from typing_extensions import override from langchain_text_splitters.character import RecursiveCharacterTextSplitter if TYPE_CHECKING: - from collections.abc import Callable, Iterable, Sequence + from collections.abc import Callable, Iterable, Iterator, Sequence from bs4.element import ResultSet diff --git a/libs/text-splitters/langchain_text_splitters/spacy.py b/libs/text-splitters/langchain_text_splitters/spacy.py index 5f7275e4746..af06bfa8baa 100644 --- a/libs/text-splitters/langchain_text_splitters/spacy.py +++ b/libs/text-splitters/langchain_text_splitters/spacy.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Any +from typing import TYPE_CHECKING, Any from langchain_text_splitters.base import TextSplitter @@ -10,7 +10,11 @@ try: # Type ignores needed as long as spacy doesn't support Python 3.14. import spacy # type: ignore[import-not-found, unused-ignore] from spacy.lang.en import English # type: ignore[import-not-found, unused-ignore] - from spacy.language import Language # type: ignore[import-not-found, unused-ignore] + + if TYPE_CHECKING: + from spacy.language import ( # type: ignore[import-not-found, unused-ignore] + Language, + ) _HAS_SPACY = True except ImportError: diff --git a/libs/text-splitters/tests/unit_tests/test_text_splitters.py b/libs/text-splitters/tests/unit_tests/test_text_splitters.py index 79fed819152..6825dce2765 100644 --- a/libs/text-splitters/tests/unit_tests/test_text_splitters.py +++ b/libs/text-splitters/tests/unit_tests/test_text_splitters.py @@ -5,11 +5,9 @@ from __future__ import annotations import random import re import string -from collections.abc import Callable -from typing import Any +from typing import TYPE_CHECKING, Any import pytest -from bs4 import Tag from langchain_core._api import suppress_langchain_beta_warning from langchain_core.documents import Document @@ -34,6 +32,11 @@ from langchain_text_splitters.markdown import ( ) from langchain_text_splitters.python import PythonCodeTextSplitter +if TYPE_CHECKING: + from collections.abc import Callable + + from bs4 import Tag + FAKE_PYTHON_TEXT = """ class Foo: