44import logging
55from contextlib import ExitStack
66from dataclasses import dataclass , field
7- from pathlib import Path
7+ from pathlib import Path , PurePath
88from test .data import TEST_DATA_DIR
99from test .utils import ensure_suffix
1010from test .utils .iri import URIMapper , file_uri_to_path
1111from test .utils .namespace import MF , QT , UT
1212from test .utils .rdftest import Manifest , ManifestEntry , params_from_sources
13+ from test .utils .result import ResultType , ResultTypeTrait
1314from typing import Dict , Optional , Set , Type , Union
1415from urllib .parse import urljoin
1516
1920from rdflib .namespace import RDFS
2021from rdflib .plugins .sparql .algebra import translateQuery , translateUpdate
2122from rdflib .plugins .sparql .parser import parseQuery , parseUpdate
23+ from rdflib .plugins .sparql .results .graph import GraphResultParser
24+ from rdflib .plugins .sparql .results .rdfresults import RDFResultParser
25+ from rdflib .query import Result
2226from rdflib .term import BNode , IdentifiedNode , Identifier , Literal , Node , URIRef
2327from rdflib .util import guess_format
2428
@@ -133,8 +137,7 @@ def from_graph(cls, graph: Graph, identifier: Identifier) -> "GraphData":
133137 raise ValueError (f"invalid identifier { identifier !r} " )
134138
135139 def load_into (self , manifest : Manifest , dataset : Dataset ) -> None :
136- graph_local = manifest .uri_mapper .to_local (self .graph_id )
137- graph_path = file_uri_to_path (graph_local , Path )
140+ graph_local , graph_path = manifest .uri_mapper .to_local (self .graph_id )
138141 graph_text = graph_path .read_text ()
139142 public_id = self .label if self .label is not None else self .graph_id
140143 logging .debug (
@@ -237,14 +240,53 @@ def __post_init__(self) -> None:
237240 # def query(self) ->
238241
239242
243+ # class ResultType(enum.Enum):
244+ # SELECT = "SELECT"
245+ # ASK = "ASK"
246+
247+
248+ class ResultFileHelper :
249+ extentions = {
250+ "srx" : "xml" ,
251+ "srj" : "json" ,
252+ "csv" : "csv" ,
253+ }
254+
255+ # @classmethod
256+ # def guess_format(cls, path: PurePath) -> Optional[str]:
257+ # return cls.extentions.get(path.suffix[1:], None)
258+
259+ @classmethod
260+ def load_result (cls , uri_mapper : URIMapper , result_uri : str , type : str ) -> Result :
261+ result_local , result_path = uri_mapper .to_local (result_uri )
262+ ext = result_path .suffix [1 :]
263+ format = cls .extentions .get (ext )
264+ if format is not None :
265+ with result_path .open ("r" ) as tio :
266+ return Result .parse (tio , format = format )
267+ graph = Graph ()
268+ graph .parse (result_path , publicID = result_uri )
269+ return RDFResultParser ().parse (graph )
270+
271+ # if ResultTypeTrait.GRAPH_RESULT in ResultType.ASK.info.traits:
272+ # RDFResultParser
273+
274+ # format = cls.guess_format(path)
275+ # if type in ("ASK", "SELECT"):
276+ # with path.open("r") as tio:
277+ # return Result.parse(tio, format=format)
278+ # if type in ("DESCRIBE", "CONSTRUCT"):
279+ # with path.open("rb") as bio:
280+ # return GraphResultParser.parse(bio, format=format)
281+
282+
240283BLANK_GRAPH = Graph ()
241284
242285
243286def check_syntax (entry : SPARQLEntry ) -> None :
244287 assert entry .query is not None
245288 assert entry .type_info .query_type is not None
246- query_local = entry .manifest .uri_mapper .to_local (entry .query )
247- query_path = file_uri_to_path (query_local , Path )
289+ query_local , query_path = entry .manifest .uri_mapper .to_local (entry .query )
248290 query_text = query_path .read_text ()
249291 logging .debug ("query = %s\n %s" , query_path , query_text )
250292 catcher : Optional [pytest .ExceptionInfo [Exception ]] = None
@@ -270,14 +312,14 @@ def check_update(entry: SPARQLEntry) -> None:
270312def check_query (entry : SPARQLEntry ) -> None :
271313 assert entry .query is not None
272314 # assert entry.action_data is not None or entry.action_graph_data is not None
273- query_local = entry .manifest .uri_mapper .to_local (entry .query )
274- query_path = file_uri_to_path (query_local , Path )
315+ query_local , query_path = entry .manifest .uri_mapper .to_local (entry .query )
275316 query_text = query_path .read_text ()
276317 logging .debug ("query = %s\n %s" , query_path , query_text )
277318 dataset = Dataset ()
278319 if entry .action_data is not None :
279- action_data_local = entry .manifest .uri_mapper .to_local (entry .action_data )
280- action_data_path = file_uri_to_path (action_data_local , Path )
320+ action_data_local , action_data_path = entry .manifest .uri_mapper .to_local (
321+ entry .action_data
322+ )
281323 action_data_text = action_data_path .read_text ()
282324 logging .debug ("action_data = %s\n %s" , action_data_path , action_data_text )
283325 dataset .default_context .parse (
0 commit comments