mirror of
https://github.com/hwchase17/langchain.git
synced 2025-09-08 22:42:05 +00:00
infra: add min version testing to pr test flow (#24358)
xfailing some sql tests that do not currently work on sqlalchemy v1 #22207 was very much not sqlalchemy v1 compatible. Moving forward, implementations should be compatible with both to pass CI
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
from typing import AsyncGenerator, Generator, cast
|
||||
|
||||
import pytest
|
||||
import sqlalchemy as sa
|
||||
from langchain.storage._lc_store import create_kv_docstore, create_lc_store
|
||||
from langchain_core.documents import Document
|
||||
from langchain_core.stores import BaseStore
|
||||
from packaging import version
|
||||
|
||||
from langchain_community.storage.sql import SQLStore
|
||||
|
||||
is_sqlalchemy_v1 = version.parse(sa.__version__).major == 1
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sql_store() -> Generator[SQLStore, None, None]:
|
||||
@@ -22,6 +26,7 @@ async def async_sql_store() -> AsyncGenerator[SQLStore, None]:
|
||||
yield store
|
||||
|
||||
|
||||
@pytest.mark.xfail(is_sqlalchemy_v1, reason="SQLAlchemy 1.x issues")
|
||||
def test_create_lc_store(sql_store: SQLStore) -> None:
|
||||
"""Test that a docstore is created from a base store."""
|
||||
docstore: BaseStore[str, Document] = cast(
|
||||
@@ -34,6 +39,7 @@ def test_create_lc_store(sql_store: SQLStore) -> None:
|
||||
assert fetched_doc.metadata == {"key": "value"}
|
||||
|
||||
|
||||
@pytest.mark.xfail(is_sqlalchemy_v1, reason="SQLAlchemy 1.x issues")
|
||||
def test_create_kv_store(sql_store: SQLStore) -> None:
|
||||
"""Test that a docstore is created from a base store."""
|
||||
docstore = create_kv_docstore(sql_store)
|
||||
@@ -57,6 +63,7 @@ async def test_async_create_kv_store(async_sql_store: SQLStore) -> None:
|
||||
assert fetched_doc.metadata == {"key": "value"}
|
||||
|
||||
|
||||
@pytest.mark.xfail(is_sqlalchemy_v1, reason="SQLAlchemy 1.x issues")
|
||||
def test_sample_sql_docstore(sql_store: SQLStore) -> None:
|
||||
# Set values for keys
|
||||
sql_store.mset([("key1", b"value1"), ("key2", b"value2")])
|
||||
|
@@ -55,6 +55,7 @@ def db_lazy_reflection(engine: Engine) -> SQLDatabase:
|
||||
return SQLDatabase(engine, lazy_table_reflection=True)
|
||||
|
||||
|
||||
@pytest.mark.xfail(is_sqlalchemy_v1, reason="SQLAlchemy 1.x issues")
|
||||
def test_table_info(db: SQLDatabase) -> None:
|
||||
"""Test that table info is constructed properly."""
|
||||
output = db.table_info
|
||||
@@ -85,6 +86,7 @@ def test_table_info(db: SQLDatabase) -> None:
|
||||
assert sorted(" ".join(output.split())) == sorted(" ".join(expected_output.split()))
|
||||
|
||||
|
||||
@pytest.mark.xfail(is_sqlalchemy_v1, reason="SQLAlchemy 1.x issues")
|
||||
def test_table_info_lazy_reflection(db_lazy_reflection: SQLDatabase) -> None:
|
||||
"""Test that table info with lazy reflection"""
|
||||
assert len(db_lazy_reflection._metadata.sorted_tables) == 0
|
||||
@@ -111,6 +113,7 @@ def test_table_info_lazy_reflection(db_lazy_reflection: SQLDatabase) -> None:
|
||||
assert db_lazy_reflection._metadata.sorted_tables[1].name == "user"
|
||||
|
||||
|
||||
@pytest.mark.xfail(is_sqlalchemy_v1, reason="SQLAlchemy 1.x issues")
|
||||
def test_table_info_w_sample_rows(db: SQLDatabase) -> None:
|
||||
"""Test that table info is constructed properly."""
|
||||
|
||||
|
@@ -18,6 +18,9 @@ from sqlalchemy import (
|
||||
insert,
|
||||
schema,
|
||||
)
|
||||
import sqlalchemy as sa
|
||||
|
||||
from packaging import version
|
||||
|
||||
from langchain_community.utilities.sql_database import SQLDatabase
|
||||
|
||||
@@ -43,6 +46,9 @@ company = Table(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.xfail(
|
||||
version.parse(sa.__version__).major == 1, reason="SQLAlchemy 1.x issues"
|
||||
)
|
||||
def test_table_info() -> None:
|
||||
"""Test that table info is constructed properly."""
|
||||
engine = create_engine("duckdb:///:memory:")
|
||||
@@ -65,6 +71,9 @@ def test_table_info() -> None:
|
||||
assert sorted(" ".join(output.split())) == sorted(" ".join(expected_output.split()))
|
||||
|
||||
|
||||
@pytest.mark.xfail(
|
||||
version.parse(sa.__version__).major == 1, reason="SQLAlchemy 1.x issues"
|
||||
)
|
||||
def test_sql_database_run() -> None:
|
||||
"""Test that commands can be run successfully and returned in correct format."""
|
||||
engine = create_engine("duckdb:///:memory:")
|
||||
|
Reference in New Issue
Block a user