forked from Archives/langchain
255690d78e
# Catch changes to test group Add test to catch changes to test group.
75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
"""A unit test meant to catch accidental introduction of non-optional dependencies."""
|
|
from pathlib import Path
|
|
from typing import Any, Dict, Mapping
|
|
|
|
import pytest
|
|
import toml
|
|
|
|
HERE = Path(__file__).parent
|
|
|
|
PYPROJECT_TOML = HERE / "../../pyproject.toml"
|
|
|
|
|
|
@pytest.fixture()
|
|
def poetry_conf() -> Dict[str, Any]:
|
|
"""Load the pyproject.toml file."""
|
|
with open(PYPROJECT_TOML) as f:
|
|
return toml.load(f)["tool"]["poetry"]
|
|
|
|
|
|
def test_required_dependencies(poetry_conf: Mapping[str, Any]) -> None:
|
|
"""A test that checks if a new non-optional dependency is being introduced.
|
|
|
|
If this test is triggered, it means that a contributor is trying to introduce a new
|
|
required dependency. This should be avoided in most situations.
|
|
"""
|
|
# Get the dependencies from the [tool.poetry.dependencies] section
|
|
dependencies = poetry_conf["dependencies"]
|
|
|
|
required_dependencies = [
|
|
package_name
|
|
for package_name, requirements in dependencies.items()
|
|
if isinstance(requirements, str) or not requirements.get("optional", False)
|
|
]
|
|
|
|
assert sorted(required_dependencies) == [
|
|
"PyYAML",
|
|
"SQLAlchemy",
|
|
"aiohttp",
|
|
"async-timeout",
|
|
"dataclasses-json",
|
|
"numexpr",
|
|
"numpy",
|
|
"openapi-schema-pydantic",
|
|
"pydantic",
|
|
"python",
|
|
"requests",
|
|
"tenacity",
|
|
]
|
|
|
|
|
|
def test_test_group_dependencies(poetry_conf: Mapping[str, Any]) -> None:
|
|
"""Check if someone is attempting to add additional test dependencies.
|
|
|
|
Only dependencies associated with test running infrastructure should be added
|
|
to the test group; e.g., pytest, pytest-cov etc.
|
|
|
|
Examples of dependencies that should NOT be included: boto3, azure, postgres, etc.
|
|
"""
|
|
|
|
test_group_deps = sorted(poetry_conf["group"]["test"]["dependencies"])
|
|
|
|
assert test_group_deps == [
|
|
"duckdb-engine", # Should be removed
|
|
"freezegun",
|
|
"lark", # Should be removed
|
|
"pytest",
|
|
"pytest-asyncio",
|
|
"pytest-cov",
|
|
"pytest-dotenv",
|
|
"pytest-mock",
|
|
"pytest-socket",
|
|
"pytest-watcher",
|
|
"responses",
|
|
]
|