changeset 9:1b6718a54c00

add a workaround for a str/bytes bug in cyclone SSE
author drewp@bigasterisk.com
date Wed, 24 Nov 2021 19:54:20 -0800
parents cf1f964b7c28
children 742e950b0de0
files patch_cyclone.py patchablegraph.py
diffstat 2 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patch_cyclone.py	Wed Nov 24 19:54:20 2021 -0800
@@ -0,0 +1,20 @@
+
+
+def patch_sse():
+    from cyclone import escape
+    import cyclone.sse
+    def new_sendEvent(self, message, event=None, eid=None, retry=None):
+        if isinstance(message, dict):
+            message = escape.json_encode(message)
+        if isinstance(message, str):
+            message = message.encode("utf-8")
+        assert isinstance(message, bytes)
+        if eid:
+            self.transport.write(b"id: " + eid.encode("utf-8") + b"\n")
+        if event:
+            self.transport.write(b"event: " + event + b"\n")
+        if retry:
+            self.transport.write(b"retry: " + retry.encode("utf-8") + b"\n")
+        self.transport.write(b"data: " + message + b"\n\n")
+
+    cyclone.sse.SSEHandler.sendEvent = new_sendEvent
--- a/patchablegraph.py	Wed Nov 24 19:48:44 2021 -0800
+++ b/patchablegraph.py	Wed Nov 24 19:54:20 2021 -0800
@@ -37,7 +37,9 @@
 from rdflib.namespace import NamespaceManager
 from rdflib.parser import StringInputSource
 from rdflib.plugins.serializers.jsonld import from_rdf
+import patch_cyclone
 
+patch_cyclone.patch_sse()
 log = logging.getLogger('patchablegraph')
 
 SERIALIZE_CALLS = Summary('serialize_calls', 'PatchableGraph.serialize calls')