api layer v0.2.5 - graphql standardization

This commit is contained in:
jokob-sk
2025-08-21 15:33:32 +10:00
parent cbf2cd0ee8
commit 73fd094cfc
3 changed files with 30 additions and 10 deletions

View File

@@ -64,8 +64,15 @@ def graphql_endpoint():
# Execute the GraphQL query # Execute the GraphQL query
result = devicesSchema.execute(data.get("query"), variables=data.get("variables")) result = devicesSchema.execute(data.get("query"), variables=data.get("variables"))
# Return the result as JSON # Initialize response
return jsonify(result.data) response = {}
if result.errors:
response["errors"] = [str(e) for e in result.errors]
if result.data:
response["data"] = result.data
return jsonify(response)
# -------------------------- # --------------------------
# Device Endpoints # Device Endpoints

View File

@@ -125,7 +125,7 @@ class Query(ObjectType):
device["devParentChildrenCount"] = get_number_of_children(device["devMac"], devices_data) device["devParentChildrenCount"] = get_number_of_children(device["devMac"], devices_data)
device["devIpLong"] = format_ip_long(device.get("devLastIP", "")) device["devIpLong"] = format_ip_long(device.get("devLastIP", ""))
mylog('verbose', f'[graphql_schema] devices_data: {devices_data}') mylog('trace', f'[graphql_schema] devices_data: {devices_data}')
# Apply sorting if options are provided # Apply sorting if options are provided
@@ -134,16 +134,16 @@ class Query(ObjectType):
# Define status-specific filtering # Define status-specific filtering
if options.status: if options.status:
status = options.status status = options.status
mylog('verbose', f'[graphql_schema] Applying status filter: {status}') mylog('trace', f'[graphql_schema] Applying status filter: {status}')
# Include devices matching criteria in UI_MY_DEVICES # Include devices matching criteria in UI_MY_DEVICES
allowed_statuses = get_setting_value("UI_MY_DEVICES") allowed_statuses = get_setting_value("UI_MY_DEVICES")
hidden_relationships = get_setting_value("UI_hide_rel_types") hidden_relationships = get_setting_value("UI_hide_rel_types")
network_dev_types = get_setting_value("NETWORK_DEVICE_TYPES") network_dev_types = get_setting_value("NETWORK_DEVICE_TYPES")
mylog('verbose', f'[graphql_schema] allowed_statuses: {allowed_statuses}') mylog('trace', f'[graphql_schema] allowed_statuses: {allowed_statuses}')
mylog('verbose', f'[graphql_schema] hidden_relationships: {hidden_relationships}') mylog('trace', f'[graphql_schema] hidden_relationships: {hidden_relationships}')
mylog('verbose', f'[graphql_schema] network_dev_types: {network_dev_types}') mylog('trace', f'[graphql_schema] network_dev_types: {network_dev_types}')
# Filtering based on the "status" # Filtering based on the "status"
if status == "my_devices": if status == "my_devices":
@@ -249,7 +249,7 @@ class Query(ObjectType):
return SettingResult(settings=[], count=0) return SettingResult(settings=[], count=0)
mylog('verbose', f'[graphql_schema] settings_data: {settings_data}') mylog('trace', f'[graphql_schema] settings_data: {settings_data}')
# Convert to Setting objects # Convert to Setting objects
settings = [Setting(**setting) for setting in settings_data] settings = [Setting(**setting) for setting in settings_data]

View File

@@ -50,7 +50,12 @@ def test_graphql_post_devices(client, api_token):
"query": """ "query": """
{ {
devices { devices {
devices { devName devMac devIsRandomMac devParentChildrenCount } devices {
devGUID
devGroup
devIsRandomMac
devParentChildrenCount
}
count count
} }
} }
@@ -58,9 +63,17 @@ def test_graphql_post_devices(client, api_token):
} }
resp = client.post("/graphql", json=query, headers=auth_headers(api_token)) resp = client.post("/graphql", json=query, headers=auth_headers(api_token))
assert resp.status_code == 200 assert resp.status_code == 200
data = resp.json.get("data", {})
body = resp.get_json()
# print("FULL RESPONSE:", body)
# GraphQL spec: response always under "data"
assert "data" in body
data = body["data"]
assert "devices" in data assert "devices" in data
assert isinstance(data["devices"]["devices"], list) assert isinstance(data["devices"]["devices"], list)
assert isinstance(data["devices"]["count"], int)
def test_graphql_post_settings(client, api_token): def test_graphql_post_settings(client, api_token):
"""POST /graphql should return settings data""" """POST /graphql should return settings data"""