diff --git a/README.md b/README.md index dfe08b16bbd4993c40756d6c08e0704195ee7f2d..4fd613affd8134ecce06932c252fe75deb2efc0b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [](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.2 +Current stable version: 9.3.3 ## 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.3** - 2024-03-15 + - fixed streaming functions + **9.3.2** - 2024-03-14 - fixed semantic name resolution (again) diff --git a/setup.py b/setup.py index 1169d5df9e927885f9ea5d88e9b90f595984a783..e85302ea5f6430b9c632edc48908fa79ca676145 100644 --- a/setup.py +++ b/setup.py @@ -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.2', + version='9.3.3', 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", diff --git a/src/http/server.py b/src/http/server.py index cfe5c2bde54dca94acbdc90f483ef2c8b5b21b19..c8a653e770397fc3f19c65ec3af082cc086f41ab 100644 --- a/src/http/server.py +++ b/src/http/server.py @@ -273,9 +273,10 @@ class HTTPServer(object): try: async for item in item.invoke_generator(data["arguments"], legacy_mode=self._legacy_mode): self._publisher.publish('/'.join(uuids), json.dumps(item)) - response = {} - except StopAsyncIteration: - pass + except RuntimeError as e: + if not isinstance(e.__cause__, StopAsyncIteration): + raise e + response = {} else: response = await item.invoke(data["arguments"], legacy_mode=self._legacy_mode) status = 200 diff --git a/src/soil/function.py b/src/soil/function.py index fb4b4ec1ebf02c42354d78484f00109eba045f22..da5fde67c74197f271783e61e3de2ce08d5df44c 100644 --- a/src/soil/function.py +++ b/src/soil/function.py @@ -117,7 +117,6 @@ class Function(Element): return returns async def invoke_generator(self, arguments: List[Variable], legacy_mode: bool = False) -> Dict[str, List[Dict[str, Any]]]: - returns = {"returns": []} args = {} if self._implementation is None: raise NotImplementedException(self._uuid, self._name) @@ -146,7 +145,7 @@ class Function(Element): except StopIteration as e: raise e except StopIteration or StopAsyncIteration as e: - raise e + raise StopAsyncIteration() except Exception as e: raise DeviceException(str(e), predecessor=e) diff --git a/src/soil/stream.py b/src/soil/stream.py index 1aba0ee20d36ba6c4539332061a552fed4f78484..9c9b35c905b62be6426f3174b12eb5c060efe294 100644 --- a/src/soil/stream.py +++ b/src/soil/stream.py @@ -9,10 +9,12 @@ from wzl.mqtt.exceptions import ClientNotFoundError from .component import Component from .event import Event +from . import variable from .variable import Variable from .semantics import Namespaces from ..utils import root_logger from ..utils import serialize +from ..utils.resources import ResourceType logger = root_logger.get(__name__) @@ -105,7 +107,7 @@ class Job(ABC): try: uuids = self.topic.split('/') element = model.__getitem__(uuids) - return element.semantic_name, element.serialize_semantics('data') + return element.semantic_name, element.serialize_semantics(ResourceType.data) except Exception: return "", rdflib.Graph() @@ -114,7 +116,7 @@ class Job(ABC): data = self._retrieve_metadata(model) data['uuid'] = self.topic data['value'] = self.value - data['timestamp'] = figure.serialize_time(datetime.datetime.now()) + data['timestamp'] = variable.serialize_time(datetime.datetime.now()) return data except Exception as e: raise JobError()