Skip to content
Snippets Groups Projects
Commit 31d937e4 authored by Matthias Stefan Bodenbenner's avatar Matthias Stefan Bodenbenner
Browse files

fixed serialization of semantic values

parent 95a70e12
Branches
Tags 9.3.6
No related merge requests found
Pipeline #375545 passed
[![Build](https://git-ce.rwth-aachen.de/wzl-mq-ms/forschung-lehre/lava/unified-device-interface/python/badges/master/pipeline.svg)](https://git-ce.rwth-aachen.de/wzl-mq-ms/forschung-lehre/lava/unified-device-interface/python/commits/master)
# Python Unified Device Interface
Current stable version: 9.3.5
Current stable version: 9.3.6
## Installation
1. Install the WZL-UDI package via pip
......@@ -58,6 +58,9 @@ Funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation)
## Recent changes
**9.3.6** - 2024-03-18
- fixed serialization of semantic values
**9.3.5** - 2024-03-18
- fixed metadata provisioning of arguments and returns
......
......@@ -4,7 +4,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
setup(name='wzl-udi',
version='9.3.5',
version='9.3.6',
url='https://git-ce.rwth-aachen.de/wzl-mq-public/soil/python',
project_urls={
"Bug Tracker": "https://git-ce.rwth-aachen.de/wzl-mq-public/soil/python/-/issues",
......
import enum
import rdflib
from .error import TypeException
from .semantics import Namespaces
class Datatype(enum.Enum):
......@@ -31,3 +34,6 @@ class Datatype(enum.Enum):
if legacy_mode:
return ["bool", "int", "double", "string", "time", "enum"][self.value]
return ["boolean", "int", "float", "string", "time", "enum"][self.value]
def to_semantic(self):
return [rdflib.XSD.boolean, rdflib.XSD.int, rdflib.XSD.float, rdflib.XSD.string, rdflib.XSD.dateTime, rdflib.XSD.string][self.value]
\ No newline at end of file
......@@ -221,7 +221,7 @@ class Measurement(Variable):
data_graph.add((measurement_subject, Namespaces.qudt.unit, unit_triples[0][2]))
data_graph.add((measurement_subject, Namespaces.schema.license, Semantics.data_license))
rdf_value = Variable.serialize_value(data_graph, self.__getitem__('value', 0))
rdf_value = self.serialize_value(data_graph, self.__getitem__('value', 0))
data_graph.add((measurement_subject, Namespaces.qudt.value, rdf_value))
data_graph.add((measurement_subject, Namespaces.schema.dateCreated,
......
......@@ -159,7 +159,7 @@ class Parameter(Variable):
result.remove(triples[0])
try:
rdf_value = Variable.serialize_value(result, self.__getitem__('value', 0))
rdf_value = self.serialize_value(result, self.__getitem__('value', 0))
result.add((Semantics.namespace[self._semantic_name], Namespaces.qudt['value'], rdf_value))
except DeviceException as e:
if isinstance(e._predecessor, NotImplementedException):
......
......@@ -129,7 +129,7 @@ class Job(ABC):
# replace value
data.remove((None, Namespaces.qudt.value, None))
data.add((measurement_subject, Namespaces.qudt.value, Variable.serialize_value(data, self.value)))
data.add((measurement_subject, Namespaces.qudt.value, self.serialize_value(data, self.value)))
# replace timestamp
data.remove((None, Namespaces.schema.dateCreated, None))
......
......@@ -289,8 +289,7 @@ class Variable(Element, ABC):
except RangeException as e:
raise e
@staticmethod
def serialize_value(data_graph: rdflib.Graph, value: Any) -> rdflib.term.Identifier:
def serialize_value(self, data_graph: rdflib.Graph, value: Any) -> rdflib.term.Identifier:
if isinstance(value, list):
blank_node = rdflib.BNode()
data_graph.add((blank_node, Namespaces.rdf.rest, Namespaces.rdf.nil))
......@@ -303,7 +302,7 @@ class Variable(Element, ABC):
blank_node = new_blank_node
return blank_node
else:
return rdflib.Literal(value)
return rdflib.Literal(value, datatype=self.datatype.to_semantic())
@staticmethod
def is_scalar(value):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment