From bc12b34fa0a5803087f6d033e7c5c9d572dcff48 Mon Sep 17 00:00:00 2001 From: Nathan Hui Date: Sat, 6 May 2023 23:05:59 -0700 Subject: [PATCH 01/10] Adding command changes --- e4e_data_management/cli.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/e4e_data_management/cli.py b/e4e_data_management/cli.py index c14b805..1b0c981 100644 --- a/e4e_data_management/cli.py +++ b/e4e_data_management/cli.py @@ -14,7 +14,7 @@ from e4e_data_management import __version__ from e4e_data_management.core import DataManager from e4e_data_management.metadata import Metadata - +from e4e_data_management.data import Dataset T = TypeVar('T') @dataclass class Parameter: @@ -85,13 +85,23 @@ def __init__(self): self.__configure_prune_parser(parsers['prune']) self.__configure_config_parser(parsers['config']) self.__configure_activate_parser(parsers['activate']) - # self.__configure_validate_parser(parsers['validate']) + self.__configure_validate_parser(parsers['validate']) # self.__configure_zip_parser(parsers['zip']) # self.__configure_unzip_parser(parsers['unzip']) self.parser.add_argument('--version', action='version', version=f'e4edm {__version__}') self.parser.set_defaults(func=self.parser.print_help) + def __configure_validate_parser(self, parser: argparse.ArgumentParser): + parser.add_argument('root_dir', nargs='?', default=None, type=Path) + parser.set_defaults(func=self.__external_validate) + + def __external_validate(self, root_dir: Optional[Path]): + if root_dir is None: + self.app.validate() + return + # dataset = Dataset(root=root_dir) + def __configure_logging(self) -> None: log_dir = Path(DataManager.dirs.user_log_dir).resolve() log_dir.mkdir(parents=True, exist_ok=True) From 32239925c01f1ad06714528d2f741170911df7b9 Mon Sep 17 00:00:00 2001 From: Nathan Hui Date: Sat, 6 May 2023 23:29:05 -0700 Subject: [PATCH 02/10] Added remaining logic --- e4e_data_management/cli.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/e4e_data_management/cli.py b/e4e_data_management/cli.py index 1b0c981..56820b4 100644 --- a/e4e_data_management/cli.py +++ b/e4e_data_management/cli.py @@ -98,9 +98,14 @@ def __configure_validate_parser(self, parser: argparse.ArgumentParser): def __external_validate(self, root_dir: Optional[Path]): if root_dir is None: - self.app.validate() - return - # dataset = Dataset(root=root_dir) + dataset = self.app.active_dataset + else: + dataset = Dataset.load(path=root_dir) + + if not dataset.validate(): + print('Dataset validation failed') + else: + print('Dataset valid') def __configure_logging(self) -> None: log_dir = Path(DataManager.dirs.user_log_dir).resolve() From 7e0e9fb88a7e097389e0ef9b532e83725c002879 Mon Sep 17 00:00:00 2001 From: Nathan Hui Date: Sat, 6 May 2023 23:42:01 -0700 Subject: [PATCH 03/10] Update version --- e4e_data_management/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e4e_data_management/__init__.py b/e4e_data_management/__init__.py index 6fba3f8..8395a68 100644 --- a/e4e_data_management/__init__.py +++ b/e4e_data_management/__init__.py @@ -1,3 +1,3 @@ '''E4E Data Management Tools ''' -__version__ = '0.0.0.13' +__version__ = '0.0.0.14' From 705346f284b00954536212dc57f184aaf0915068 Mon Sep 17 00:00:00 2001 From: Nathan Hui Date: Mon, 24 Jul 2023 21:23:24 -0700 Subject: [PATCH 04/10] wip: Creates zip file --- e4e_data_management/data.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/e4e_data_management/data.py b/e4e_data_management/data.py index cd23381..bc89d2c 100644 --- a/e4e_data_management/data.py +++ b/e4e_data_management/data.py @@ -6,6 +6,7 @@ import json import logging import pickle +import zipfile from dataclasses import dataclass from hashlib import sha256 from pathlib import Path @@ -513,3 +514,15 @@ def commit(self) -> List[Path]: committed_files.extend(new_files) self.staged_files = [] return committed_files + + def create_zip(self, zip_path: Path) -> None: + """Creates a .zip archive of this Dataset at the specified location + + Args: + zip_path (Path): Path to .zip archive + """ + if zip_path.suffix.lower() != '.zip': + raise RuntimeError('Invalid suffix') + + with zipfile.ZipFile(file=zip_path, mode='w') as handle: + pass \ No newline at end of file From 379e0a157375a3bc25765cb3fbae50fc2bb2c85d Mon Sep 17 00:00:00 2001 From: Nathan Hui Date: Tue, 25 Jul 2023 07:42:13 -0700 Subject: [PATCH 05/10] chore: Fixes naming --- e4e_data_management/cli.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e4e_data_management/cli.py b/e4e_data_management/cli.py index c14b805..b43c3c1 100644 --- a/e4e_data_management/cli.py +++ b/e4e_data_management/cli.py @@ -28,7 +28,7 @@ class Parameter: validator: Callable[[T], bool] -class DataMangerCLI: +class DataManagerCLI: """Data Manager Command Line Interface """ def __init__(self): @@ -363,7 +363,7 @@ def __configure_init_dataset_parser(self, parser: argparse.ArgumentParser): def main(): """Main bootstrap """ - DataMangerCLI().main() + DataManagerCLI().main() if __name__ == '__main__': main() From 7c920b1fc836cb04455f5567fb6436fd3d777f86 Mon Sep 17 00:00:00 2001 From: Nathan Hui Date: Sun, 15 Dec 2024 19:01:56 -0800 Subject: [PATCH 06/10] style: Fixes spaces and unused variables --- e4e_data_management/data.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/e4e_data_management/data.py b/e4e_data_management/data.py index 2c4d6e5..6953893 100644 --- a/e4e_data_management/data.py +++ b/e4e_data_management/data.py @@ -516,7 +516,7 @@ def commit(self) -> List[Path]: committed_files.extend(new_files) self.staged_files = [] return committed_files - + def create_zip(self, zip_path: Path) -> None: """Creates a .zip archive of this Dataset at the specified location @@ -525,6 +525,6 @@ def create_zip(self, zip_path: Path) -> None: """ if zip_path.suffix.lower() != '.zip': raise RuntimeError('Invalid suffix') - - with zipfile.ZipFile(file=zip_path, mode='w') as handle: - pass \ No newline at end of file + + with zipfile.ZipFile(file=zip_path, mode='w') as _: + pass From 6cdc42b7e60853efa9a50aa2fc383bb043740279 Mon Sep 17 00:00:00 2001 From: Nathan Hui Date: Sun, 15 Dec 2024 19:58:39 -0800 Subject: [PATCH 07/10] feat: Adds zip --- e4e_data_management/core.py | 27 ++++++------------ e4e_data_management/data.py | 42 +++++++++++++++++++++++++--- e4e_data_management/exception.py | 28 +++++++++++++++++++ tests/test_zip.py | 47 ++++++++++++++++++++++++++++++++ 4 files changed, 122 insertions(+), 22 deletions(-) create mode 100644 e4e_data_management/exception.py create mode 100644 tests/test_zip.py diff --git a/e4e_data_management/core.py b/e4e_data_management/core.py index dd852b9..783807c 100644 --- a/e4e_data_management/core.py +++ b/e4e_data_management/core.py @@ -282,24 +282,7 @@ def push(self, path: Path) -> None: Args: path (Path): Destination to push completed dataset to """ - if any(len(mission.staged_files) != 0 - for mission in self.active_dataset.missions.values()) or \ - len(self.active_dataset.staged_files) != 0: - raise RuntimeError('Files still in staging') - - # Check that the README is present - readmes = [file - for file in list(self.active_dataset.root.glob('*')) - if re.match(fnmatch.translate('readme.*'), file.name, re.IGNORECASE)] - - if len(readmes) == 0: - raise RuntimeError('Readme not found') - acceptable_exts = ['.md', '.docx'] - if not any(readme.suffix.lower() in acceptable_exts for readme in readmes): - raise RuntimeError('Illegal README format') - - # validate self - self.active_dataset.validate() + self.active_dataset.check_complete() # Duplicate to destination destination = path.joinpath(self.active_dataset.name) @@ -317,6 +300,14 @@ def zip(self, output_path: Path) -> None: Args: output_path (Path): Output path """ + if output_path.suffix.lower() != '.zip': + output_path = output_path.joinpath( + self.active_dataset.name + '.zip') + + output_path.parent.mkdir(parents=True, exist_ok=True) + self.active_dataset.check_complete() + + self.active_dataset.create_zip(output_path) def unzip(self, input_file: Path, output_path: Path) -> None: """This will unzip the archived dataset to the specified root diff --git a/e4e_data_management/data.py b/e4e_data_management/data.py index 6953893..f77bd80 100644 --- a/e4e_data_management/data.py +++ b/e4e_data_management/data.py @@ -1,7 +1,8 @@ '''Data classes ''' from __future__ import annotations - +import re +import fnmatch import datetime as dt import json import logging @@ -15,7 +16,7 @@ Union) from e4e_data_management.metadata import Metadata - +from e4e_data_management.exception import MissionFilesInStaging, ReadmeFilesInStaging, ReadmeNotFound, CorruptedDataset @dataclass class StagedFile: @@ -526,5 +527,38 @@ def create_zip(self, zip_path: Path) -> None: if zip_path.suffix.lower() != '.zip': raise RuntimeError('Invalid suffix') - with zipfile.ZipFile(file=zip_path, mode='w') as _: - pass + with zipfile.ZipFile(file=zip_path, mode='w') as handle: + manifest = self.manifest.get_dict() + for file in manifest: + src_path = self.root.joinpath(file) + dest = Path(self.name) / file + handle.write(filename=src_path, arcname=dest) + + def check_complete(self) -> None: + """Checks if the dataset is complete + + Raises: + MissionFilesInStaging: Mission files remain in staging + ReadmeFilesInStaging: Readme files remain in staging + ReadmeNotFound: Readme files not found + ReadmeNotFound: Readme files with acceptable extension not found + CorruptedDataset: Dataset checksum validation failed + """ + staged_mission_files = (mission.staged_files + for mission in self.missions.values()) + if any(len(staged) for staged in staged_mission_files): + raise MissionFilesInStaging + if len(self.staged_files) != 0: + raise ReadmeFilesInStaging + + readmes = [file for file in self.root.glob('*') + if re.match(fnmatch.translate('readme.*'), file.name, re.IGNORECASE)] + if len(readmes) == 0: + raise ReadmeNotFound + + acceptable_exts = ['.md', '.docx'] + if not any(readme.suffix.lower() in acceptable_exts for readme in readmes): + raise ReadmeNotFound('Acceptable extension not found') + + if not self.validate(): + raise CorruptedDataset diff --git a/e4e_data_management/exception.py b/e4e_data_management/exception.py new file mode 100644 index 0000000..1987066 --- /dev/null +++ b/e4e_data_management/exception.py @@ -0,0 +1,28 @@ +'''E4E Data Management Exceptions +''' +from abc import ABC + + +class Incomplete(Exception, ABC): + """Dataset not complete + """ + + +class MissionFilesInStaging(Incomplete): + """Mission files still in staging area + """ + + +class ReadmeFilesInStaging(Incomplete): + """Readme files still in staging area + """ + + +class ReadmeNotFound(Incomplete): + """Readme files not found + """ + + +class CorruptedDataset(Exception): + """Corrupted Dataset + """ diff --git a/tests/test_zip.py b/tests/test_zip.py new file mode 100644 index 0000000..13a5f27 --- /dev/null +++ b/tests/test_zip.py @@ -0,0 +1,47 @@ +'''Tests zipping +''' +from pathlib import Path +from tempfile import TemporaryDirectory +from typing import Tuple +from unittest.mock import Mock +import zipfile +from e4e_data_management.core import DataManager + +SingleMissionFixture = Tuple[Tuple[Mock, + DataManager, Path], Tuple[Path, int, int]] + + +def test_zip_to_dir(single_mission_data: SingleMissionFixture, + test_readme: Path): + """Tests zipping data + + Args: + single_mission(SingleMissionFixture): Single Mission test fixture + test_readme (Path): Test Readme + """ + test_app, _ = single_mission_data + _, app, _ = test_app + + app.add([test_readme], readme=True) + app.commit(readme=True) + with TemporaryDirectory() as target_dir: + zip_path = Path(target_dir) + app.zip(zip_path) + + final_path = zip_path.joinpath(app.active_dataset.name + '.zip') + assert final_path.is_file() + + with zipfile.ZipFile(file=final_path, mode='r') as handle: + assert handle.testzip() is None + manifest = app.active_dataset.manifest.get_dict() + for name in handle.filelist: + ar_name = Path(name.filename).relative_to( + app.active_dataset.name) + assert ar_name.as_posix() in manifest + + handle.extractall(target_dir) + + app.active_dataset.manifest.validate( + manifest=manifest, + files=Path(app.active_dataset.name).rglob('*') + ) From c3bead9a2cec33096e4f593b37611da35aceb727 Mon Sep 17 00:00:00 2001 From: Nathan Hui Date: Sun, 15 Dec 2024 19:59:52 -0800 Subject: [PATCH 08/10] style: Fixes styling --- e4e_data_management/core.py | 2 -- e4e_data_management/data.py | 11 ++++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/e4e_data_management/core.py b/e4e_data_management/core.py index 783807c..08ebb59 100644 --- a/e4e_data_management/core.py +++ b/e4e_data_management/core.py @@ -3,10 +3,8 @@ from __future__ import annotations import datetime as dt -import fnmatch import logging import pickle -import re from pathlib import Path from shutil import copy2, rmtree from typing import Dict, Iterable, List, Optional, Set diff --git a/e4e_data_management/data.py b/e4e_data_management/data.py index f77bd80..82b0917 100644 --- a/e4e_data_management/data.py +++ b/e4e_data_management/data.py @@ -1,12 +1,13 @@ '''Data classes ''' from __future__ import annotations -import re -import fnmatch + import datetime as dt +import fnmatch import json import logging import pickle +import re import zipfile from dataclasses import dataclass from hashlib import sha256 @@ -15,8 +16,12 @@ from typing import (Callable, Dict, Generator, Iterable, List, Optional, Set, Union) +from e4e_data_management.exception import (CorruptedDataset, + MissionFilesInStaging, + ReadmeFilesInStaging, + ReadmeNotFound) from e4e_data_management.metadata import Metadata -from e4e_data_management.exception import MissionFilesInStaging, ReadmeFilesInStaging, ReadmeNotFound, CorruptedDataset + @dataclass class StagedFile: From fc7f3844ddc136c823198e024a49eac4d0c3b910 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 21:05:02 +0000 Subject: [PATCH 09/10] chore(deps-dev): bump jinja2 from 3.1.4 to 3.1.5 Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.4...3.1.5) --- updated-dependencies: - dependency-name: jinja2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 552f98e..a6cbcc2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "annotated-types" @@ -396,13 +396,13 @@ colors = ["colorama (>=0.4.6)"] [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] From d55b3ac1e341e9e24aaa0c7ff505ec785af4487e Mon Sep 17 00:00:00 2001 From: semantic-release Date: Sat, 11 Jan 2025 02:58:17 +0000 Subject: [PATCH 10/10] 0.2.0 Automatically generated by python-semantic-release --- CHANGELOG.md | 58 +++++++++++++++++++++++++++++++++ e4e_data_management/__init__.py | 2 +- pyproject.toml | 2 +- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3df9dea..3daf41a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,53 @@ # CHANGELOG +## v0.2.0 (2025-01-11) + +### Chore + +* chore: Fixes naming ([`379e0a1`](https://github.com/UCSD-E4E/e4e-data-management/commit/379e0a157375a3bc25765cb3fbae50fc2bb2c85d)) + +### Feature + +* feat: Adds zip ([`6cdc42b`](https://github.com/UCSD-E4E/e4e-data-management/commit/6cdc42b7e60853efa9a50aa2fc383bb043740279)) + +### Style + +* style: Fixes styling ([`c3bead9`](https://github.com/UCSD-E4E/e4e-data-management/commit/c3bead9a2cec33096e4f593b37611da35aceb727)) + +* style: Fixes spaces and unused variables ([`7c920b1`](https://github.com/UCSD-E4E/e4e-data-management/commit/7c920b1fc836cb04455f5567fb6436fd3d777f86)) + +### Unknown + +* Merge pull request #92 from UCSD-E4E/37-zip-command + +37 zip command ([`24b24d5`](https://github.com/UCSD-E4E/e4e-data-management/commit/24b24d53d3985147f1d71278d80b0c683aeba620)) + +* Merge branch 'main' into 37-zip-command ([`1b573b5`](https://github.com/UCSD-E4E/e4e-data-management/commit/1b573b59113fc1f2d89d1a3c1f1c990fd4e9b879)) + +* Merge branch 'main' into 37-zip-command ([`f49afac`](https://github.com/UCSD-E4E/e4e-data-management/commit/f49afac204ce134df63b3def37d9e19a21e0fa9a)) + +* Merge branch '34-remove-dataset-after-pushing-to-server' into 37-zip-command ([`751363a`](https://github.com/UCSD-E4E/e4e-data-management/commit/751363a888875952b7903b265855a055f2e4a0c3)) + +* Merge branch 'main' into 37-zip-command ([`6bb26e7`](https://github.com/UCSD-E4E/e4e-data-management/commit/6bb26e7463fb440bb7a130236f0706258b529453)) + +* wip: Creates zip file ([`705346f`](https://github.com/UCSD-E4E/e4e-data-management/commit/705346f284b00954536212dc57f184aaf0915068)) + +* Merge pull request #47 from UCSD-E4E/42-implement-e4edm-validate + +42 implement e4edm validate ([`e5b4340`](https://github.com/UCSD-E4E/e4e-data-management/commit/e5b43401462353d02a0928cd0c5111ba5ab609ff)) + +* Merge branch 'main' into 42-implement-e4edm-validate ([`b114488`](https://github.com/UCSD-E4E/e4e-data-management/commit/b1144886ed295299613a75bd4d6c0130533f7e88)) + +* Merge pull request #83 from UCSD-E4E/60-chore-datamangercli-vs-datamanagercli + +chore: Fixes naming ([`95533b5`](https://github.com/UCSD-E4E/e4e-data-management/commit/95533b56a7068b682d63bb3e89d38daa0603d668)) + +* Merge branch 'main' into 60-chore-datamangercli-vs-datamanagercli ([`1500fca`](https://github.com/UCSD-E4E/e4e-data-management/commit/1500fca5d06f3eeeca290539b11ea0417464c3da)) + +* Merge branch 'main' into 60-chore-datamangercli-vs-datamanagercli ([`6aa2b72`](https://github.com/UCSD-E4E/e4e-data-management/commit/6aa2b72bdfb17d68635f7fa2f3f6ad522bc377db)) + +* Merge remote-tracking branch 'origin/main' into 42-implement-e4edm-validate ([`836df5a`](https://github.com/UCSD-E4E/e4e-data-management/commit/836df5adbe135b0f28ed4f5cabed4e25a972618c)) + ## v0.1.5 (2025-01-11) ### Ci @@ -32,6 +80,8 @@ fix: Adds exception logging to main invocation ([`cb9c732`](https://github.com/U 34 remove dataset after pushing to server ([`8a811be`](https://github.com/UCSD-E4E/e4e-data-management/commit/8a811bec27556f1dfba5044f3875cbecdc9b38e4)) +* Merge branch 'main' into 42-implement-e4edm-validate ([`e09c335`](https://github.com/UCSD-E4E/e4e-data-management/commit/e09c3353ae6ce15f3161dcd644ba17d13bc7ff03)) + ## v0.1.4 (2024-11-04) ### Fix @@ -140,6 +190,10 @@ Added self.save() call to dataset activation ([`cb5168d`](https://github.com/UCS * added save ([`f9fddfb`](https://github.com/UCSD-E4E/e4e-data-management/commit/f9fddfb44911be81afab8ed8697f0d5d91cc7c15)) +* Update version ([`7e0e9fb`](https://github.com/UCSD-E4E/e4e-data-management/commit/7e0e9fb88a7e097389e0ef9b532e83725c002879)) + +* Merge remote-tracking branch 'origin/main' into 42-implement-e4edm-validate ([`23a95b9`](https://github.com/UCSD-E4E/e4e-data-management/commit/23a95b96eeb332a6365ead70e4f3451aefe50de4)) + * Merge pull request #46 from UCSD-E4E/43-include-full-date-in-dataset 43 include full date in dataset ([`e034866`](https://github.com/UCSD-E4E/e4e-data-management/commit/e03486620bfa968b6d5604ea677a2aa6858e6d3c)) @@ -154,6 +208,10 @@ Added self.save() call to dataset activation ([`cb5168d`](https://github.com/UCS * Updated Tests ([`b0663e6`](https://github.com/UCSD-E4E/e4e-data-management/commit/b0663e6a544a85c1ef885424f5e4bb231875b640)) +* Added remaining logic ([`3223992`](https://github.com/UCSD-E4E/e4e-data-management/commit/32239925c01f1ad06714528d2f741170911df7b9)) + +* Adding command changes ([`bc12b34`](https://github.com/UCSD-E4E/e4e-data-management/commit/bc12b34fa0a5803087f6d033e7c5c9d572dcff48)) + * Merge pull request #36 from UCSD-E4E/34-remove-dataset-after-pushing-to-server 34 remove dataset after pushing to server ([`aad84c9`](https://github.com/UCSD-E4E/e4e-data-management/commit/aad84c96ebc1129ed9a4300d783b6c1ff021b02a)) diff --git a/e4e_data_management/__init__.py b/e4e_data_management/__init__.py index a3aac58..15e1c55 100644 --- a/e4e_data_management/__init__.py +++ b/e4e_data_management/__init__.py @@ -1,3 +1,3 @@ '''E4E Data Management Tools ''' -__version__ = '0.1.5' +__version__ = '0.2.0' diff --git a/pyproject.toml b/pyproject.toml index fe950da..e26f3d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "e4e-data-management" -version = "0.1.5" +version = "0.2.0" description = "E4E Data Management Tool (Python)" authors = [ "Nathan Hui ",