예제 #1
0
    def assign_component_type(self, model, specifications):
        if specifications.component_type_name is not None:
            type_specs = ComponentTypeSpecifications()
            type_specs.name = specifications.component_type_name
            component_types = self.component_type_repository.get(type_specs)

            if len(component_types) == 0:
                raise ComponentTypeNotFoundException(
                    "Attempted to create component with undeclared type " +
                    specifications.component_type_name + ".")

            component_type = component_types[0]
            model.component_type = component_type

            for out_socket_name in model.component_type.get_out_sockets():
                out_socket = CreationComponentOutSocket(model, out_socket_name)
                out_socket.identifier = self.identifier_repository.create()
                out_socket.language = model.language
                model.add_out_socket(out_socket)

            for in_socket_name in model.component_type.get_in_sockets():
                in_socket = CreationComponentInSocket(model, in_socket_name)
                in_socket.identifier = self.identifier_repository.create()
                in_socket.language = model.language
                model.add_in_socket(in_socket)
예제 #2
0
    def testLoadsSimpleComponent(self):
        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Constant"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)

        def test_assign(dic):
            dic["value"] = "test_value"
            dic["value_type"] = "test_value"

        component_type.assign_default_value = test_assign

        text = """<component name="constant_1" type="Constant"><value>5.17</value><type>float</type></component>"""

        self.setup_holder.component_loader.load_component(text, 0)

        self.assertEqual(1, self.setup_holder.component_repository.count())

        spec = CreationComponentSpecifications()
        spec.name = "constant_1"

        components = self.setup_holder.component_repository.get(spec)

        self.assertEqual(1, len(components))
        self.assertEqual("constant_1", components[0].name)
        self.assertEqual("Constant", components[0].get_component_type_name())
        self.assertEqual([("5.17", {})],
                         components[0].get_value_dictionary()["value"])
        self.assertEqual([("float", {})],
                         components[0].get_value_dictionary()["type"])
    def testCreateWithUndeclaredTypeRaisesException(self):
        type_specs = ComponentTypeSpecifications()
        type_specs.name = "TestType"

        specs = CreationComponentSpecifications()
        specs.component_type_name = "TestType"

        with self.assertRaises(ComponentTypeNotFoundException):
            self.repository.create(specs)
    def testCreateWithComponentTypeName(self):
        type_specs = ComponentTypeSpecifications()
        type_specs.name = "TestType"

        component_type = self.setup_holder.type_repository.create(type_specs)

        specs = CreationComponentSpecifications()
        specs.component_type_name = "TestType"

        element = self.repository.create(specs)

        self.assertIsNotNone(element.component_type)
        self.assertEqual(component_type, element.component_type)
        self.assertEqual("TestType", element.get_component_type_name())
    def testCreateAssignsLanguage(self):
        type_specs = ComponentTypeSpecifications()
        type_specs.name = "TestType"

        component_type = self.setup_holder.type_repository.create(type_specs)
        component_type.languages = ["test_language", "other_test_language"]

        specs = CreationComponentSpecifications()
        specs.component_type_name = "TestType"

        element = self.repository.create(specs)

        self.assertIsNotNone(element.language)
        self.assertEqual("test_language", element.language)
    def testCreateWithComponentTypeAssignsDefaultValue(self):
        type_specs = ComponentTypeSpecifications()
        type_specs.name = "TestType"

        component_type = self.setup_holder.type_repository.create(type_specs)

        def test_assign(dic):
            dic["test_field"] = "test_value"

        component_type.assign_default_value = test_assign

        specs = CreationComponentSpecifications()
        specs.component_type_name = "TestType"

        element = self.repository.create(specs)

        self.assertIsNotNone(element.component_value)
        self.assertEqual({"test_field": "test_value"}, element.component_value)
    def testCreateAssignsInSockets(self):
        type_specs = ComponentTypeSpecifications()
        type_specs.name = "TestType"

        component_type = self.setup_holder.type_repository.create(type_specs)
        component_type.in_sockets = ["in_1", "in_2"]

        specs = CreationComponentSpecifications()
        specs.component_type_name = "TestType"

        element = self.repository.create(specs)

        self.assertIsNotNone(element.out_sockets)
        self.assertIsNotNone(element.in_sockets)
        self.assertEqual(0, element.count_out_sockets())
        self.assertEqual(2, element.count_in_sockets())

        self.assertIn("in_1", element.in_sockets)
        self.assertIn("in_1", element.in_sockets)
        self.assertIsNotNone(element.get_in_socket("in_1"))
        self.assertIsNotNone(element.get_in_socket("in_2"))
