mirror of
https://github.com/hwchase17/langchain
synced 2024-11-18 09:25:54 +00:00
29ee0496b6
- **Description:** In order to override the bool value of "fetch_schema_from_transport" in the GraphQLAPIWrapper, a "fetch_schema_from_transport" value needed to be added to the "_EXTRA_OPTIONAL_TOOLS" dictionary in load_tools in the "graphql" key. The parameter "fetch_schema_from_transport" must also be passed in to the GraphQLAPIWrapper to allow reading of the value when creating the client. Passing as an optional parameter is probably best to avoid breaking changes. This change is necessary to support GraphQL instances that do not support fetching schema, such as TigerGraph. More info here: [TigerGraph GraphQL Schema Docs](https://docs.tigergraph.com/graphql/current/schema) - **Threads handle:** @zacharytoliver --------- Co-authored-by: Zachary Toliver <zt10191991@hotmail.com> Co-authored-by: Bagatur <baskaryan@gmail.com>
94 lines
2.9 KiB
Python
94 lines
2.9 KiB
Python
import json
|
|
|
|
import pytest
|
|
import responses
|
|
|
|
from langchain_community.utilities.graphql import GraphQLAPIWrapper
|
|
|
|
TEST_ENDPOINT = "http://testserver/graphql"
|
|
|
|
# Mock GraphQL response for testing
|
|
MOCK_RESPONSE = {
|
|
"data": {
|
|
"allUsers": [{"name": "Alice"}],
|
|
"__schema": {
|
|
"queryType": {"name": "Query"},
|
|
"types": [
|
|
{
|
|
"kind": "OBJECT",
|
|
"name": "Query",
|
|
"fields": [
|
|
{
|
|
"name": "allUsers",
|
|
"args": [],
|
|
"type": {
|
|
"kind": "NON_NULL",
|
|
"name": None,
|
|
"ofType": {
|
|
"kind": "OBJECT",
|
|
"name": "allUsers",
|
|
"ofType": None,
|
|
},
|
|
},
|
|
}
|
|
],
|
|
"inputFields": None,
|
|
"interfaces": [],
|
|
"enumValues": None,
|
|
"possibleTypes": None,
|
|
},
|
|
{
|
|
"kind": "SCALAR",
|
|
"name": "String",
|
|
},
|
|
{
|
|
"kind": "OBJECT",
|
|
"name": "allUsers",
|
|
"description": None,
|
|
"fields": [
|
|
{
|
|
"name": "name",
|
|
"description": None,
|
|
"args": [],
|
|
"type": {
|
|
"kind": "NON_NULL",
|
|
"name": None,
|
|
"ofType": {
|
|
"kind": "SCALAR",
|
|
"name": "String",
|
|
"ofType": None,
|
|
},
|
|
},
|
|
},
|
|
],
|
|
"inputFields": None,
|
|
"interfaces": [],
|
|
"enumValues": None,
|
|
"possibleTypes": None,
|
|
},
|
|
{
|
|
"kind": "SCALAR",
|
|
"name": "Boolean",
|
|
},
|
|
],
|
|
},
|
|
}
|
|
}
|
|
|
|
|
|
@pytest.mark.requires("gql", "requests_toolbelt")
|
|
@responses.activate
|
|
def test_run() -> None:
|
|
responses.add(responses.POST, TEST_ENDPOINT, json=MOCK_RESPONSE, status=200)
|
|
|
|
query = "query { allUsers { name } }"
|
|
graphql_wrapper = GraphQLAPIWrapper(
|
|
graphql_endpoint=TEST_ENDPOINT,
|
|
custom_headers={"Authorization": "Bearer testtoken"},
|
|
fetch_schema_from_transport=True,
|
|
)
|
|
result = graphql_wrapper.run(query)
|
|
|
|
expected_result = json.dumps(MOCK_RESPONSE["data"], indent=2)
|
|
assert result == expected_result
|