def test_template_hierarchies(self): md = { "name": "time", "levels": ["year", "month", "day", "hour"], "hierarchies": [ {"name": "full", "levels": ["year", "month", "day", "hour"]}, {"name": "ymd", "levels": ["year", "month", "day"]}, {"name": "ym", "levels": ["year", "month"]}, {"name": "y", "levels": ["year"]}, ] } dim_time = Dimension.from_metadata(md) templates = {"time": dim_time} md = { "name": "date", "template": "time", "hierarchies": [ "ymd", "ym", "y" ] } dim_date = Dimension.from_metadata(md, templates) self.assertEqual(dim_date.name, "date") self.assertEqual(len(dim_date.hierarchies), 3) names = [h.name for h in dim_date.hierarchies] self.assertEqual(["ymd", "ym", "y"], names)
def test_template_info(self): md = { "name": "template", "levels": [ { "name": "one", "info": {"units":"$", "format": "foo"}} ] } tempdim = Dimension.from_metadata(md) md = { "name": "dim", "levels": [ { "name": "one", "info": {"units":"USD"}} ], "template": "template" } templates = {"template": tempdim} dim = Dimension.from_metadata(md, templates) level = dim.level("one") self.assertIn("units", level.info) self.assertIn("format", level.info) self.assertEqual(level.info["units"], "USD") self.assertEqual(level.info["format"], "foo")
def test_template(self): dims = {"date": self.dimension} desc = {"template": "date", "name": "date"} dim = Dimension.from_metadata(desc, dims) self.assertEqual(self.dimension, dim) hier = dim.hierarchy() self.assertEqual(4, len(hier.levels)) desc["hierarchy"] = ["year", "month"] dim = Dimension.from_metadata(desc, dims) self.assertEqual(1, len(dim.hierarchies)) hier = dim.hierarchy() self.assertEqual(2, len(hier.levels)) template = self.dimension.to_dict() template["hierarchies"] = [ {"name": "ym", "levels": ["year", "month"]}, {"name": "ymd", "levels": ["year", "month", "day"]} ] template["default_hierarchy_name"] = "ym" template = Dimension.from_metadata(template) dims = {"date": template} desc = {"template": "date", "name":"another_date"} dim = Dimension.from_metadata(desc, dims) self.assertEqual(2, len(dim.hierarchies)) self.assertEqual(["ym", "ymd"], [hier.name for hier in dim.hierarchies])
def test_comparisons(self): """Comparison of dimension instances""" dim1 = Dimension.from_metadata(DIM_DATE_DESC) dim2 = Dimension.from_metadata(DIM_DATE_DESC) self.assertListEqual(dim1.levels, dim2.levels) self.assertListEqual(dim1.hierarchies, dim2.hierarchies) self.assertEqual(dim1, dim2)
def setUp(self): self.levels = [ Level("year", attributes=create_list_of(Attribute, ["year"])), Level("month", attributes=create_list_of(Attribute, ["month", "month_name", "month_sname"])), Level("day", attributes=create_list_of(Attribute, ["day"])), Level("week", attributes=create_list_of(Attribute, ["week"])) ] self.level_names = [level.name for level in self.levels] self.dimension = Dimension("date", levels=self.levels) levels = [self.levels[0], self.levels[1], self.levels[2]] self.hierarchy = Hierarchy("default", levels)
def test_to_dict(self): desc = self.dimension.to_dict() dim = Dimension.from_metadata(desc) self.assertEqual(self.dimension.hierarchies, dim.hierarchies) self.assertEqual(self.dimension.levels, dim.levels) self.assertEqual(self.dimension, dim)
def setUp(self): a = [DIM_DATE_DESC, DIM_PRODUCT_DESC, DIM_FLAG_DESC] self.measures = create_list_of(Measure, ["amount", "discount"]) self.details = create_list_of(Attribute, ["detail"]) self.dimensions = [Dimension.from_metadata(desc) for desc in a] self.cube = Cube("contracts", dimensions=self.dimensions, measures=self.measures, details=self.details)
def test_create(self): """Dimension from a dictionary""" dim = Dimension.from_metadata("year") self.assertIsInstance(dim, Dimension) self.assertEqual("year", dim.name) self.assertEqual(["year.year"], [str(a) for a in dim.attributes]) # Test default: explicit level attributes desc = {"name": "date", "levels": ["year"]} dim = Dimension.from_metadata(desc) self.assertTrue(dim.is_flat) self.assertFalse(dim.has_details) self.assertIsInstance(dim, Dimension) self.assertEqual("date", dim.name) # Dimension string is a reference and is equal to dimension name if # dimension is flat self.assertEqual(["date.year"], [str(a) for a in dim.attributes]) desc = {"name": "date", "levels": ["year", "month", "day"]} dim = Dimension.from_metadata(desc) self.assertIsInstance(dim, Dimension) self.assertEqual("date", dim.name) refs = [str(a) for a in dim.attributes] self.assertEqual(["date.year", "date.month", "date.day"], refs) self.assertFalse(dim.is_flat) self.assertFalse(dim.has_details) self.assertEqual(3, len(dim.levels)) for level in dim.levels: self.assertIsInstance(level, Level) self.assertEqual(1, len(dim.hierarchies)) self.assertEqual(3, len(dim.hierarchy())) # Test default: implicit single level attributes desc = {"name": "product", "attributes": ["code", "name"]} dim = Dimension.from_metadata(desc) refs = [str(a) for a in dim.attributes] self.assertEqual(["product.code", "product.name"], refs) self.assertEqual(1, len(dim.levels)) self.assertEqual(1, len(dim.hierarchies))
def test_create_attribute(self): """Coalesce attribute object (string or Attribute instance)""" level = Level("name", attributes=[Attribute("key"), Attribute("name")]) dim = Dimension("group", levels=[level]) obj = Attribute.from_metadata("name") self.assertIsInstance(obj, Attribute) self.assertEqual("name", obj.name) obj = Attribute.from_metadata({"name": "key"}) obj.dimension = dim self.assertIsInstance(obj, Attribute) self.assertEqual("key", obj.name) self.assertEqual(dim, obj.dimension) attr = dim.attribute("key") obj = Attribute.from_metadata(attr) obj.dimension = dim self.assertIsInstance(obj, Attribute) self.assertEqual("key", obj.name) self.assertEqual(obj, attr)
def test_flat_dimension(self): """Flat dimension and 'has details' flags""" dim = Dimension.from_metadata("foo") self.assertTrue(dim.is_flat) self.assertFalse(dim.has_details) self.assertEqual(1, len(dim.levels)) level = dim.level("foo") self.assertIsInstance(level, Level) self.assertEqual("foo", level.name) self.assertEqual(1, len(level.attributes)) self.assertEqual("foo.foo", str(level.key)) attr = level.attributes[0] self.assertIsInstance(attr, Attribute) self.assertEqual("foo", attr.name)
def setUp(self): self.levels = [ Level("year", attributes=[Attribute("year")]), Level("month", attributes=[ Attribute("month"), Attribute("month_name"), Attribute("month_sname") ]), Level("day", attributes=[Attribute("day")]), Level("week", attributes=[Attribute("week")]) ] self.level_names = [level.name for level in self.levels] self.dimension = Dimension("date", levels=self.levels) levels = [self.levels[0], self.levels[1], self.levels[2]] self.hierarchy = Hierarchy("default", levels)
def test_inherit_nonadditive(self): dims = [DIM_DATE_DESC, DIM_PRODUCT_DESC, DIM_FLAG_DESC] cube = { "name": "contracts", "dimensions": ["date", "product"], "nonadditive": "time", "measures": ["amount", "discount"] } dims = [Dimension.from_metadata(md) for md in dims] dims = dict((dim.name, dim) for dim in dims) cube = Cube.from_metadata(cube) measures = cube.measures self.assertEqual(measures[0].nonadditive, "time")
def test_simplify(self): """Simplification of attribute reference (with and without details)""" level = Level("name", attributes=[Attribute("name")]) dim = Dimension("group", levels=[level]) attr = dim.attribute("name") self.assertEqual("name", attr.name) # Simplified -> dimension name self.assertEqual("group.name", str(attr)) self.assertEqual("group.name", attr.ref) level = Level("name", attributes=[Attribute("key"), Attribute("name")]) dim = Dimension("group", levels=[level]) attr = dim.attribute("name") self.assertEqual("name", attr.name) self.assertEqual("group.name", str(attr)) self.assertEqual("group.name", attr.ref)
class DimensionTestCase(unittest.TestCase): def setUp(self): self.levels = [ Level("year", attributes=create_list_of(Attribute, ["year"])), Level("month", attributes=create_list_of(Attribute, ["month", "month_name", "month_sname"])), Level("day", attributes=create_list_of(Attribute, ["day"])), Level("week", attributes=create_list_of(Attribute, ["week"])) ] self.level_names = [level.name for level in self.levels] self.dimension = Dimension("date", levels=self.levels) levels = [self.levels[0], self.levels[1], self.levels[2]] self.hierarchy = Hierarchy("default", levels) def test_create(self): """Dimension from a dictionary""" dim = Dimension.from_metadata("year") self.assertIsInstance(dim, Dimension) self.assertEqual("year", dim.name) self.assertEqual(["year.year"], [str(a) for a in dim.attributes]) # Test default: explicit level attributes desc = {"name": "date", "levels": ["year"]} dim = Dimension.from_metadata(desc) self.assertTrue(dim.is_flat) self.assertFalse(dim.has_details) self.assertIsInstance(dim, Dimension) self.assertEqual("date", dim.name) # Dimension string is a reference and is equal to dimension name if # dimension is flat self.assertEqual(["date.year"], [str(a) for a in dim.attributes]) desc = {"name": "date", "levels": ["year", "month", "day"]} dim = Dimension.from_metadata(desc) self.assertIsInstance(dim, Dimension) self.assertEqual("date", dim.name) refs = [str(a) for a in dim.attributes] self.assertEqual(["date.year", "date.month", "date.day"], refs) self.assertFalse(dim.is_flat) self.assertFalse(dim.has_details) self.assertEqual(3, len(dim.levels)) for level in dim.levels: self.assertIsInstance(level, Level) self.assertEqual(1, len(dim.hierarchies)) self.assertEqual(3, len(dim.hierarchy())) # Test default: implicit single level attributes desc = {"name": "product", "attributes": ["code", "name"]} dim = Dimension.from_metadata(desc) refs = [str(a) for a in dim.attributes] self.assertEqual(["product.code", "product.name"], refs) self.assertEqual(1, len(dim.levels)) self.assertEqual(1, len(dim.hierarchies)) def test_flat_dimension(self): """Flat dimension and 'has details' flags""" dim = Dimension.from_metadata("foo") self.assertTrue(dim.is_flat) self.assertFalse(dim.has_details) self.assertEqual(1, len(dim.levels)) level = dim.level("foo") self.assertIsInstance(level, Level) self.assertEqual("foo", level.name) self.assertEqual(1, len(level.attributes)) self.assertEqual("foo.foo", str(level.key)) attr = level.attributes[0] self.assertIsInstance(attr, Attribute) self.assertEqual("foo", attr.name) def test_comparisons(self): """Comparison of dimension instances""" dim1 = Dimension.from_metadata(DIM_DATE_DESC) dim2 = Dimension.from_metadata(DIM_DATE_DESC) self.assertListEqual(dim1.levels, dim2.levels) self.assertListEqual(dim1.hierarchies, dim2.hierarchies) self.assertEqual(dim1, dim2) def test_to_dict(self): desc = self.dimension.to_dict() dim = Dimension.from_metadata(desc) self.assertEqual(self.dimension.hierarchies, dim.hierarchies) self.assertEqual(self.dimension.levels, dim.levels) self.assertEqual(self.dimension, dim) def test_template(self): dims = {"date": self.dimension} desc = {"template": "date", "name": "date"} dim = Dimension.from_metadata(desc, dims) self.assertEqual(self.dimension, dim) hier = dim.hierarchy() self.assertEqual(4, len(hier.levels)) desc["hierarchy"] = ["year", "month"] dim = Dimension.from_metadata(desc, dims) self.assertEqual(1, len(dim.hierarchies)) hier = dim.hierarchy() self.assertEqual(2, len(hier.levels)) template = self.dimension.to_dict() template["hierarchies"] = [ {"name": "ym", "levels": ["year", "month"]}, {"name": "ymd", "levels": ["year", "month", "day"]} ] template["default_hierarchy_name"] = "ym" template = Dimension.from_metadata(template) dims = {"date": template} desc = {"template": "date", "name":"another_date"} dim = Dimension.from_metadata(desc, dims) self.assertEqual(2, len(dim.hierarchies)) self.assertEqual(["ym", "ymd"], [hier.name for hier in dim.hierarchies]) def test_template_hierarchies(self): md = { "name": "time", "levels": ["year", "month", "day", "hour"], "hierarchies": [ {"name": "full", "levels": ["year", "month", "day", "hour"]}, {"name": "ymd", "levels": ["year", "month", "day"]}, {"name": "ym", "levels": ["year", "month"]}, {"name": "y", "levels": ["year"]}, ] } dim_time = Dimension.from_metadata(md) templates = {"time": dim_time} md = { "name": "date", "template": "time", "hierarchies": [ "ymd", "ym", "y" ] } dim_date = Dimension.from_metadata(md, templates) self.assertEqual(dim_date.name, "date") self.assertEqual(len(dim_date.hierarchies), 3) names = [h.name for h in dim_date.hierarchies] self.assertEqual(["ymd", "ym", "y"], names) def test_template_info(self): md = { "name": "template", "levels": [ { "name": "one", "info": {"units":"$", "format": "foo"}} ] } tempdim = Dimension.from_metadata(md) md = { "name": "dim", "levels": [ { "name": "one", "info": {"units":"USD"}} ], "template": "template" } templates = {"template": tempdim} dim = Dimension.from_metadata(md, templates) level = dim.level("one") self.assertIn("units", level.info) self.assertIn("format", level.info) self.assertEqual(level.info["units"], "USD") self.assertEqual(level.info["format"], "foo")