예제 #8
0
    def testLoadsLanguagesCorrect(self):
        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Constant"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.out_sockets = ["output"]
        component_type.languages = ["test_language"]

        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Add"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.in_sockets = ["left", "right"]
        component_type.languages = ["tensorflow", "python"]

        filename = "add_constants.xml"
        filepath = self.setup_holder.filepath_handler.get_test_block_path(
            filename)
        self.setup_holder.block_loader.load(filepath)

        spec = CreationComponentSpecifications()
        spec.name = "constant_1"
        component = self.setup_holder.component_repository.get(spec)[0]
        self.assertEqual("test_language", component.language)

        spec = CreationComponentSpecifications()
        spec.name = "adder"
        component = self.setup_holder.component_repository.get(spec)[0]
        self.assertEqual("python", component.language)
예제 #9
0
    def testLoadsFromFile(self):
        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Constant"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.out_sockets = ["output"]

        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Add"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.in_sockets = ["left", "right"]

        filename = "add_constants.xml"
        filepath = self.setup_holder.filepath_handler.get_test_block_path(
            filename)

        self.setup_holder.block_loader.load(filepath)

        self.assertEqual(1, self.setup_holder.canvas_repository.count())
        self.assertEqual(3, self.setup_holder.component_repository.count())
        self.assertEqual(
            2,
            list(self.setup_holder.graph_repository.elements.values())
            [0].count_edges())
예제 #10
0
    def testLoadsFullWithVariable(self):
        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Constant"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.out_sockets = ["out"]

        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Printer"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.in_sockets = ["in"]

        text = """<block>
        <configuration>
        <variable name="test_variable"><default_value>45</default_value></variable>
        </configuration>
        <canvas name="main">
        <component name="constant_1" type="Constant"></component>
        <component name="printer" type="Printer"></component>
        <edge><source socket=out>constant_1</source><target socket=in>printer</target></edge>
        </canvas>
        </block>"""

        self.setup_holder.block_loader.load_block(text, 0)

        self.assertEqual(1, self.setup_holder.canvas_repository.count())
        self.assertEqual(1, self.setup_holder.variable_repository.count())
예제 #11
0
    def testLoadsSimpleCanvasWithEdge(self):
        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Constant"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.out_sockets = ["out"]

        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Printer"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.in_sockets = ["in"]

        text = """<canvas name="main">
        <component name="constant_1" type="Constant"></component>
        <component name="printer" type="Printer"></component>
        <edge><source socket=out>constant_1</source><target socket=in>printer</target></edge>
        </canvas>"""

        self.setup_holder.canvas_loader.load_canvas(text, 0)

        spec = CreationComponentSpecifications()
        spec.name = "constant_1"
        components = self.setup_holder.component_repository.get(spec)
        graph = components[0].graph

        self.assertEqual(1, len(graph.get_edges()))
        self.assertEqual(2, len(graph.get_vertices()))

        edge = graph.get_edges()[0]
        self.assertEqual("constant_1", edge.get_source_component_name())
        self.assertEqual("printer", edge.get_target_component_name())
예제 #12
0
    def testEdgeLoadersRaisesExceptionForUnknownTargetSocket(self):
        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Constant"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.out_sockets = ["out"]

        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Printer"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.in_sockets = ["in"]

        text = """<block><canvas name="main">
        <component name="constant_1" type="Constant"></component>
        <component name="printer" type="Printer"></component>
        <edge><source socket=output>constant_1</source><target socket=hahano>printer</target></edge>
        </canvas></block>"""

        with self.assertRaises(SocketNotFoundException):
            self.setup_holder.block_loader.load_block(text, 0)
예제 #13
0
    def testLoadsFullBlockTwoCanvases(self):
        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Constant"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.out_sockets = ["out"]

        component_type_spec = ComponentTypeSpecifications()
        component_type_spec.name = "Printer"
        component_type = self.setup_holder.type_repository.create(
            component_type_spec)
        component_type.in_sockets = ["in"]

        text = """<block>
        <canvas name="main">
        <component name="constant_1" type="Constant"></component>
        <component name="printer" type="Printer"></component>
        <edge><source socket=out>constant_1</source><target socket=in>printer</target></edge>
        </canvas>
        <canvas name="secondary">
        <component name="constant_1_s" type="Constant"></component>
        <component name="printer_s" type="Printer"></component>
        <edge><source socket=out>constant_1_s</source><target socket=in>printer_s</target></edge>
        </canvas>
        </block>"""

        self.setup_holder.block_loader.load_block(text, 0)

        self.assertEqual(2, self.setup_holder.canvas_repository.count())

        spec = CreationComponentSpecifications()
        spec.name = "constant_1"
        component = self.setup_holder.component_repository.get(spec)[0]
        self.assertEqual("main", component.canvas.name)

        spec = CreationComponentSpecifications()
        spec.name = "constant_1_s"
        component = self.setup_holder.component_repository.get(spec)[0]
        self.assertEqual("secondary", component.canvas.name)