Пример #1
0
 def test_to_dict(self):
     columns = OrderedDict()
     columns["foo"] = StringArrayMeta(label="Foo")
     columns["bar"] = StringArrayMeta()
     meta = TableMeta(description="desc", tags=[], writeable=True,
                      label="my label", columns=columns)
     value = Table(meta)
     value.foo = ["foo1", "foo2"]
     value.bar = ["bar1", "bar2"]
     o = meta.make_attribute(value)
     self.assertEqual(o.to_dict(), self.serialized)
Пример #2
0
 def test_to_dict(self):
     columns = OrderedDict()
     columns["foo"] = StringArrayMeta(label="Foo")
     columns["bar"] = StringArrayMeta()
     meta = TableMeta(description="desc",
                      tags=[],
                      writeable=True,
                      label="my label",
                      columns=columns)
     value = Table(meta)
     value.foo = ["foo1", "foo2"]
     value.bar = ["bar1", "bar2"]
     o = meta.make_attribute(value)
     self.assertEqual(o.to_dict(), self.serialized)
Пример #3
0
 def make_return_table(self, part_tasks):
     # Filter part tasks so that we only run the ones hooked to us
     columns = OrderedDict(name=StringArrayMeta("Part name"))
     for part in part_tasks:
         hooked = [
             method_name
             for (method_name, hook, _) in get_hook_decorated(part)
             if hook is self
         ]
         for method_name, method_meta, func in get_method_decorated(part):
             if method_name in hooked:
                 # Add return metas to the table columns
                 for arg_name in method_meta.returns.elements:
                     md = method_meta.returns.elements[arg_name].to_dict()
                     if "ArrayMeta" in md["typeid"]:
                         md["tags"] = md["tags"] + ["hook:return_array"]
                     else:
                         md["typeid"] = md["typeid"].replace(
                             "Meta", "ArrayMeta")
                     meta = deserialize_object(md, VArrayMeta)
                     if arg_name in columns:
                         column_d = columns[arg_name].to_dict()
                         assert column_d == md, \
                             "%s != %s" % (column_d, md)
                     columns[arg_name] = meta
     meta = TableMeta("Part returns from hook", columns=columns)
     return_table = Table(meta)
     return return_table
Пример #4
0
 def test_init(self):
     tm = TableMeta("desc")
     self.assertEquals("desc", tm.description)
     self.assertEquals("malcolm:core/TableMeta:1.0", tm.typeid)
     self.assertEquals((), tm.tags)
     self.assertEquals(False, tm.writeable)
     self.assertEquals("", tm.label)
Пример #5
0
 def test_from_dict(self):
     tm = TableMeta.from_dict(self.serialized)
     self.assertEquals(tm.description, "desc")
     self.assertEquals(len(tm.elements), 1)
     self.assertEquals(tm.elements["c1"].to_dict(), self.sam.to_dict())
     self.assertEquals(tm.tags, ())
     self.assertEquals(tm.writeable, True)
     self.assertEquals(tm.label, "Name")
Пример #6
0
 def test_from_dict(self):
     tm = TableMeta.from_dict(self.serialized)
     self.assertEquals(tm.description, "desc")
     self.assertEquals(len(tm.elements), 1)
     self.assertEquals(tm.elements["c1"].to_dict(), self.sam.to_dict())
     self.assertEquals(tm.tags, [])
     self.assertEquals(tm.writeable, True)
     self.assertEquals(tm.label, "Name")
Пример #7
0
 def create_attributes(self):
     for data in super(ManagerController, self).create_attributes():
         yield data
     # Make a table for the layout info we need
     columns = OrderedDict()
     columns["name"] = StringArrayMeta("Name of layout part")
     columns["mri"] = StringArrayMeta("Malcolm full name of child block")
     columns["x"] = NumberArrayMeta("float64", "X Coordinate of child block")
     columns["y"] = NumberArrayMeta("float64", "Y Coordinate of child block")
     columns["visible"] = BooleanArrayMeta("Whether child block is visible")
     layout_table_meta = TableMeta("Layout of child blocks", columns=columns)
     layout_table_meta.set_writeable_in(sm.EDITABLE)
     self.layout = layout_table_meta.make_attribute()
     yield "layout", self.layout, self.set_layout
     self.layout_name = StringMeta(
         "Saved layout name to load").make_attribute()
     self.layout_name.meta.set_writeable_in(sm.EDITABLE)
     yield "layoutName", self.layout_name, self.load_layout
Пример #8
0
class TestTableMetaValidation(unittest.TestCase):
    def setUp(self):
        self.tm = TableMeta("desc")
        self.tm.set_elements(TableElementMap(dict(c1=StringArrayMeta())))

    def test_validate_from_good_table(self):
        tm = self.tm
        t = Table(tm)
        t.c1 = ["me", "me3"]
        t_serialized = t.to_dict()
        t = tm.validate(t)
        self.assertEqual(t.to_dict(), t_serialized)

    def test_validate_from_serialized(self):
        tm = self.tm
        serialized = dict(typeid="anything", c1=("me", "me3"))
        t = tm.validate(serialized)
        self.assertEqual(t.endpoints, ["c1"])
        self.assertEqual(t.c1, serialized["c1"])
Пример #9
0
 def _make_table(self, field_name, field_data):
     group_tag = self._make_group("parameters")
     tags = [widget("table"), group_tag, config()]
     meta = TableMeta(field_data.description, tags)
     part = PandABoxTablePart(self.process,
                              self.control,
                              meta,
                              self.block_name,
                              field_name,
                              writeable=True)
     self._add_part(field_name, part)
Пример #10
0
 def create_attributes(self):
     for data in super(ManagerController, self).create_attributes():
         yield data
     # Make a table for the layout info we need
     columns = OrderedDict()
     columns["name"] = StringArrayMeta("Name of layout part")
     columns["mri"] = StringArrayMeta("Malcolm full name of child block")
     columns["x"] = NumberArrayMeta("float64", "X Coordinate of child block")
     columns["y"] = NumberArrayMeta("float64", "Y Coordinate of child block")
     columns["visible"] = BooleanArrayMeta("Whether child block is visible")
     layout_table_meta = TableMeta("Layout of child blocks", columns=columns)
     layout_table_meta.set_writeable_in(sm.EDITABLE)
     self.layout = layout_table_meta.make_attribute()
     yield "layout", self.layout, self.set_layout
     self.layout_name = ChoiceMeta(
         "Saved layout name to load", []).make_attribute()
     self.layout_name.meta.set_writeable_in(
         self.stateMachine.AFTER_RESETTING)
     yield "layoutName", self.layout_name, self.load_layout
     assert os.path.isdir(self.params.configDir), \
         "%s is not a directory" % self.params.configDir
Пример #11
0
class TestTableMetaValidation(unittest.TestCase):
    def setUp(self):
        self.tm = TableMeta("desc")
        self.tm.set_elements(TableElementMap(dict(c1=StringArrayMeta())))

    def test_validate_from_good_table(self):
        tm = self.tm
        t = Table(tm)
        t.c1 = ["me", "me3"]
        t_serialized = t.to_dict()
        t = tm.validate(t)
        self.assertEqual(t.to_dict(), t_serialized)

    def test_validate_from_serialized(self):
        tm = self.tm
        serialized = dict(
            typeid="anything",
            c1=["me", "me3"]
        )
        t = tm.validate(serialized)
        self.assertEqual(t.endpoints, ["c1"])
        self.assertEqual(t.c1, serialized["c1"])
Пример #12
0
 def setUp(self):
     self.process = Mock()
     self.control = Mock()
     fields = OrderedDict()
     fields["NREPEATS"] = (7, 0)
     fields["INPUT_MASK"] = (32, 32)
     fields["TRIGGER_MASK"] = (48, 48)
     fields["TIME_PH_A"] = (95, 64)
     self.control.get_table_fields.return_value = fields
     self.meta = TableMeta("Seq table")
     self.o = PandABoxTablePart(self.process,
                                self.control,
                                self.meta,
                                block_name="SEQ1",
                                field_name="TABLE",
                                writeable=True)
configure_args = [
    "generator",
    PointGeneratorMeta("Generator instance"), REQUIRED, "axes_to_move",
    StringArrayMeta("Axes that should be moved"), REQUIRED, "exposure",
    NumberMeta("float64", "How long to remain at each point"), REQUIRED
]

# Make a table for the layout info we need
columns = OrderedDict()
columns["name"] = StringArrayMeta("Name of layout part")
columns["mri"] = StringArrayMeta("Malcolm full name of child block")
columns["x"] = NumberArrayMeta("float64", "X Co-ordinate of child block")
columns["y"] = NumberArrayMeta("float64", "X Co-ordinate of child block")
columns["visible"] = BooleanArrayMeta("Whether child block is visible")
layout_table_meta = TableMeta("Layout of child blocks", columns=columns)

# Make a table for the port info we need
columns = OrderedDict()
columns["name"] = StringArrayMeta("Name of layout part")
columns["type"] = StringArrayMeta("Type of outport (e.g. bit or pos)")
columns["value"] = StringArrayMeta("Value of outport (e.g. PULSE1.OUT)")
outport_table_meta = TableMeta("List of ports on blocks", columns=columns)


@sm.insert
@method_takes()
class ManagerController(DefaultController):
    """RunnableDevice implementer that also exposes GUI for child parts"""
    # hooks
    Report = Hook()
Пример #14
0
 def test_to_dict(self):
     tm = TableMeta("desc")
     tm.set_label("Name")
     tm.set_elements(TableElementMap(dict(c1=self.sam)))
     tm.set_writeable(True)
     self.assertEqual(tm.to_dict(), self.serialized)
Пример #15
0
 def setUp(self):
     self.tm = TableMeta("desc")
     self.tm.set_elements(TableElementMap(dict(c1=StringArrayMeta())))
Пример #16
0
 def setUp(self):
     self.tm = TableMeta("desc")
     self.tm.set_elements(TableElementMap(dict(c1=StringArrayMeta())))
Пример #17
0
 def test_to_dict(self):
     tm = TableMeta("desc")
     tm.set_label("Name")
     tm.set_elements(TableElementMap(dict(c1=self.sam)))
     tm.set_writeable(True)
     self.assertEqual(tm.to_dict(), self.serialized)
Пример #18
0
 def setUp(self):
     tm = TableMeta("desc")
     tm.process = Mock()
     self.tm = tm
Пример #19
0
 def setUp(self):
     tm = TableMeta("desc")
     tm.report_changes = Mock(wrap=tm.report_changes)
     self.tm = tm
Пример #20
0
from malcolm.core.vmetas import StringArrayMeta, ChoiceArrayMeta, TableMeta, \
    NumberArrayMeta
from malcolm.controllers.runnablecontroller import RunnableController

# Make a table for the dataset info we produce
dataset_types = [
    "primary", "secondary", "monitor", "position_set", "position_value"]
columns = OrderedDict()
columns["name"] = StringArrayMeta("Dataset name")
columns["filename"] = StringArrayMeta(
    "Filename of HDF file relative to fileDir")
columns["type"] = ChoiceArrayMeta("Type of dataset", dataset_types)
columns["rank"] = NumberArrayMeta("int32", "Rank (number of dimensions)")
columns["path"] = StringArrayMeta("Dataset path within HDF file")
columns["uniqueid"] = StringArrayMeta("UniqueID array path within HDF file")
dataset_table_meta = TableMeta("Datsets produced in HDF file", columns=columns)


# Produced by plugins in part_info
class DatasetProducedInfo(Info):
    def __init__(self, name, filename, type, rank, path, uniqueid):
        self.name = name
        self.filename = filename
        assert type in dataset_types, \
            "Dataset type %s not in %s" % (type, dataset_types)
        self.type = type
        self.rank = rank
        self.path = path
        self.uniqueid = uniqueid

Пример #21
0
 def setUp(self):
     tm = TableMeta("desc")
     tm.process = Mock()
     self.tm = tm