Source code for icat_esrf_definitions.tests.test_icat_fields

from typing import Optional

from ..models import IcatDatasetParameters


[docs] def test_icat_fields(): fields = IcatDatasetParameters.icat_fields() field_names = IcatDatasetParameters.icat_field_names() assert list(fields) == list(field_names)
[docs] def test_icat_fields_deprecated(): fields = IcatDatasetParameters.icat_fields() field_info = fields["HOLO_im01_num_start"] expected = { "annotation": Optional[float], "constraints": {"max_length": None, "min_length": None, "pattern": None}, "deprecated": "HOLO.im01NumStart (HOLO_im01_num_start) is deprecated.", "description": "Index of first sample image in plane 1.", "icat_name": "HOLO_im01_num_start", "new_icat_name": None, "new_nexus_location": None, "nexus_location": ("HOLO", "im01NumStart"), "nexus_type": "NX_FLOAT", "record": None, "required": False, "unit_info": None, } actual = _namedtuple_to_dict(field_info) assert actual == expected
[docs] def test_icat_fields_renamed(): fields = IcatDatasetParameters.icat_fields() field_info = fields["HOLO_holoSampleDetectorDistances"] expected = { "annotation": Optional[str], "constraints": {"max_length": None, "min_length": None, "pattern": None}, "deprecated": "HOLO.sampleDetectorDistances (HOLO_holoSampleDetectorDistances) is deprecated. " "Use HOLO.sample_detector_distances (HOLO_sample_detector_distances) instead.", "description": "Sample/detector distances for all planes used.", "icat_name": "HOLO_holoSampleDetectorDistances", "new_icat_name": "HOLO_sample_detector_distances", "new_nexus_location": ("HOLO", "sample_detector_distances"), "nexus_location": ("HOLO", "sampleDetectorDistances"), "nexus_type": "NX_CHAR", "record": None, "required": False, "unit_info": None, } actual = _namedtuple_to_dict(field_info) assert actual == expected
[docs] def test_icat_fields_migrated(): fields = IcatDatasetParameters.icat_fields() field_info = fields["SamplePaleo_scientific_domain"] expected = { "annotation": Optional[str], "constraints": {"max_length": None, "min_length": None, "pattern": None}, "deprecated": "sample.paleo.scientific_domain (SamplePaleo_scientific_domain) is deprecated. " "Use sample.subject (Sample_subject) instead.", "description": "Scientific domain or field of study related to the sample.", "icat_name": "SamplePaleo_scientific_domain", "new_icat_name": "Sample_subject", "new_nexus_location": ("sample", "subject"), "nexus_location": ("sample", "paleo", "scientific_domain"), "nexus_type": "NX_CHAR", "record": None, "required": False, "unit_info": None, } actual = _namedtuple_to_dict(field_info) assert actual == expected
def _namedtuple_to_dict(obj): if isinstance(obj, tuple) and hasattr(obj, "_asdict"): return {key: _namedtuple_to_dict(value) for key, value in obj._asdict().items()} elif isinstance(obj, list): return [_namedtuple_to_dict(x) for x in obj] elif isinstance(_namedtuple_to_dict, dict): return {k: _namedtuple_to_dict(v) for k, v in obj.items()} else: return obj