Skip to content

Commit

Permalink
community[patch]: Add driver config param for neo4j graph (#20772)
Browse files Browse the repository at this point in the history
Co-authored-by: Bagatur <[email protected]>
  • Loading branch information
tomasonjo and baskaryan authored Apr 24, 2024
1 parent 13751c3 commit 9efab3e
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
7 changes: 6 additions & 1 deletion libs/community/langchain_community/graphs/neo4j_graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ class Neo4jGraph(GraphStore):
embedding-like properties from database responses. Default is False.
refresh_schema (bool): A flag whether to refresh schema information
at initialization. Default is True.
driver_config (Dict): Configuration passed to Neo4j Driver.
*Security note*: Make sure that the database connection uses credentials
that are narrowly-scoped to only include necessary permissions.
Expand All @@ -173,6 +174,8 @@ def __init__(
timeout: Optional[float] = None,
sanitize: bool = False,
refresh_schema: bool = True,
*,
driver_config: Optional[Dict] = None,
) -> None:
"""Create a new Neo4j graph wrapper instance."""
try:
Expand All @@ -194,7 +197,9 @@ def __init__(
{"database": database}, "database", "NEO4J_DATABASE", "neo4j"
)

self._driver = neo4j.GraphDatabase.driver(url, auth=(username, password))
self._driver = neo4j.GraphDatabase.driver(
url, auth=(username, password), **(driver_config or {})
)
self._database = database
self.timeout = timeout
self.sanitize = sanitize
Expand Down
18 changes: 18 additions & 0 deletions libs/community/tests/integration_tests/graphs/test_neo4j.py
Original file line number Diff line number Diff line change
Expand Up @@ -273,3 +273,21 @@ def test_neo4j_filtering_labels() -> None:
# Assert both are empty
assert graph.structured_schema["node_props"] == {}
assert graph.structured_schema["relationships"] == []


def test_driver_config() -> None:
"""Test that neo4j works with driver config."""
url = os.environ.get("NEO4J_URI")
username = os.environ.get("NEO4J_USERNAME")
password = os.environ.get("NEO4J_PASSWORD")
assert url is not None
assert username is not None
assert password is not None

graph = Neo4jGraph(
url=url,
username=username,
password=password,
driver_config={"max_connection_pool_size": 1},
)
graph.query("RETURN 'foo'")

0 comments on commit 9efab3e

Please sign in to comment.