Adding bytes as a type

This commit is contained in:
Inte Vleminckx 2025-02-05 15:20:25 +01:00
parent 6c41c83f4f
commit 86cd7027f3
7 changed files with 57 additions and 4 deletions

View file

@ -5,6 +5,7 @@ from services.primitives.integer_type import Integer
from services.primitives.string_type import String
from services.primitives.boolean_type import Boolean
from services.primitives.actioncode_type import ActionCode
from services.primitives.bytes_type import Bytes
from api.cd import CDAPI
from typing import Optional
@ -147,6 +148,13 @@ class OD:
actioncode_t.create(value)
return self.create_model_ref(name, "ActionCode", actioncode_node)
def create_bytes_value(self, name: str, value: str):
from services.primitives.bytes_type import Bytes
bytes_node = self.bottom.create_node()
bytes_t = Bytes(bytes_node, self.bottom.state)
bytes_t.create(value)
return self.create_model_ref(name, "Bytes", bytes_node)
# Identical to the same SCD method:
def create_model_ref(self, name: str, type_name: str, model: UUID):
# create element + morphism links
@ -389,6 +397,8 @@ def read_primitive_value(bottom, modelref: UUID, mm: UUID):
return Boolean(referred_model, bottom.state).read(), typ_name
elif typ_name == "ActionCode":
return ActionCode(referred_model, bottom.state).read(), typ_name
elif typ_name == "Bytes":
return Bytes(referred_model, bottom.state).read(), typ_name
else:
raise Exception("Unimplemented type:", typ_name)

View file

@ -0,0 +1,24 @@
from uuid import UUID
from state.base import State
from services.bottom.V0 import Bottom
class Bytes:
def __init__(self, model: UUID, state: State):
self.model = model
self.bottom = Bottom(state)
type_model_id_node, = self.bottom.read_outgoing_elements(state.read_root(), "Bytes")
self.type_model = UUID(self.bottom.read_value(type_model_id_node))
def create(self, value: bool):
if "bytes" in self.bottom.read_keys(self.model):
instance, = self.bottom.read_outgoing_elements(self.model, "bytes")
self.bottom.delete_element(instance)
_instance = self.bottom.create_node(value)
self.bottom.create_edge(self.model, _instance, "bytes")
_type, = self.bottom.read_outgoing_elements(self.type_model, "Bytes")
self.bottom.create_edge(_instance, _type, "Morphism")
def read(self):
instance, = self.bottom.read_outgoing_elements(self.model, "bytes")
return self.bottom.read_value(instance)