def test_composites(self): """Test components within composite DatasetTypes.""" storageClassA = StorageClass("compA") storageClassB = StorageClass("compB") storageClass = StorageClass("test_composite", components={"compA": storageClassA, "compB": storageClassB}) self.assertTrue(storageClass.isComposite()) self.assertFalse(storageClassA.isComposite()) self.assertFalse(storageClassB.isComposite()) dimensions = self.universe.extract(("instrument", "visit")) datasetTypeComposite = DatasetType("composite", dimensions, storageClass) datasetTypeComponentA = DatasetType("composite.compA", dimensions, storageClassA) datasetTypeComponentB = DatasetType("composite.compB", dimensions, storageClassB) self.assertTrue(datasetTypeComposite.isComposite()) self.assertFalse(datasetTypeComponentA.isComposite()) self.assertTrue(datasetTypeComponentB.isComponent()) self.assertFalse(datasetTypeComposite.isComponent()) self.assertEqual(datasetTypeComposite.name, "composite") self.assertEqual(datasetTypeComponentA.name, "composite.compA") self.assertEqual(datasetTypeComponentB.component(), "compB") self.assertEqual(datasetTypeComposite.nameAndComponent(), ("composite", None)) self.assertEqual(datasetTypeComponentA.nameAndComponent(), ("composite", "compA"))
def testMap(self): universe = DimensionUniverse() c = CompositesMap(self.configFile, universe=universe) # Check that a str is not supported with self.assertRaises(ValueError): c.shouldBeDisassembled("fred") # These will fail (not a composite) sc = StorageClass("StructuredDataJson") d = DatasetType("dummyTrue", universe.empty, sc) self.assertFalse(sc.isComposite()) self.assertFalse(d.isComposite()) self.assertFalse(c.shouldBeDisassembled(d), f"Test with DatasetType: {d}") self.assertFalse(c.shouldBeDisassembled(sc), f"Test with StorageClass: {sc}") # Repeat but this time use a composite storage class sccomp = StorageClass("Dummy") sc = StorageClass("StructuredDataJson", components={ "dummy": sccomp, "dummy2": sccomp }) d = DatasetType("dummyTrue", universe.empty, sc) self.assertTrue(sc.isComposite()) self.assertTrue(d.isComposite()) self.assertTrue(c.shouldBeDisassembled(d), f"Test with DatasetType: {d}") self.assertFalse(c.shouldBeDisassembled(sc), f"Test with StorageClass: {sc}") # Override with False d = DatasetType("dummyFalse", universe.empty, sc) self.assertFalse(c.shouldBeDisassembled(d), f"Test with DatasetType: {d}") # DatasetType that has no explicit entry d = DatasetType("dummyFred", universe.empty, sc) self.assertFalse(c.shouldBeDisassembled(d), f"Test with DatasetType: {d}") # StorageClass that will be disassembled sc = StorageClass("StructuredComposite", components={ "dummy": sccomp, "dummy2": sccomp }) d = DatasetType("dummyFred", universe.empty, sc) self.assertTrue(c.shouldBeDisassembled(d), f"Test with DatasetType: {d}") # Check that we are not allowed a single component in a composite with self.assertRaises(ValueError): StorageClass("TestSC", components={"dummy": sccomp})