metadatarootrecord.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from uuid import UUID
  2. from typing import (
  3. Iterable,
  4. Optional
  5. )
  6. from dataladmetadatamodel.mappableobject import MappableObject
  7. from dataladmetadatamodel.filetree import FileTree
  8. from dataladmetadatamodel.metadata import Metadata
  9. from dataladmetadatamodel.mapper.reference import Reference
  10. class MetadataRootRecord(MappableObject):
  11. def __init__(self,
  12. dataset_identifier: Optional[UUID],
  13. dataset_version: Optional[str],
  14. dataset_level_metadata: Optional[Metadata],
  15. file_tree: Optional[FileTree],
  16. realm: Optional[str] = None,
  17. reference: Optional[Reference] = None
  18. ):
  19. assert isinstance(dataset_identifier, (type(None), UUID))
  20. assert isinstance(dataset_version, (type(None), str))
  21. assert isinstance(dataset_level_metadata, (type(None), Metadata))
  22. assert isinstance(file_tree, (type(None), FileTree))
  23. assert isinstance(realm, (type(None), str))
  24. assert isinstance(reference, (type(None), Reference))
  25. super().__init__(realm, reference)
  26. self.dataset_identifier = dataset_identifier
  27. self.dataset_version = dataset_version
  28. self.dataset_level_metadata = dataset_level_metadata
  29. self._file_tree = file_tree
  30. @staticmethod
  31. def get_empty_instance(realm: Optional[str] = None,
  32. reference: Optional[Reference] = None):
  33. return MetadataRootRecord(None, None, None, None, realm, reference)
  34. def modifiable_sub_objects_impl(self) -> Iterable[MappableObject]:
  35. return [
  36. child
  37. for child in [self.dataset_level_metadata, self._file_tree]
  38. if child is not None
  39. ]
  40. def purge_impl(self):
  41. self.dataset_level_metadata.purge()
  42. if self._file_tree is not None:
  43. self._file_tree.purge()
  44. if self.dataset_level_metadata is not None:
  45. self.dataset_level_metadata = None
  46. self._file_tree = None
  47. def set_file_tree(self, file_tree: FileTree):
  48. self.touch()
  49. self._file_tree = file_tree
  50. def get_file_tree(self):
  51. self.ensure_mapped()
  52. if self._file_tree is None:
  53. return None
  54. return self._file_tree.read_in()
  55. file_tree = property(fget=get_file_tree, fset=set_file_tree)
  56. def set_dataset_level_metadata(self, dataset_level_metadata: Metadata):
  57. self.touch()
  58. self.dataset_level_metadata = dataset_level_metadata
  59. def get_dataset_level_metadata(self):
  60. self.ensure_mapped()
  61. return self.dataset_level_metadata.read_in()
  62. def deepcopy_impl(self,
  63. new_mapper_family: Optional[str] = None,
  64. new_destination: Optional[str] = None,
  65. **kwargs) -> "MetadataRootRecord":
  66. copied_metadata_root_record = MetadataRootRecord(
  67. self.dataset_identifier,
  68. self.dataset_version,
  69. (
  70. self.dataset_level_metadata.deepcopy(
  71. new_mapper_family,
  72. new_destination)
  73. if self.dataset_level_metadata is not None
  74. else None
  75. ),
  76. (
  77. self._file_tree.deepcopy(
  78. new_mapper_family,
  79. new_destination)
  80. if self._file_tree is not None
  81. else None
  82. ),
  83. None,
  84. None
  85. )
  86. copied_metadata_root_record.write_out(new_destination)
  87. copied_metadata_root_record.purge()
  88. return copied_metadata_root_record