Esempio n. 1
0
    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"))
Esempio n. 2
0
 def register(self, datasetType: DatasetType) -> Tuple[DatasetRecordStorage, bool]:
     # Docstring inherited from DatasetRecordStorageManager.
     if datasetType.isComponent():
         raise ValueError("Component dataset types can not be stored in registry."
                          f" Rejecting {datasetType.name}")
     storage = self._byName.get(datasetType.name)
     if storage is None:
         row, inserted = self._db.sync(
             self._static.dataset_type,
             keys={"name": datasetType.name},
             compared={
                 "dimensions_encoded": datasetType.dimensions.encode(),
                 "storage_class": datasetType.storageClass.name,
             },
             returning=["id"],
         )
         assert row is not None
         dynamic = self._db.ensureTableExists(
             makeDynamicTableName(datasetType),
             makeDynamicTableSpec(datasetType, type(self._collections)),
         )
         storage = ByDimensionsDatasetRecordStorage(db=self._db, datasetType=datasetType,
                                                    static=self._static, dynamic=dynamic,
                                                    dataset_type_id=row["id"],
                                                    collections=self._collections)
         self._byName[datasetType.name] = storage
         self._byId[storage._dataset_type_id] = storage
     else:
         if datasetType != storage.datasetType:
             raise ConflictingDefinitionError(f"Given dataset type {datasetType} is inconsistent "
                                              f"with database definition {storage.datasetType}.")
         inserted = False
     return storage, inserted
Esempio n. 3
0
 def register(self, datasetType: DatasetType) -> Tuple[DatasetRecordStorage, bool]:
     # Docstring inherited from DatasetRecordStorageManager.
     if datasetType.isComponent():
         raise ValueError("Component dataset types can not be stored in registry."
                          f" Rejecting {datasetType.name}")
     storage = self._byName.get(datasetType.name)
     if storage is None:
         dimensionsKey = self._dimensions.saveDimensionGraph(datasetType.dimensions)
         tagTableName = makeTagTableName(datasetType, dimensionsKey)
         calibTableName = (makeCalibTableName(datasetType, dimensionsKey)
                           if datasetType.isCalibration() else None)
         row, inserted = self._db.sync(
             self._static.dataset_type,
             keys={"name": datasetType.name},
             compared={
                 "dimensions_key": dimensionsKey,
                 "storage_class": datasetType.storageClass.name,
             },
             extra={
                 "tag_association_table": tagTableName,
                 "calibration_association_table": calibTableName,
             },
             returning=["id", "tag_association_table"],
         )
         assert row is not None
         tags = self._db.ensureTableExists(
             tagTableName,
             makeTagTableSpec(datasetType, type(self._collections)),
         )
         if calibTableName is not None:
             calibs = self._db.ensureTableExists(
                 calibTableName,
                 makeCalibTableSpec(datasetType, type(self._collections),
                                    self._db.getTimespanRepresentation()),
             )
         else:
             calibs = None
         storage = ByDimensionsDatasetRecordStorage(db=self._db, datasetType=datasetType,
                                                    static=self._static, summaries=self._summaries,
                                                    tags=tags, calibs=calibs,
                                                    dataset_type_id=row["id"],
                                                    collections=self._collections)
         self._byName[datasetType.name] = storage
         self._byId[storage._dataset_type_id] = storage
     else:
         if datasetType != storage.datasetType:
             raise ConflictingDefinitionError(f"Given dataset type {datasetType} is inconsistent "
                                              f"with database definition {storage.datasetType}.")
         inserted = False
     return storage, inserted