diff --git a/.omeroci/cli-build b/.omeroci/cli-build index 4b9bb4f..732901e 100755 --- a/.omeroci/cli-build +++ b/.omeroci/cli-build @@ -18,7 +18,7 @@ export JAVA_LD_LIBRARY_PATH="$JAVA_HOME/lib/:$JAVA_HOME/lib/server" export CONDA_BACKUP_JAVA_HOME=$JAVA_HOME export CONDA_BACKUP_JAVA_LD_LIBRARY_PATH=$JAVA_LD_LIBRARY_PATH -source /tmp/miniconda/bin/activate +source /tmp/miniforge/bin/activate conda init conda activate omero diff --git a/.omeroci/py-setup b/.omeroci/py-setup index e81561d..24f9387 100755 --- a/.omeroci/py-setup +++ b/.omeroci/py-setup @@ -12,14 +12,14 @@ export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::") export JAVA_LD_LIBRARY_PATH="$JAVA_HOME/lib/:$JAVA_HOME/lib/server" export CONDA_BACKUP_JAVA_HOME=$JAVA_HOME export CONDA_BACKUP_JAVA_LD_LIBRARY_PATH=$JAVA_LD_LIBRARY_PATH -wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -sh Miniconda3-latest-Linux-x86_64.sh -b -p /tmp/miniconda -source /tmp/miniconda/bin/activate +wget --quiet https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh +sh Miniforge3-Linux-x86_64.sh -b -p /tmp/miniforge +source /tmp/miniforge/bin/activate conda init -conda create -n omero python=3.9 +conda create -n omero python=3.11 conda activate omero -pip install https://github.com/glencoesoftware/zeroc-ice-py-linux-x86_64/releases/download/20231130/zeroc_ice-3.6.5-cp39-cp39-manylinux_2_28_x86_64.whl -conda install -y -c bioconda bftools +pip install https://github.com/glencoesoftware/zeroc-ice-py-linux-x86_64/releases/download/20240202/zeroc_ice-3.6.5-cp311-cp311-manylinux_2_28_x86_64.whl +conda install -y -c ome bftools pip install pytest restview mox3 cd $TARGET diff --git a/setup.py b/setup.py index 5f6a8a6..29b1b9a 100755 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ def read(fname): packages=['', 'omero.plugins'], package_dir={"": "src"}, name="omero-cli-transfer", - version='1.1.0', + version='1.1.1', maintainer="Erick Ratamero", maintainer_email="erick.ratamero@jax.org", description=("A set of utilities for exporting a transfer" @@ -34,12 +34,12 @@ def read(fname): long_description_content_type="text/markdown", url="https://github.com/TheJacksonLaboratory/omero-cli-transfer", install_requires=[ - 'ezomero>=3.0.0, <4.0.0', - 'ome-types==0.5.1.post1' + 'ezomero>=3.1.0, <4.0.0', + 'ome-types>=0.6.1, <0.7.0' ], extras_require={ "rocrate": ["rocrate>=0.7.0, <1.0.0"], }, - python_requires='>=3.8', + python_requires='>=3.9', ) diff --git a/src/generate_omero_objects.py b/src/generate_omero_objects.py index ea277df..c332832 100644 --- a/src/generate_omero_objects.py +++ b/src/generate_omero_objects.py @@ -325,9 +325,9 @@ def create_plate_map(ome: OME, img_map: dict, conn: BlitzGateway newome = copy.deepcopy(ome) plate_map = {} map_ref_ids = [] - for plate in ome.plates: + for plate in newome.plates: ann_ids = [i.id for i in plate.annotation_refs] - for ann in ome.structured_annotations: + for ann in newome.structured_annotations: if (ann.id in ann_ids and isinstance(ann, XMLAnnotation)): tree = ETree.fromstring(to_xml(ann.value, diff --git a/src/generate_xml.py b/src/generate_xml.py index d5f756a..e538d0e 100644 --- a/src/generate_xml.py +++ b/src/generate_xml.py @@ -33,7 +33,7 @@ from generate_omero_objects import get_server_path import xml.etree.cElementTree as ETree from os import PathLike -import pkg_resources +import importlib import ezomero import os import csv @@ -456,7 +456,7 @@ def create_provenance_metadata(conn: BlitzGateway, img_id: int, if not metadata: return None, None software = "omero-cli-transfer" - version = pkg_resources.get_distribution(software).version + version = importlib.metadata.version(software) date_time = datetime.now().strftime("%d/%m/%Y, %H:%M:%S") ns = 'openmicroscopy.org/cli/transfer' curr_user = conn.getUser().getName() @@ -506,6 +506,7 @@ def create_objects(folder, filelist): if img not in (targets): continue img_path = os.path.join(os.getcwd(), folder, img) + print(f"checking {img_path} for OMERO targets...") cmd = ["omero", 'import', '-f', img_path, "\n"] res = cli.popen(cmd, stdout=PIPE, stderr=DEVNULL) std = res.communicate() @@ -644,7 +645,7 @@ def create_path_xml(target): def create_prepare_metadata(ann_id): software = "omero-cli-transfer" - version = pkg_resources.get_distribution(software).version + version = importlib.metadata.version(software) date_time = datetime.now().strftime("%d/%m/%Y, %H:%M:%S") ns = 'openmicroscopy.org/cli/transfer/prepare' md_dict: Dict[str, Any] = {} @@ -988,8 +989,7 @@ def populate_xml(datatype: str, id: int, filepath: str, conn: BlitzGateway, return ome, path_id_dict -def populate_xml_folder(folder: str, filelist: bool, conn: BlitzGateway, - session: str) -> Tuple[OME, dict]: +def populate_xml_folder(folder: str, filelist: bool) -> Tuple[OME, dict]: ome = OME() images, plates, annotations = create_objects(folder, filelist) ome.images = images @@ -1096,7 +1096,7 @@ def populate_figures(ome: OME, conn: BlitzGateway, filepath: str): binary_file=binaryfile) filepath_ann, ref = create_figure_annotations(f.id) ome.structured_annotations.append(filepath_ann) - f.annotation_ref.append(ref) + f.annotation_refs.append(ref) ome.structured_annotations.append(f) else: os.remove(filepath) diff --git a/src/omero_cli_transfer.py b/src/omero_cli_transfer.py index 40c5706..7a0ef67 100644 --- a/src/omero_cli_transfer.py +++ b/src/omero_cli_transfer.py @@ -308,7 +308,6 @@ def unpack(self, args): """ Implements the 'unpack' command """ self.__unpack(args) - @gateway_required def prepare(self, args): """ Implements the 'prepare' command """ self.__prepare(args) @@ -564,16 +563,16 @@ def __pack(self, args): are located image_filenames_mapping: dict that maps image ids to filenames """ - from pkg_resources import iter_entry_points - entry_points = [] - for p in iter_entry_points(group="omero_cli_transfer.pack.plugin"): + from importlib.metadata import entry_points + entrypoints = [] + for p in entry_points(group="omero_cli_transfer.pack.plugin"): if p.name == args.plugin: - entry_points.append(p.load()) - if len(entry_points) == 0: + entrypoints.append(p.load()) + if len(entrypoints) == 0: raise ValueError(f"Pack plugin {args.plugin} not found") else: - assert len(entry_points) == 1 - pack_plugin_func = entry_points[0] + assert len(entrypoints) == 1 + pack_plugin_func = entrypoints[0] pack_plugin_func( ome_object=obj, destination_path=Path(tar_path), @@ -795,8 +794,7 @@ def _make_image_map(self, source_map: dict, dest_map: dict, return imgmap def __prepare(self, args): - populate_xml_folder(args.folder, args.filelist, self.gateway, - self.session) + populate_xml_folder(args.folder, args.filelist) return diff --git a/test/data/prepare/transfer.xml b/test/data/prepare/transfer.xml index 706a391..9cf08d1 100644 --- a/test/data/prepare/transfer.xml +++ b/test/data/prepare/transfer.xml @@ -5,80 +5,108 @@ - + - - + + - - + + - - + + - - + + - - default-plate&plates=1.fake - - + - omero-cli-transfer - 0.6.0 - 08/08/2023, 13:51:49 + + default-plate&plates=1.fake + - - - default-plate&plates=1.fake - - - test_pyramid.ome.tif - - + + - omero-cli-transfer - 0.6.0 - 08/08/2023, 13:51:51 + + omero-cli-transfer + 1.1.1 + 19/02/2025, 14:38:13 + - - - vsi-ets-test-jpg2k.vsi - - + + - omero-cli-transfer - 0.6.0 - 08/08/2023, 13:51:53 + + default-plate&plates=1.fake + - - - vsi-ets-test-jpg2k.vsi - - + + - omero-cli-transfer - 0.6.0 - 08/08/2023, 13:51:53 + + test_pyramid.ome.tif + - + + + + + omero-cli-transfer + 1.1.1 + 19/02/2025, 14:38:15 + + + + + + + vsi-ets-test-jpg2k.vsi + + + + + + + omero-cli-transfer + 1.1.1 + 19/02/2025, 14:38:17 + + + + + + + vsi-ets-test-jpg2k.vsi + + + + + + + omero-cli-transfer + 1.1.1 + 19/02/2025, 14:38:17 + + + diff --git a/test/integration/test_prepare.py b/test/integration/test_prepare.py index d3b6628..20ff28d 100644 --- a/test/integration/test_prepare.py +++ b/test/integration/test_prepare.py @@ -17,7 +17,6 @@ from ome_types.model.map import M, Map from uuid import uuid4 - import ezomero import pytest import os @@ -39,6 +38,7 @@ def setup_method(self, method): self.args += ["transfer"] self.gw = BlitzGateway(client_obj=self.client) self.session = self.client.getSessionId() + self.cli.loadplugins() def delete_all(self): pjs = self.gw.getObjects("Project") @@ -79,6 +79,22 @@ def test_non_existing_folder(self): with pytest.raises(ValueError): self.cli.invoke(self.args, strict=True) + def test_dummy_prepare(self): + folder = Path(TEST_FOLDERS[0]) + if Path(folder / 'transfer.xml').exists(): + print('transfer.xml exists! deleting.') + os.remove(str(folder / 'transfer.xml')) + args = self.args + ["prepare", str(folder)] + self.cli.invoke(args, strict=True) + assert Path(folder / 'transfer.xml').exists() + assert os.path.getsize(str(folder / 'transfer.xml')) > 0 + args = self.args + ["unpack", "--folder", str(folder)] + with pytest.raises(KeyError): + self.cli.invoke(args, strict=True) + self.delete_all() + if Path(folder / 'transfer.xml').exists(): + os.remove(str(folder / 'transfer.xml')) + @pytest.mark.parametrize('folder', sorted(TEST_FOLDERS)) def test_prepare_clean(self, folder): folder = Path(folder)