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 validate(self, value): if not isinstance(value, Table) or self != value.meta: if isinstance(value, Table): value = value.to_dict() # Make a table using ourself as the meta value.pop("typeid") value = Table(self, value) # Check column lengths value.verify_column_lengths() return value
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 validate(self, value): if value is None: value = {} if not isinstance(value, Table) or self != value.meta: if isinstance(value, Table): value = value.to_dict() # Make a table using ourself as the meta value.pop("typeid", None) value = Table(self, value) # Check column lengths value.verify_column_lengths() return value
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
def test_from_dict(self): d = {"typeid":"malcolm:core/Table:1.0", "e2":[0, 1, 2], "e1":["value"], "e3":[6, 7]} t = Table.from_dict(d, self.meta) self.assertEqual(self.meta, t.meta) self.assertEqual([0, 1, 2], list(t.e2)) self.assertEqual(["value"], t.e1) self.assertEqual([6, 7], list(t.e3))
def test_to_dict(self): t = Table(self.meta) t.e1 = ["value"] t.e2 = [1, 2] t.e3 = [0] expected = OrderedDict() expected["typeid"] = "malcolm:core/Table:1.0" expected["e1"] = ["value"] expected["e2"] = [1, 2] expected["e3"] = [0] actual = t.to_dict() # numpy compare gets in the way... for k, v in actual.items(): if k != "typeid": actual[k] = list(v) self.assertEquals(expected, actual)
def test_init(self): meta = Mock() s = StringArrayMeta() meta.elements = {"e1": s, "e2": s, "e3": s} t = Table(meta) self.assertEquals([], t.e1) self.assertEquals([], t.e2) self.assertEquals([], t.e3) self.assertEquals("malcolm:core/Table:1.0", t.typeid)
def test_from_dict(self): d = { "typeid": "malcolm:core/Table:1.0", "e2": [0, 1, 2], "e1": ["value"], "e3": [6, 7] } t = Table.from_dict(d, self.meta) self.assertEqual(self.meta, t.meta) self.assertEqual([0, 1, 2], list(t.e2)) self.assertEqual(["value"], t.e1) self.assertEqual([6, 7], list(t.e3))
def test_init_with_dict(self): meta = Mock() meta.elements = { "e1": NumberArrayMeta("int32"), "e2": StringArrayMeta(), "e3": StringArrayMeta() } d = {"e1": [0, 1], "e3": ["value"]} t = Table(meta, d) self.assertEquals([0, 1], list(t.e1)) self.assertEquals([], t.e2) self.assertEquals(["value"], t.e3) self.assertEquals("malcolm:core/Table:1.0", t.typeid)
def validate(self, value): if value is None: value = {} if isinstance(value, Table): if self != value.meta: # Make a table using ourself as the meta value = value.to_dict() value.pop("typeid", None) value = Table(self, value) else: # Should be a dict value = Table(self, value) # Check column lengths value.verify_column_lengths() return value
def test_dict_roundtrip(self): t = Table(self.meta) d = t.to_dict() t2 = Table.from_dict(d.copy(), self.meta) self.assertEqual(d, t2.to_dict())
def test_init_with_none(self): meta = Mock() meta.elements = {"e1": StringArrayMeta()} t = Table(meta, None) self.assertEquals([], t.e1) self.assertEquals("malcolm:core/Table:1.0", t.typeid)
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_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])