changeset 6:5c743356df83 draft

"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/idr_download commit bf331f8e60e7bc1daf1cd71d2068062d925e7ffa"
author iuc
date Mon, 06 Jul 2020 19:33:59 -0400
parents e08b1dc0480c
children f067504aa92a
files idr_download_by_ids.py idr_download_by_ids.xml
diffstat 2 files changed, 33 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/idr_download_by_ids.py	Mon Jun 08 08:36:41 2020 -0400
+++ b/idr_download_by_ids.py	Mon Jul 06 19:33:59 2020 -0400
@@ -2,11 +2,10 @@
 import os
 import sys
 import tarfile
-import time
-from tempfile import TemporaryFile
+from contextlib import ExitStack
+from tempfile import TemporaryDirectory
 
 from libtiff import TIFF
-from PIL import Image
 from omero.gateway import BlitzGateway  # noqa
 from omero.constants.namespaces import NSBULKANNOTATIONS  # noqa
 
@@ -129,17 +128,25 @@
             .format(region_spec)
         )
 
-    # connect to idr
-    conn = BlitzGateway('public', 'public',
-                        host='idr.openmicroscopy.org',
-                        secure=True)
-    conn.connect()
+    with ExitStack() as exit_stack:
+        # connect to idr
+        conn = exit_stack.enter_context(
+            BlitzGateway(
+                'public', 'public',
+                host='idr.openmicroscopy.org',
+                secure=True
+            )
+        )
+        # exit_stack.callback(conn.connect().close)
+        if download_tar:
+            # create an archive file to write images to
+            archive = exit_stack.enter_context(
+                tarfile.open('images.tar', mode='w')
+            )
+            tempdir = exit_stack.enter_context(
+                TemporaryDirectory()
+            )
 
-    if download_tar:
-        # create an archive file to write images to
-        archive = tarfile.open('images.tar', mode='w')
-
-    try:
         for image_id in image_ids:
             image_warning_id = 'Image-ID: {0}'.format(image_id)
             try:
@@ -271,26 +278,17 @@
 
                 im_array = get_image_array(image, tile, z_stack, channel_index, frame)
 
-                # pack images into tarball
                 if download_tar:
-                    tar_img = Image.fromarray(im_array)
-                    # Use TemporaryFile() for intermediate storage of images.
-                    # TO DO: could this be improved by using
-                    # SpooledTemporaryFile with a suitable max_size?
-                    with TemporaryFile() as buf:
-                        tar_img.save(buf, format='TIFF')
-                        tarinfo = tarfile.TarInfo(name=fname)
-                        buf.seek(0, 2)
-                        tarinfo.size = buf.tell()
-                        tarinfo.mtime = time.time()
-                        buf.seek(0)
-                        archive.addfile(tarinfo=tarinfo, fileobj=buf)
-                else:  # save image as individual file
-                    try:
-                        tiff = TIFF.open(fname, mode='w')
-                        tiff.write_image(im_array)
-                    finally:
-                        tiff.close()
+                    fname = os.path.join(tempdir, fname)
+                try:
+                    tiff = TIFF.open(fname, mode='w')
+                    tiff.write_image(im_array)
+                finally:
+                    tiff.close()
+                # move image into tarball
+                if download_tar:
+                    archive.add(fname, os.path.basename(fname))
+                    os.remove(fname)
             except Exception as e:
                 if skip_failed:
                     # respect skip_failed on unexpected errors
@@ -299,13 +297,6 @@
                 else:
                     raise
 
-    finally:
-        # close the archive file,if it is created
-        if download_tar:
-            archive.close()
-        # Close the connection
-        conn.close()
-
 
 def _center_to_ul(center_x, center_y, width, height):
     if width > 0:
--- a/idr_download_by_ids.xml	Mon Jun 08 08:36:41 2020 -0400
+++ b/idr_download_by_ids.xml	Mon Jul 06 19:33:59 2020 -0400
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<tool id="idr_download_by_ids" name="IDR Download" version="0.41" profile="18.09">
+<tool id="idr_download_by_ids" name="IDR Download" version="0.42" profile="18.09">
     <description>- download images from the Image Data Resource using image IDs</description>
     <macros>
         <xml name="region_spec" token_pos="upper-left corner">
@@ -235,10 +235,10 @@
                     <assert_contents>
                         <has_size value="1382400" />
                         <has_archive_member path=".*/*__1828167__0__0__671__511.tiff" >
-                            <has_size value="685884" />
+                            <has_size value="685896" />
                         </has_archive_member>
                         <has_archive_member path=".*/*__1828658__0__0__671__511.tiff" >
-                            <has_size value="685884" />
+                            <has_size value="685896" />
                         </has_archive_member>
                     </assert_contents>
             </output>