Enhanced ExecutionContext to keep track of the execution flow
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import dataclasses
|
||||
import json
|
||||
import pickle
|
||||
import datetime
|
||||
@@ -10,6 +11,9 @@ from enum import Enum
|
||||
import core.utils
|
||||
|
||||
from core.concept import Concept
|
||||
from core.tokenizer import Token
|
||||
from parsers.BaseParser import Node
|
||||
|
||||
|
||||
def json_default_converter(o):
|
||||
"""
|
||||
@@ -23,7 +27,13 @@ def json_default_converter(o):
|
||||
return o.isoformat()
|
||||
|
||||
if isinstance(o, Enum):
|
||||
return o.key
|
||||
return o.name
|
||||
|
||||
raise Exception("Cannot serialize " + o.__class__.__name__)
|
||||
# with open("json_encoding_error.txt", "a") as f:
|
||||
# f.write(o.__class__.__name__ + "\n")
|
||||
|
||||
|
||||
|
||||
|
||||
@dataclass()
|
||||
@@ -51,6 +61,7 @@ class Serializer:
|
||||
self.register(StateSerializer())
|
||||
self.register(ConceptSerializer())
|
||||
self.register(DictionarySerializer())
|
||||
self.register(ExecutionContextSerializer())
|
||||
|
||||
def register(self, serializer):
|
||||
"""
|
||||
@@ -161,9 +172,9 @@ class EventSerializer(BaseSerializer):
|
||||
return event
|
||||
|
||||
|
||||
class ObjectSerializer(BaseSerializer):
|
||||
class JsonSerializer(BaseSerializer):
|
||||
|
||||
def __init__(self, fully_qualified_name, name="O", version=1):
|
||||
def __init__(self, fully_qualified_name, name="J", version=1):
|
||||
BaseSerializer.__init__(self, name, version)
|
||||
self.fully_qualified_name = fully_qualified_name
|
||||
|
||||
@@ -219,9 +230,9 @@ class StateSerializer(PickleSerializer):
|
||||
1)
|
||||
|
||||
|
||||
class ConceptSerializer(ObjectSerializer):
|
||||
class ConceptSerializer(JsonSerializer):
|
||||
def __init__(self):
|
||||
ObjectSerializer.__init__(self, "core.concept.Concept", "C", 1)
|
||||
JsonSerializer.__init__(self, "core.concept.Concept", "C", 1)
|
||||
|
||||
def matches(self, obj):
|
||||
return isinstance(obj, Concept)
|
||||
@@ -235,6 +246,27 @@ class DictionarySerializer(PickleSerializer):
|
||||
"D",
|
||||
1)
|
||||
|
||||
|
||||
class ExecutionContextSerializer(BaseSerializer):
|
||||
def __init__(self):
|
||||
BaseSerializer.__init__(self, "R", 1)
|
||||
|
||||
def matches(self, obj):
|
||||
return core.utils.get_full_qualified_name(obj) == "core.sheerka.ExecutionContext"
|
||||
|
||||
def dump(self, stream, obj, context):
|
||||
as_json = obj.to_dict()
|
||||
stream.write(json.dumps(as_json, default=json_default_converter).encode("utf-8"))
|
||||
stream.seek(0)
|
||||
return stream
|
||||
|
||||
def load(self, stream, context):
|
||||
json_stream = stream.read().decode("utf-8")
|
||||
json_message = json.loads(json_stream)
|
||||
obj = core.utils.get_class("core.sheerka.ExecutionContext")()
|
||||
obj.from_dict(json_message)
|
||||
return obj
|
||||
|
||||
#
|
||||
# class SheerkaSerializer(ObjectSerializer):
|
||||
# def __init__(self):
|
||||
|
||||
Reference in New Issue
Block a user