Skip to content

Commit

Permalink
misc flamby integration
Browse files Browse the repository at this point in the history
- rename FlambyDatasetMetadata to FlambyDatasetMetadataBlock for naming
  homogeneity
- misc proto docstring
  • Loading branch information
mvesin committed Oct 4, 2022
1 parent d20f9bd commit 59a9698
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 18 deletions.
4 changes: 2 additions & 2 deletions fedbiomed/common/data/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from ._tabular_dataset import TabularDataset
from ._medical_datasets import NIFTIFolderDataset, MedicalFolderDataset, MedicalFolderBase, MedicalFolderController, \
MedicalFolderLoadingBlockTypes
from ._flamby_dataset import FlambyDatasetMetadata, FlambyLoadingBlockTypes, \
from ._flamby_dataset import FlambyDatasetMetadataBlock, FlambyLoadingBlockTypes, \
FlambyDataset, discover_flamby_datasets
from ._data_loading_plan import (DataLoadingBlock,
MapperBlock,
Expand All @@ -33,7 +33,7 @@
"DataLoadingPlan",
"DataLoadingPlanMixin",
"SerializationValidation",
"FlambyDatasetMetadata",
"FlambyDatasetMetadataBlock",
"FlambyLoadingBlockTypes",
"FlambyDataset",
"discover_flamby_datasets"
Expand Down
11 changes: 7 additions & 4 deletions fedbiomed/common/data/_flamby_dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class FlambyLoadingBlockTypes(DataLoadingBlockTypes, Enum):
FLAMBY_DATASET_METADATA: str = 'flamby_dataset_metadata'


class FlambyDatasetMetadata(DataLoadingBlock):
class FlambyDatasetMetadataBlock(DataLoadingBlock):
"""Metadata about a Flamby Dataset.
Includes information on:
Expand All @@ -48,7 +48,7 @@ def __init__(self):
"flamby_center_id": None
}
self._serialization_validator.validation_scheme.update(
FlambyDatasetMetadata._extra_validation_scheme())
FlambyDatasetMetadataBlock._extra_validation_scheme())

def serialize(self) -> dict:
"""Serializes the class in a format similar to json.
Expand Down Expand Up @@ -86,6 +86,9 @@ def apply(self) -> dict:
Note that the flamby_dataset_name will be the same as the module name required to instantiate the FedClass.
However, it will not contain the full module path, hence to properly import this module it must be
prepended with `flamby.datasets`, for example `import flamby.datasets.flamby_dataset_name`
Returns:
this data loading block's metadata
"""
if any([v is None for v in self.metadata.values()]):
msg = f"{ErrorNumbers.FB316}. Attempting to read Flamby dataset metadata, but " \
Expand All @@ -105,7 +108,7 @@ def _validate_flamby_dataset_name(cls, name: str):
def _extra_validation_scheme(cls) -> dict:
return {
'flamby_dataset_name': {
'rules': [str, FlambyDatasetMetadata._validate_flamby_dataset_name],
'rules': [str, FlambyDatasetMetadataBlock._validate_flamby_dataset_name],
'required': True
},
'flamby_center_id': {
Expand All @@ -123,7 +126,7 @@ class FlambyDataset(DataLoadingPlanMixin, Dataset):
A FlambyDataset is always created in an empty state, and it **requires** a DataLoadingPlan to be finalized to a
correct state. The DataLoadingPlan must contain at least the following DataLoadinBlock key-value pair:
- FlambyLoadingBlockTypes.FLAMBY_DATASET_METADATA : FlambyDatasetMetadata
- FlambyLoadingBlockTypes.FLAMBY_DATASET_METADATA : FlambyDatasetMetadataBlock
The lifecycle of the DataLoadingPlan and the wrapped FedClass are tightly interlinked: when the DataLoadingPlan
is set, the wrapped FedClass is initialized and instantiated. When the DataLoadingPlan is cleared, the wrapped
Expand Down
4 changes: 2 additions & 2 deletions fedbiomed/node/cli_utils/_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from fedbiomed.common.exceptions import FedbiomedDatasetError, FedbiomedDatasetManagerError
from fedbiomed.common.logger import logger
from fedbiomed.common.data import MedicalFolderController, DataLoadingPlan, FlambyDatasetMetadata, \
from fedbiomed.common.data import MedicalFolderController, DataLoadingPlan, FlambyDatasetMetadataBlock, \
FlambyLoadingBlockTypes
from fedbiomed.node.cli_utils._medical_folder_dataset import add_medical_folder_dataset_from_cli
from fedbiomed.node.dataset_manager import DatasetManager
Expand Down Expand Up @@ -123,7 +123,7 @@ def add_database(interactive: bool = True,

# Build the DataLoadingPlan with the selected dataset type and center id
data_loading_plan = DataLoadingPlan()
metadata_dlb = FlambyDatasetMetadata()
metadata_dlb = FlambyDatasetMetadataBlock()
metadata_dlb.metadata = {
'flamby_dataset_name': available_flamby_datasets[flamby_dataset_index],
'flamby_center_id': center_id
Expand Down
20 changes: 10 additions & 10 deletions tests/test_flamby.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from fedbiomed.common.exceptions import FedbiomedDatasetError, FedbiomedDatasetValueError, \
FedbiomedLoadingBlockValueError, FedbiomedLoadingBlockError
from fedbiomed.common.data import FlambyDataset, FlambyLoadingBlockTypes, FlambyDatasetMetadata, \
from fedbiomed.common.data import FlambyDataset, FlambyLoadingBlockTypes, FlambyDatasetMetadataBlock, \
DataLoadingPlan, discover_flamby_datasets
from testsupport.testing_data_loading_block import LoadingBlockForTesting, LoadingBlockTypesForTesting

Expand All @@ -21,7 +21,7 @@ class TestFlamby(unittest.TestCase):
def test_flamby_01_loading_blocks(self, patched_discover):
"""Test that the custom DataLoadingBlocks for FlambyDataset work as expected."""
# Base case for FlambyDatasetSelectorLoadingBlock when there are no errors
dlb = FlambyDatasetMetadata()
dlb = FlambyDatasetMetadataBlock()
dlb.metadata['flamby_dataset_name'] = 'fed_flamby_test'
dlb.metadata['flamby_center_id'] = 42

Expand All @@ -33,28 +33,28 @@ def test_flamby_01_loading_blocks(self, patched_discover):
self.assertIn('loading_block_class', serialized_dataset_type)
self.assertIn('loading_block_module', serialized_dataset_type)
self.assertIn('dlb_id', serialized_dataset_type)
_ = FlambyDatasetMetadata().deserialize(serialized_dataset_type) # assert no errors raised
_ = FlambyDatasetMetadataBlock().deserialize(serialized_dataset_type) # assert no errors raised

# Assert raises when dataset name is of wrong type
serialized_dataset_type['flamby_dataset_name'] = 0
with self.assertRaises(FedbiomedLoadingBlockValueError):
_ = FlambyDatasetMetadata().deserialize(serialized_dataset_type)
_ = FlambyDatasetMetadataBlock().deserialize(serialized_dataset_type)
# Assert raises when center id is of wrong type
serialized_dataset_type['flamby_center_id'] = 'a string'
with self.assertRaises(FedbiomedLoadingBlockValueError):
_ = FlambyDatasetMetadata().deserialize(serialized_dataset_type)
_ = FlambyDatasetMetadataBlock().deserialize(serialized_dataset_type)
# Assert raises when dataset name is not one of the flamby datasets
serialized_dataset_type['flamby_dataset_name'] = 'non-existing name'
with self.assertRaises(FedbiomedLoadingBlockValueError):
_ = FlambyDatasetMetadata().deserialize(serialized_dataset_type)
_ = FlambyDatasetMetadataBlock().deserialize(serialized_dataset_type)
# Assert calling apply gives correct result
self.assertDictEqual(dlb.apply(),
{'flamby_dataset_name': 'fed_flamby_test',
'flamby_center_id': 42
})
# Assert exception raised when calling apply on uninitialized loading block
with self.assertRaises(FedbiomedLoadingBlockError):
FlambyDatasetMetadata().apply()
FlambyDatasetMetadataBlock().apply()

def test_flamby_02_fed_class_initialization(self):
"""Test that initialization of the FedClass happens correctly.
Expand All @@ -70,7 +70,7 @@ def test_flamby_02_fed_class_initialization(self):
dataset.get_center_id()

# define dlp
dlb = FlambyDatasetMetadata()
dlb = FlambyDatasetMetadataBlock()
dlb.metadata = {'flamby_dataset_name': 'fed_flamby_test',
'flamby_center_id': 0}
dlp = DataLoadingPlan({FlambyLoadingBlockTypes.FLAMBY_DATASET_METADATA: dlb})
Expand Down Expand Up @@ -136,7 +136,7 @@ def test_flamby_03_transform(self):
dataset.init_transform('Wrong type')

# define dlp
dlb = FlambyDatasetMetadata()
dlb = FlambyDatasetMetadataBlock()
dlb.metadata = {'flamby_dataset_name': 'fed_flamby_test',
'flamby_center_id': 0}
dlp = DataLoadingPlan({FlambyLoadingBlockTypes.FLAMBY_DATASET_METADATA: dlb})
Expand Down Expand Up @@ -187,7 +187,7 @@ def test_flamby_99_discover_flamby_datasets(self):
dataset = FlambyDataset()
for flamby_dataset_name in datasets.values():
# define dlp
dlb = FlambyDatasetMetadata()
dlb = FlambyDatasetMetadataBlock()
dlb.metadata = {'flamby_dataset_name': flamby_dataset_name,
'flamby_center_id': 0}
dlp = DataLoadingPlan({FlambyLoadingBlockTypes.FLAMBY_DATASET_METADATA: dlb})
Expand Down

0 comments on commit 59a9698

Please sign in to comment.