Source code for owmeta_core.property_value
from json import loads, dumps
from rdflib.term import Literal, bind, Identifier, URIRef
import six
from .quantity import Quantity
from .utils import FCN
from . import BASE_SCHEMA_URL
bind(URIRef(BASE_SCHEMA_URL + '/datatype/quantity'),
Quantity,
constructor=Quantity.parse,
lexicalizer=Quantity.__str__)
bind(URIRef(BASE_SCHEMA_URL + '/datatype/list'),
list,
constructor=loads,
lexicalizer=dumps)
bind(URIRef(BASE_SCHEMA_URL + '/datatype/object'),
dict,
constructor=loads,
lexicalizer=lambda x: dumps(x, sort_keys=True))
# XXX: RDFLib should take the first match for a python type, so we'll translate into the
# list and object types above
bind(URIRef('http://markw.cc/yarom/schema/datatype/list'),
list,
constructor=loads,
lexicalizer=dumps)
bind(URIRef('http://markw.cc/yarom/schema/datatype/object'),
dict,
constructor=loads,
lexicalizer=lambda x: dumps(x, sort_keys=True))
[docs]class PropertyValue(object):
""" Holds a literal value for a property """
# Made to look like a GraphObject, but not subclassing so we can have slots
__slots__ = ('value', 'properties', 'owner_properties')
def __init__(self, value):
self.properties = []
self.owner_properties = []
if not isinstance(value, Identifier):
self.value = Literal(value)
else:
self.value = value
def triples(self, *args, **kwargs):
return []
@property
def identifier(self):
return self.value
@property
def defined(self):
return True
@property
def idl(self):
return self.identifier
def __hash__(self):
return hash(self.value)
def __str__(self):
if six.PY3:
return "PV("+self.value+")"
else:
return "PV("+self.value.encode('UTF-8')+")"
def __repr__(self):
return '{}({})'.format(FCN(type(self)), repr(self.value))
def __lt__(self, other):
return self.value < other.value
def __eq__(self, other):
if id(self) == id(other):
return True
elif isinstance(other, PropertyValue):
return self.value == other.value
else:
return False