mirror of
https://github.com/hwchase17/langchain
synced 2024-11-04 06:00:26 +00:00
ed58eeb9c5
Moved the following modules to new package langchain-community in a backwards compatible fashion: ``` mv langchain/langchain/adapters community/langchain_community mv langchain/langchain/callbacks community/langchain_community/callbacks mv langchain/langchain/chat_loaders community/langchain_community mv langchain/langchain/chat_models community/langchain_community mv langchain/langchain/document_loaders community/langchain_community mv langchain/langchain/docstore community/langchain_community mv langchain/langchain/document_transformers community/langchain_community mv langchain/langchain/embeddings community/langchain_community mv langchain/langchain/graphs community/langchain_community mv langchain/langchain/llms community/langchain_community mv langchain/langchain/memory/chat_message_histories community/langchain_community mv langchain/langchain/retrievers community/langchain_community mv langchain/langchain/storage community/langchain_community mv langchain/langchain/tools community/langchain_community mv langchain/langchain/utilities community/langchain_community mv langchain/langchain/vectorstores community/langchain_community mv langchain/langchain/agents/agent_toolkits community/langchain_community mv langchain/langchain/cache.py community/langchain_community mv langchain/langchain/adapters community/langchain_community mv langchain/langchain/callbacks community/langchain_community/callbacks mv langchain/langchain/chat_loaders community/langchain_community mv langchain/langchain/chat_models community/langchain_community mv langchain/langchain/document_loaders community/langchain_community mv langchain/langchain/docstore community/langchain_community mv langchain/langchain/document_transformers community/langchain_community mv langchain/langchain/embeddings community/langchain_community mv langchain/langchain/graphs community/langchain_community mv langchain/langchain/llms community/langchain_community mv langchain/langchain/memory/chat_message_histories community/langchain_community mv langchain/langchain/retrievers community/langchain_community mv langchain/langchain/storage community/langchain_community mv langchain/langchain/tools community/langchain_community mv langchain/langchain/utilities community/langchain_community mv langchain/langchain/vectorstores community/langchain_community mv langchain/langchain/agents/agent_toolkits community/langchain_community mv langchain/langchain/cache.py community/langchain_community ``` Moved the following to core ``` mv langchain/langchain/utils/json_schema.py core/langchain_core/utils mv langchain/langchain/utils/html.py core/langchain_core/utils mv langchain/langchain/utils/strings.py core/langchain_core/utils cat langchain/langchain/utils/env.py >> core/langchain_core/utils/env.py rm langchain/langchain/utils/env.py ``` See .scripts/community_split/script_integrations.sh for all changes
88 lines
3.2 KiB
Python
88 lines
3.2 KiB
Python
"""Configuration for unit tests."""
|
|
from importlib import util
|
|
from typing import Dict, Sequence
|
|
|
|
import pytest
|
|
from pytest import Config, Function, Parser
|
|
|
|
|
|
def pytest_addoption(parser: Parser) -> None:
|
|
"""Add custom command line options to pytest."""
|
|
parser.addoption(
|
|
"--only-extended",
|
|
action="store_true",
|
|
help="Only run extended tests. Does not allow skipping any extended tests.",
|
|
)
|
|
parser.addoption(
|
|
"--only-core",
|
|
action="store_true",
|
|
help="Only run core tests. Never runs any extended tests.",
|
|
)
|
|
|
|
|
|
def pytest_collection_modifyitems(config: Config, items: Sequence[Function]) -> None:
|
|
"""Add implementations for handling custom markers.
|
|
|
|
At the moment, this adds support for a custom `requires` marker.
|
|
|
|
The `requires` marker is used to denote tests that require one or more packages
|
|
to be installed to run. If the package is not installed, the test is skipped.
|
|
|
|
The `requires` marker syntax is:
|
|
|
|
.. code-block:: python
|
|
|
|
@pytest.mark.requires("package1", "package2")
|
|
def test_something():
|
|
...
|
|
"""
|
|
# Mapping from the name of a package to whether it is installed or not.
|
|
# Used to avoid repeated calls to `util.find_spec`
|
|
required_pkgs_info: Dict[str, bool] = {}
|
|
|
|
only_extended = config.getoption("--only-extended") or False
|
|
only_core = config.getoption("--only-core") or False
|
|
|
|
if only_extended and only_core:
|
|
raise ValueError("Cannot specify both `--only-extended` and `--only-core`.")
|
|
|
|
for item in items:
|
|
requires_marker = item.get_closest_marker("requires")
|
|
if requires_marker is not None:
|
|
if only_core:
|
|
item.add_marker(pytest.mark.skip(reason="Skipping not a core test."))
|
|
continue
|
|
|
|
# Iterate through the list of required packages
|
|
required_pkgs = requires_marker.args
|
|
for pkg in required_pkgs:
|
|
# If we haven't yet checked whether the pkg is installed
|
|
# let's check it and store the result.
|
|
if pkg not in required_pkgs_info:
|
|
try:
|
|
installed = util.find_spec(pkg) is not None
|
|
except Exception:
|
|
installed = False
|
|
required_pkgs_info[pkg] = installed
|
|
|
|
if not required_pkgs_info[pkg]:
|
|
if only_extended:
|
|
pytest.fail(
|
|
f"Package `{pkg}` is not installed but is required for "
|
|
f"extended tests. Please install the given package and "
|
|
f"try again.",
|
|
)
|
|
|
|
else:
|
|
# If the package is not installed, we immediately break
|
|
# and mark the test as skipped.
|
|
item.add_marker(
|
|
pytest.mark.skip(reason=f"Requires pkg: `{pkg}`")
|
|
)
|
|
break
|
|
else:
|
|
if only_extended:
|
|
item.add_marker(
|
|
pytest.mark.skip(reason="Skipping not an extended test.")
|
|
)
|