diff --git a/artguide_backend/sparql_views.py b/artguide_backend/sparql_views.py index 9a2e55c485346eebfadec9eb7e63891259230ed9..a6783100a4c37f7332beb10c870538d7f54f2ab7 100644 --- a/artguide_backend/sparql_views.py +++ b/artguide_backend/sparql_views.py @@ -5,46 +5,38 @@ from SPARQLWrapper import SPARQLWrapper, JSON import os import json - def sparql_query(request): - """ - This function executes a SPARQL query and returns the results in JSON format. - The SPARQL endpoint is read from the environment variables. (set in Docker-compose) - """ - sparql_endpoint = 'http://fuseki:3030/data/query' - sparql = SPARQLWrapper(sparql_endpoint) - sparql.setReturnFormat(JSON) - - sparql.setQuery(""" - PREFIX : <http://h-da.de/fbi/art/> - PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> - PREFIX wd: <http://www.wikidata.org/entity/> - - SELECT ?g ?db ?dd ?pb ?pd - WHERE { - ?p a :person ; - rdfs:label "Michelangelo"; - :gender ?g; - :date_of_birth ?db; - :date_of_death ?dd ; - :place_of_death ?pd . - } - """) - - try: - response = sparql.query().convert() - # Log the raw response for debugging - if isinstance(response, bytes): - raw_response = response.decode('utf-8') - else: - raw_response = response - print("Raw response:", raw_response) # Debugging output - - # Ensure the response is properly decoded - if isinstance(response, bytes): - response = json.loads(response.decode('utf-8')) - results = response.get("results", {}).get("bindings", []) - return JsonResponse(results, safe=False) - except Exception as e: - return JsonResponse({"error": str(e)}, status=500) + """ + This function executes a SPARQL query received from the frontend and returns the results in JSON format. + The SPARQL endpoint is read from the environment variables. (set in Docker-compose) + """ + sparql_endpoint = 'http://fuseki:3030/data/query' + sparql = SPARQLWrapper(sparql_endpoint) + sparql.setReturnFormat(JSON) + + try: + # Extract SPARQL query from POST request + body = json.loads(request.body) + sparql_query = body.get('query', '') + + if not sparql_query: + return JsonResponse({"error": "No query provided"}, status=400) + + sparql.setQuery(sparql_query) + + response = sparql.query().convert() + + # Log the raw response for debugging + if isinstance(response, bytes): + raw_response = response.decode('utf-8') + else: + raw_response = response + print("Raw response:", raw_response) # Debugging output + + # Ensure the response is properly decoded + if isinstance(response, bytes): + response = json.loads(response.decode('utf-8')) + results = response.get("results", {}).get("bindings", []) + return JsonResponse(results, safe=False) + except Exception as e: + return JsonResponse({"error": str(e)}, status=500)