def __init__(self, source, content_type=None): tree = etree.parse(source) boolean = tree.find(RESULTS_NS_ET + 'boolean') results = tree.find(RESULTS_NS_ET + 'results') if boolean is not None: type_ = 'ASK' elif results is not None: type_ = 'SELECT' else: raise ResultException( "No RDF result-bindings or boolean answer found!") Result.__init__(self, type_) if type_ == 'SELECT': self.bindings = [] for result in results: r = {} for binding in result: r[Variable(binding.get('name'))] = parseTerm(binding[0]) self.bindings.append(r) self.vars = [ Variable(x.get("name")) for x in tree.findall('./%shead/%svariable' % (RESULTS_NS_ET, RESULTS_NS_ET)) ] else: self.askAnswer = boolean.text.lower().strip() == "true"
class XMLResult(Result): def __init__(self, source): xmlstring = source.read() if isinstance(xmlstring, unicode): xmlstring = xmlstring.encode('utf-8') try: tree = ElementTree.fromstring(xmlstring) except Exception, e: try: raise e.__class__("error parsing %r: %s" % (xmlstring, e)) except: raise e boolean = tree.find(RESULTS_NS_ET + 'boolean') results = tree.find(RESULTS_NS_ET + 'results') if boolean != None: type_ = 'ASK' elif results != None: type_ = 'SELECT' else: g = Graph() try: g.parse(data=xmlstring) if len(g) == 0: raise type_ = 'CONSTRUCT' except: raise ResultException( "No RDF Graph, result-bindings or boolean answer found!") Result.__init__(self, type_) if type_ == 'SELECT': self.bindings = [] for result in results: r = {} for binding in result: r[Variable(binding.get('name'))] = parseTerm(binding[0]) self.bindings.append(r) self.vars = [ Variable(x.get("name")) for x in tree.findall('./%shead/%svariable' % (RESULTS_NS_ET, RESULTS_NS_ET)) ] elif type_ == 'ASK': self.askAnswer = bool(boolean.text) elif type_ == 'CONSTRUCT': self.graph = g
def __init__(self, source): xmlstring = source.read() if isinstance(xmlstring, text_type): xmlstring = xmlstring.encode('utf-8') try: parser = etree.XMLParser(huge_tree=True) tree = etree.parse(BytesIO(xmlstring), parser) except TypeError: tree = etree.fromstring(xmlstring) except Exception as e: log.exception("Error parsing XML results: %s" % xmlstring) raise e boolean = tree.find(RESULTS_NS_ET + 'boolean') results = tree.find(RESULTS_NS_ET + 'results') if boolean is not None: type_ = 'ASK' elif results is not None: type_ = 'SELECT' else: g = Graph() try: g.parse(data=xmlstring) if len(g) == 0: raise type_ = 'CONSTRUCT' except: raise ResultException( "No RDF Graph, result-bindings or boolean answer found!") Result.__init__(self, type_) if type_ == 'SELECT': self.bindings = [] for result in results: r = {} for binding in result: r[Variable(binding.get('name'))] = parseTerm(binding[0]) self.bindings.append(r) self.vars = [ Variable(x.get("name")) for x in tree.findall('./%shead/%svariable' % (RESULTS_NS_ET, RESULTS_NS_ET)) ] elif type_ == 'ASK': self.askAnswer = boolean.text.lower().strip() == "true" elif type_ == 'CONSTRUCT': self.graph = g
def __init__(self, json): self.json = json if "boolean" in json: type_ = 'ASK' elif "results" in json: type_ = 'SELECT' else: raise ResultException('No boolean or results in json!') Result.__init__(self, type_) if type_ == 'ASK': self.askAnswer = bool(json['boolean']) else: self.bindings = self._get_bindings()
def __init__(self, json): self.json = json if "boolean" in json: type_ = "ASK" elif "results" in json: type_ = "SELECT" else: raise ResultException("No boolean or results in json!") Result.__init__(self, type_) if type_ == "ASK": self.askAnswer = bool(json["boolean"]) else: self.bindings = self._get_bindings() self.vars = [Variable(x) for x in json["head"]["vars"]]
def termToJSON(self, term): if isinstance(term, URIRef): return {"type": "uri", "value": str(term)} elif isinstance(term, Literal): r = {"type": "literal", "value": str(term)} if term.datatype is not None: r["datatype"] = str(term.datatype) if term.language is not None: r["xml:lang"] = term.language return r elif isinstance(term, BNode): return {"type": "bnode", "value": str(term)} elif term is None: return None else: raise ResultException("Unknown term type: %s (%s)" % (term, type(term)))
def termToJSON(self, term): if isinstance(term, URIRef): return {'type': 'uri', 'value': text_type(term)} elif isinstance(term, Literal): r = {'type': 'literal', 'value': text_type(term)} if term.datatype is not None: r['datatype'] = text_type(term.datatype) if term.language is not None: r['xml:lang'] = term.language return r elif isinstance(term, BNode): return {'type': 'bnode', 'value': str(term)} elif term is None: return None else: raise ResultException('Unknown term type: %s (%s)' % (term, type(term)))
def __init__(self, source, content_type: Optional[str] = None): try: # try use as if etree is from lxml, and if not use it as normal. parser = etree.XMLParser(huge_tree=True) # type: ignore[call-arg] tree = etree.parse(source, parser) except TypeError: tree = etree.parse(source) boolean = tree.find(RESULTS_NS_ET + "boolean") results = tree.find(RESULTS_NS_ET + "results") if boolean is not None: type_ = "ASK" elif results is not None: type_ = "SELECT" else: raise ResultException("No RDF result-bindings or boolean answer found!") Result.__init__(self, type_) if type_ == "SELECT": self.bindings = [] for result in results: # type: ignore[union-attr] r = {} for binding in result: r[Variable(binding.get("name"))] = parseTerm(binding[0]) self.bindings.append(r) self.vars = [ Variable(x.get("name")) for x in tree.findall( "./%shead/%svariable" % (RESULTS_NS_ET, RESULTS_NS_ET) ) ] else: self.askAnswer = boolean.text.lower().strip() == "true" # type: ignore[union-attr]