def map_property_value(value): if hasattr(value, "subject"): # If value has subject attribute, this must be Resource, # take its subject. return value.subject if not hasattr(value, "__iter__"): return value_to_rdf(value) else: values = [] for v in value: if hasattr(v, "subject"): values.append(v.subject) else: values.append(value_to_rdf(v)) return values
def test_decimal_to_rdf(): """ Test conversion from decimal.Decimal to Literal. """ v = value_to_rdf(decimal.Decimal("12.34")) assert type(v) == Literal
def get_by(self, **kwargs): """ Add filter conditions. Arguments are expected in form:: foaf_name = "John" Multiple arguments are supported. An example that retrieves all persons named "John Smith":: FoafPerson = session.get_class(surf.ns.FOAF.Person) for person in FoafPerson.get_by(foaf_name = "John", foaf_surname = "Smith"): print person.subject """ params = self._params.copy() # Don't overwrite existing get_by parameters, just append new ones. # Overwriting get_by params would cause resource.some_attr.get_by() # to work incorrectly. params.setdefault("get_by", []) for name, value in kwargs.items(): attr, direct = attr2rdf(name) if hasattr(value, "subject"): # If value has a subject attribute, this must be a Resource, # take its subject. value = value.subject elif not isinstance(value, basestring) and hasattr( value, "__iter__"): # Map alternatives value = [ hasattr(val, "subject") and val.subject or value_to_rdf(val) for val in value ] else: value = value_to_rdf(value) params["get_by"].append((attr, value, direct)) return ResultProxy(params)
def get_by(self, **kwargs): """ Add filter conditions. Arguments are expected in form:: foaf_name = "John" Multiple arguments are supported. An example that retrieves all persons named "John Smith":: FoafPerson = session.get_class(surf.ns.FOAF.Person) for person in FoafPerson.get_by(foaf_name = "John", foaf_surname = "Smith"): print person.subject """ params = self.__params.copy() # Don't overwrite existing get_by parameters, just append new ones. # Overwriting get_by params would cause resource.some_attr.get_by() # to work incorrectly. params.setdefault("get_by", []) for name, value in kwargs.items(): attr, direct = attr2rdf(name) if hasattr(value, "subject"): # If value has a subject attribute, this must be a Resource, # take its subject. value = value.subject elif hasattr(value, "__iter__"): # Map alternatives value = map(lambda val: hasattr(val, "subject") and val.subject or value_to_rdf(val), value) else: value = value_to_rdf(value) params["get_by"].append((attr, value, direct)) return ResultProxy(params)
def to_rdf(cls, value): """ Convert any value to it's appropriate `rdflib` construct. """ if hasattr(value, 'subject'): return value.subject return value_to_rdf(value)
def test_decimal_to_rdf(self): """ Test conversion from decimal.Decimal to Literal. """ import decimal v = value_to_rdf(decimal.Decimal("12.34")) self.assertEqual(type(v), Literal)