def __getitem__(self, name):
path = utils.path.name_to_asserted_group_path(name)
if len(path.parts) > 1:
top_directory = path.parts[0]
sub_name = pathlib.PurePosixPath(*path.parts[1:])
return self[top_directory][sub_name]
if name not in self:
raise KeyError("No such object: '" + str(name) + "'")
directory = self.directory / path
if exob.is_raw_object_directory(directory): # TODO create one function that handles all Raw creation
return raw.Raw(
root_directory=self.root_directory,
parent_path=self.relative_path,
object_name=name,
io_mode=self.io_mode # TODO validate name?
# TODO plugin manager?
)
if not exob.is_nonraw_object_directory(directory):
raise IOError(
"Directory '" + directory +
"' is not a valid exdir object."
)
meta_filename = directory / exob.META_FILENAME
with meta_filename.open("r", encoding="utf-8") as meta_file:
meta_data = yaml.safe_load(meta_file)
if meta_data[exob.EXDIR_METANAME][exob.TYPE_METANAME] == exob.DATASET_TYPENAME:
return ds.Dataset(
root_directory=self.root_directory,
parent_path=self.relative_path,
object_name=name,
io_mode=self.io_mode,
validate_name=self.validate_name,
plugin_manager=self.plugin_manager
)
elif meta_data[exob.EXDIR_METANAME][exob.TYPE_METANAME] == exob.GROUP_TYPENAME:
return Group(
root_directory=self.root_directory,
parent_path=self.relative_path,
object_name=name,
io_mode=self.io_mode,
validate_name=self.validate_name,
plugin_manager=self.plugin_manager
)
else:
print(
"Object", name, "has data type",
meta_data[exob.EXDIR_METANAME][exob.TYPE_METANAME]
)
raise NotImplementedError("Cannot open objects of this type")
评论列表
文章目录