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