Files
orion/scripts/check_tracking_schema.py
Samir Boulahtit f20266167d
Some checks failed
CI / ruff (push) Failing after 7s
CI / pytest (push) Failing after 1s
CI / architecture (push) Failing after 9s
CI / dependency-scanning (push) Successful in 27s
CI / audit (push) Successful in 8s
CI / docs (push) Has been skipped
fix(lint): auto-fix ruff violations and tune lint rules
- Auto-fixed 4,496 lint issues (import sorting, modern syntax, etc.)
- Added ignore rules for patterns intentional in this codebase:
  E402 (late imports), E712 (SQLAlchemy filters), B904 (raise from),
  SIM108/SIM105/SIM117 (readability preferences)
- Added per-file ignores for tests and scripts
- Excluded broken scripts/rename_terminology.py (has curly quotes)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 23:10:42 +01:00

202 lines
6.1 KiB
Python

#!/usr/bin/env python3
"""
Quick script to check Letzshop tracking schema and test tracking query.
Usage:
python scripts/check_tracking_schema.py YOUR_API_KEY
"""
import sys
import requests
ENDPOINT = "https://letzshop.lu/graphql"
def run_query(api_key: str, query: str, variables: dict = None) -> dict:
"""Execute a GraphQL query."""
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
}
payload = {"query": query}
if variables:
payload["variables"] = variables
response = requests.post(ENDPOINT, json=payload, headers=headers, timeout=30)
return response.json()
def main():
if len(sys.argv) < 2:
print("Usage: python scripts/check_tracking_schema.py YOUR_API_KEY")
sys.exit(1)
api_key = sys.argv[1]
print("=" * 60)
print("Letzshop Tracking Schema Investigation")
print("=" * 60)
# 1. Introspect Tracking type
print("\n1. Checking Tracking type schema...")
tracking_query = """
{
__type(name: "Tracking") {
name
kind
fields {
name
type {
name
kind
ofType { name kind }
}
}
}
}
"""
result = run_query(api_key, tracking_query)
if "errors" in result:
print(f" Error: {result['errors']}")
else:
type_data = result.get("data", {}).get("__type")
if type_data and type_data.get("fields"):
print(" Tracking type fields:")
for field in type_data["fields"]:
type_info = field.get("type", {})
type_name = type_info.get("name") or type_info.get("ofType", {}).get("name", "?")
print(f" - {field['name']}: {type_name}")
else:
print(" Tracking type not found or has no fields")
# 2. Check Shipment tracking-related fields
print("\n2. Checking Shipment type for tracking fields...")
shipment_query = """
{
__type(name: "Shipment") {
name
fields {
name
type {
name
kind
ofType { name kind }
}
}
}
}
"""
result = run_query(api_key, shipment_query)
if "errors" in result:
print(f" Error: {result['errors']}")
else:
type_data = result.get("data", {}).get("__type")
if type_data and type_data.get("fields"):
tracking_fields = [
f for f in type_data["fields"]
if any(term in f["name"].lower() for term in ["track", "carrier", "number"])
]
print(" Tracking-related fields on Shipment:")
for field in tracking_fields:
type_info = field.get("type", {})
type_name = type_info.get("name") or type_info.get("ofType", {}).get("name", "?")
print(f" - {field['name']}: {type_name}")
# 3. Test querying tracking on a confirmed shipment
print("\n3. Testing tracking query on confirmed shipments...")
test_query = """
query {
shipments(state: confirmed, first: 1) {
nodes {
id
number
state
tracking {
code
provider
}
}
}
}
"""
result = run_query(api_key, test_query)
if "errors" in result:
print(f" Error querying tracking: {result['errors'][0].get('message', 'Unknown')}")
else:
nodes = result.get("data", {}).get("shipments", {}).get("nodes", [])
if nodes:
shipment = nodes[0]
tracking = shipment.get("tracking")
print(f" Shipment {shipment.get('number')}:")
if tracking:
print(f" Tracking code: {tracking.get('code')}")
print(f" Tracking provider: {tracking.get('provider')}")
else:
print(" No tracking data returned")
else:
print(" No confirmed shipments found")
# 4. Try alternative field names
print("\n4. Testing alternative tracking field names...")
alt_query = """
query {
shipments(state: confirmed, first: 1) {
nodes {
id
number
}
}
}
"""
result = run_query(api_key, alt_query)
if "errors" not in result:
nodes = result.get("data", {}).get("shipments", {}).get("nodes", [])
if nodes:
shipment_id = nodes[0].get("id")
print(f" Found shipment: {shipment_id}")
# Try node query with tracking
node_query = """
query GetShipment($id: ID!) {
node(id: $id) {
... on Shipment {
id
number
tracking {
code
provider
}
}
}
}
"""
result = run_query(api_key, node_query, {"id": shipment_id})
if "errors" in result:
print(f" Node query error: {result['errors'][0].get('message', 'Unknown')}")
else:
node = result.get("data", {}).get("node", {})
tracking = node.get("tracking")
if tracking:
print(" Tracking via node query:")
print(f" Code: {tracking.get('code')}")
print(f" Provider: {tracking.get('provider')}")
else:
print(" No tracking in node query response")
print("\n" + "=" * 60)
print("Summary")
print("=" * 60)
print("""
Based on the tests above:
- If tracking fields exist but return null: tracking may not be set for this shipment
- If errors occur: the API may have issues with tracking field
- The shipment number (H74683403433) you see is different from tracking code
Note: The 'number' field on Shipment is the shipment number (H74683403433),
NOT the tracking code. The tracking code should be in tracking.code field.
""")
if __name__ == "__main__":
main()