Browse Source

Missing files and requirements

Andrei Bondarenko 3 years ago
parent
commit
5e28a8d108
6 changed files with 82 additions and 2 deletions
  1. 2 1
      framework/interactive_prompt.py
  2. 1 0
      requirements.txt
  3. 2 0
      services/__init__.py
  4. 76 0
      services/bottom/V1.py
  5. BIN
      state.p
  6. 1 1
      state/test/fixtures/state.py

+ 2 - 1
framework/interactive_prompt.py

@@ -5,6 +5,7 @@ from pprint import pprint
 import prompt_questions as questions
 from inspect import signature
 from uuid import UUID
+from ast import literal_eval
 
 
 def generate_context_question(ctx_type, services):
@@ -53,7 +54,7 @@ def main():
             args_questions = []
             types = {}
             for p in signature(method).parameters.values():
-                types[p.name] = p.annotation  # can't use filter in question dict, doesn't work for some reason...
+                types[p.name] = p.annotation if p.annotation else literal_eval  # can't use filter in question dict, doesn't work for some reason...
                 if p.annotation == UUID:
                     args_questions.append({
                         'type': 'list',

+ 1 - 0
requirements.txt

@@ -1,3 +1,4 @@
 pytest==6.2.4
 neo4j==4.3.4
 rdflib==6.0.0
+PyInquirer==1.0.3

+ 2 - 0
services/__init__.py

@@ -1,9 +1,11 @@
 from services.scd import SCD
 from services.point.cartesian import PointCartesian
 from services.point.polar import PointPolar
+from services.bottom.V1 import Bottom
 
 implemented = {
     "SCD": SCD,
     "PointCartesian": PointCartesian,
     "PointPolar": PointPolar,
+    "Bottom": Bottom
 }

+ 76 - 0
services/bottom/V1.py

@@ -0,0 +1,76 @@
+from uuid import UUID
+from state.base import State
+from services.bottom.V0 import Bottom as BottomV0
+
+
+class Bottom:
+    def __init__(self, model: UUID, state: State):
+        type_model_id = state.read_dict(state.read_root(), "Bottom")
+        self.type_model = UUID(state.read_value(type_model_id))
+        self.model = model
+        self.bottom = BottomV0(state)
+
+    def create_node(self, name: str, value=None):
+
+        if value is None:
+            n = self.bottom.create_node()
+        else:
+            n = self.bottom.create_node(value)
+        self.bottom.create_edge(self.model, n, label=name)
+
+    def create_edge(self, name: str, source: str, target: str):
+        try:
+            src, = self.bottom.read_outgoing_elements(self.model, source)
+        except ValueError:
+            raise RuntimeError(f"No element named {source}")
+        try:
+            tgt, = self.bottom.read_outgoing_elements(self.model, source)
+        except ValueError:
+            raise RuntimeError(f"No element named {target}")
+        e = self.bottom.create_edge(src, tgt)
+        self.bottom.create_edge(self.model, e, label=name)
+
+    def read_value(self, name: str):
+        try:
+            element, = self.bottom.read_outgoing_elements(self.model, name)
+            return self.bottom.read_value(element)
+        except ValueError:
+            raise RuntimeError(f"No element named {name}")
+
+    def read_edge_source(self, name: str):
+        try:
+            element, = self.bottom.read_outgoing_elements(self.model, name)
+            return self.bottom.read_value(element)
+        except ValueError:
+            raise RuntimeError(f"No element named {name}")
+
+    def read_edge_target(self, name: str):
+        pass
+
+    def delete_element(self, name: str):
+        try:
+            element, = self.bottom.read_outgoing_elements(self.model, name)
+            self.bottom.delete_element(element)
+        except ValueError:
+            raise RuntimeError(f"No element named {name}")
+
+    def list_elements(self):
+        tm_names = {}
+        for key in self.bottom.read_keys(self.type_model):
+            element, = self.bottom.read_outgoing_elements(self.type_model, key)
+            tm_names[element] = key
+        unsorted = []
+        for key in self.bottom.read_keys(self.model):
+            element, = self.bottom.read_outgoing_elements(self.model, key)
+            element_types = self.bottom.read_outgoing_elements(element, "Morphism")
+            type_model_elements = self.bottom.read_outgoing_elements(self.type_model)
+            element_type_node, = [e for e in element_types if e in type_model_elements]
+            unsorted.append(f"{key} : {tm_names[element_type_node]}")
+        return sorted(unsorted)
+
+    def to_bottom(self):
+        pass  # already encoded as bottom
+
+    def from_bottom(self):
+        pass  # already encoded as bottom
+

BIN
state.p


+ 1 - 1
state/test/fixtures/state.py

@@ -7,7 +7,7 @@ from state.neo4jstate import Neo4jState
 @pytest.fixture(params=[
     (PyState,),
     (RDFState, "http://example.org/#"),
-    (Neo4jState,)
+#    (Neo4jState,)
 ])
 def state(request):
     if len(request.param) > 1: