def _load_from_structure(self, structure): table = Table(self.layout.meta) for part_name, part_structure in structure["layout"].items(): table.append([part_name, "", part_structure["x"], part_structure["y"], part_structure["visible"]]) self.set_layout(table) self.run_hook(self.Load, self.create_part_tasks(), structure)
def update_datasets_table(self, context, part_info): # Update the dataset table datasets_table = Table(dataset_table_meta) for i in DatasetProducedInfo.filter_values(part_info): if i.name not in datasets_table.name: row = [i.name, i.filename, i.type, i.rank, i.path, i.uniqueid] datasets_table.append(row) self.datasets.set_value(datasets_table)
def update_datasets_table(self, task, part_info): # Update the dataset table datasets_table = Table(dataset_table_meta) for i in DatasetProducedInfo.filter_values(part_info): if i.name not in datasets_table.name: row = [i.name, i.filename, i.type, i.rank, i.path, i.uniqueid] datasets_table.append(row) self.datasets.set_value(datasets_table)
def test_set_export_parts(self): context = Context(self.p) b = context.block_view("mainBlock") assert list(b) == [ 'meta', 'health', 'state', 'layout', 'design', 'exports', 'modified', 'disable', 'reset', 'save', 'attr' ] new_exports = Table(self.c.exports.meta) new_exports.append(('part2.attr', 'childAttr')) new_exports.append(('part2.reset', 'childReset')) self.c.set_exports(new_exports) assert self.c.modified.value == True assert self.c.modified.alarm.message == "exports changed" call_with_params(self.c.save, design='testSaveLayout') assert self.c.modified.value == False # block has changed, get a new view b = context.block_view("mainBlock") assert list(b) == [ 'meta', 'health', 'state', 'layout', 'design', 'exports', 'modified', 'disable', 'reset', 'save', 'attr', 'childAttr', 'childReset' ] assert self.c.state.value == "Ready" assert b.childAttr.value == "defaultv" assert self.c.modified.value == False m = MagicMock() f = b.childAttr.subscribe_value(m) # allow a subscription to come through context.sleep(0.1) m.assert_called_once_with("defaultv") m.reset_mock() self.c_part.attr.set_value("newv") assert b.childAttr.value == "newv" assert self.c_part.attr.value == "newv" assert self.c.modified.value == True assert self.c.modified.alarm.message == \ "part2.attr.value = 'newv' not 'defaultv'" # allow a subscription to come through context.sleep(0.1) m.assert_called_once_with("newv") b.childAttr.put_value("again") assert b.childAttr.value == "again" assert self.c_part.attr.value == "again" assert self.c.modified.value == True assert self.c.modified.alarm.message == \ "part2.attr.value = 'again' not 'defaultv'" # remove the field new_exports = Table(self.c.exports.meta) self.c.set_exports(new_exports) assert self.c.modified.value == True call_with_params(self.c.save) assert self.c.modified.value == False # block has changed, get a new view b = context.block_view("mainBlock") assert "childAttr" not in b
def set_layout(self, value): part_info = self.run_hook(self.ReportOutports, self.create_part_tasks()) part_info = self.run_hook( self.Layout, self.create_part_tasks(), part_info, value) layout_table = Table(self.layout.meta) for name, layout_infos in LayoutInfo.filter_parts(part_info).items(): assert len(layout_infos) == 1, \ "%s returned more than 1 layout infos" % name layout_info = layout_infos[0] row = [name, layout_info.mri, layout_info.x, layout_info.y, layout_info.visible] layout_table.append(row) self.layout.set_value(layout_table)
def table_from_list(self, int_values): table = Table(self.meta) if self.fields: nconsume = self._calc_nconsume() for i in range(int(len(int_values) / nconsume)): int_value = 0 for c in range(nconsume): int_value += int_values[i*nconsume+c] << (32 * c) row = [] for name, (bits_hi, bits_lo) in self.fields.items(): field_value = (int_value & (2 ** (bits_hi + 1) - 1)) >> bits_lo row.append(field_value) table.append(row) return table
def set_layout(self, value): # If it isn't a table, make it one if not isinstance(value, Table): value = Table(self.layout.meta, value) part_info = self.run_hook(self.ReportOutports, self.create_part_tasks()) part_info = self.run_hook( self.Layout, self.create_part_tasks(), part_info, value) layout_table = Table(self.layout.meta) for name, layout_infos in LayoutInfo.filter_parts(part_info).items(): assert len(layout_infos) == 1, \ "%s returned more than 1 layout infos" % name layout_info = layout_infos[0] row = [name, layout_info.mri, layout_info.x, layout_info.y, layout_info.visible] layout_table.append(row) self.layout.set_value(layout_table)
def table_from_list(self, int_values): table = Table(self.meta) if self.fields: nconsume = self._calc_nconsume() for i in range(int(len(int_values) / nconsume)): int_value = 0 for c in range(nconsume): int_value += int(int_values[i*nconsume+c]) << (32 * c) row = [] for name, (bits_hi, bits_lo) in self.fields.items(): mask = 2 ** (bits_hi + 1) - 1 field_value = (int_value & mask) >> bits_lo row.append(field_value) table.append(row) return table
def test_list_from_table(self): table = Table(self.meta) table.append([32, True, True, 4294967295]) table.append([0, True, False, 1]) table.append([0, False, False, 0]) l = self.o.list_from_table(table) assert l == ([32, 0x10001, 4294967295, 0, 0x1, 1, 0, 0x0, 0])
def do_load(self, design): filename = self._validated_config_filename(design) with open(filename, "r") as f: text = f.read() structure = json_decode(text) # Set the layout table layout_table = Table(self.layout.meta) for part_name, part_structure in structure.get("layout", {}).items(): layout_table.append([ part_name, "", part_structure["x"], part_structure["y"], part_structure["visible"]]) self.set_layout(layout_table) # Set the exports table exports_table = Table(self.exports.meta) for name, export_name in structure.get("exports", {}).items(): exports_table.append([name, export_name]) self.exports.set_value(exports_table) # Run the load hook to get parts to load their own structure self.run_hook(self.Load, self.create_part_contexts(only_visible=False), structure) self._mark_clean(design)
def test_list_from_table(self): table = Table(self.meta) table.append([32, True, True, 4294967295]) table.append([0, True, False, 1]) table.append([0, False, False, 0]) l = self.o.list_from_table(table) self.assertEqual(l, [32, 0x10001, 4294967295, 0, 0x1, 1, 0, 0x0, 0])
class TestTableRowOperations(unittest.TestCase): def setUp(self): meta = Mock() meta.elements = OrderedDict() meta.elements["e1"] = NumberArrayMeta("int32") meta.elements["e2"] = NumberArrayMeta("int32") meta.elements["e3"] = NumberArrayMeta("int32") self.t = Table(meta) self.t.e1 = [1] self.t.e2 = [2] self.t.e3 = [3] def test_row_access(self): self.assertEqual([1, 2, 3], self.t[0]) def test_string_access(self): self.assertEqual(self.t.e1, self.t["e1"]) self.assertEqual(self.t.e2, self.t["e2"]) def test_string_setters(self): self.t["e2"] = [4] self.assertEqual(list(self.t.e2), [4]) def test_row_access_index_error(self): with self.assertRaises(IndexError): self.t[1] self.t.e1 = [1, 11] self.t.e2 = [2, 12] self.t.e3 = [3, 13] self.t[1] with self.assertRaises(IndexError): self.t[2] def test_row_assignment(self): self.t[0] = [7, 8, 9] self.assertEqual([7], self.t.e1) self.assertEqual([8], self.t.e2) self.assertEqual([9], self.t.e3) def test_row_assignment_bad_row_raises(self): with self.assertRaises(ValueError): self.t[0] = [7, 8] self.assertEqual([1], self.t.e1) self.assertEqual([2], self.t.e2) self.assertEqual([3], self.t.e3) def test_row_assingment_index_error(self): with self.assertRaises(IndexError): self.t[1] = [7, 8, 9] def test_row_append(self): self.t.append([11, 12, 13]) self.t.append([21, 22, 23]) self.assertEquals([1, 11, 21], list(self.t.e1)) self.assertEquals([2, 12, 22], list(self.t.e2)) self.assertEquals([3, 13, 23], list(self.t.e3)) def test_row_append_bad_row_raises(self): self.assertRaises(ValueError, self.t.append, [11, 12]) self.assertRaises(ValueError, self.t.append, [11, 12, 13, 14]) def test_bad_columns_raise(self): self.t.e1 = [1, 2] with self.assertRaises(AssertionError): self.t[0] with self.assertRaises(AssertionError): self.t[0] = [0, 0, 0] with self.assertRaises(AssertionError): self.t.append([0, 0, 0])
class TestTableRowOperations(unittest.TestCase): def setUp(self): meta = Mock() meta.elements = OrderedDict() meta.elements["e1"] = NumberArrayMeta("int32") meta.elements["e2"] = NumberArrayMeta("int32") meta.elements["e3"] = NumberArrayMeta("int32") self.t = Table(meta) self.t.e1 = [1] self.t.e2 = [2] self.t.e3 = [3] def test_row_access(self): assert [1, 2, 3] == self.t[0] def test_string_access(self): assert self.t.e1 == self.t["e1"] assert self.t.e2 == self.t["e2"] def test_string_setters(self): self.t["e2"] = [4] assert list(self.t.e2) == [4] def test_row_access_index_error(self): with self.assertRaises(IndexError): self.t[1] self.t.e1 = [1, 11] self.t.e2 = [2, 12] self.t.e3 = [3, 13] self.t[1] with self.assertRaises(IndexError): self.t[2] def test_row_assignment(self): self.t[0] = [7, 8, 9] assert [7] == self.t.e1 assert [8] == self.t.e2 assert [9] == self.t.e3 def test_row_assignment_bad_row_raises(self): with self.assertRaises(ValueError): self.t[0] = [7, 8] assert [1] == self.t.e1 assert [2] == self.t.e2 assert [3] == self.t.e3 def test_row_assingment_index_error(self): with self.assertRaises(IndexError): self.t[1] = [7, 8, 9] def test_row_append(self): self.t.append([11, 12, 13]) self.t.append([21, 22, 23]) assert [1, 11, 21] == list(self.t.e1) assert [2, 12, 22] == list(self.t.e2) assert [3, 13, 23] == list(self.t.e3) def test_row_append_bad_row_raises(self): with self.assertRaises(ValueError): self.t.append([11, 12]) with self.assertRaises(ValueError): self.t.append([11, 12, 13, 14]) def test_bad_columns_raise(self): self.t.e1 = [1, 2] with self.assertRaises(AssertionError): self.t[0] with self.assertRaises(AssertionError): self.t[0] = [0, 0, 0] with self.assertRaises(AssertionError): self.t.append([0, 0, 0])