Trees | Indices | Help |
|
---|
|
1 #!/usr/bin/env python 2 """ 3 Startup plugin for command-line exporter 4 5 Copyright 2009 Glencoe Software, Inc. All rights reserved. 6 Use is subject to license terms supplied in LICENSE.txt 7 8 """ 9 10 import os 11 import sys 12 13 from omero.cli import BaseControl, CLI, NewFileType 14 15 HELP="""Support for exporting data in XML and TIFF formats 16 17 Example Usage: 18 omero export --file new.ome.tif Image:1 19 omero export --file new.ome.xml --type XML Image:1 20 omero export --file output-dir --iterate Dataset:2 21 22 If --iterate is used used, the only supported obj is Dataset:<id> 23 """ 24 25 26 # Default block read size when downloading exported data 27 DEFAULT_READ_LENGTH = 1000*1000 28 2931133 134 try: 135 register("export", ExportControl, HELP) 136 except NameError: 137 if __name__ == "__main__": 138 cli = CLI() 139 cli.register("export", ExportControl, HELP) 140 cli.invoke(sys.argv[1:]) 14133 parser.add_argument("-f", "--file", type=NewFileType("wb"), required=True, help="Filename to export to or '-' for stdout. File may not exist") 34 parser.add_argument("-t", "--type", default="TIFF", choices=("TIFF", "XML"), help="Type of export. Default: %(default)s") 35 parser.add_argument("obj", help="Format: Image:<id>") 36 parser.add_argument("--iterate", action="store_true", default=False, 37 help="Iterate over an object and write individual objects to the directory named by --file (EXPERIMENTAL)") 38 39 parser.set_defaults(func=self.export)4042 43 img = args.obj 44 if 0 > img.find(":"): 45 self.ctx.die(5, "Format: 'Image:<id>'") 46 47 klass, id = img.split(":") 48 try: 49 id = long(id) 50 except: 51 self.ctx.die(3, "Bad id format: %s" % id) 52 53 images = [] 54 datasets = [] 55 56 if klass == "Image": 57 images.append(id) 58 self.handleImages(args, images) 59 elif klass == "Dataset": 60 if not args.iterate: 61 self.ctx.die(4, "Dataset currently only supported with --iterate") 62 datasets.append(id) 63 self.handleDatasets(args, datasets) 64 else: 65 self.ctx.die(5, "Can't add type: %s" % klass)6668 69 f = args.file 70 dir = f.name 71 f.close() 72 os.remove(dir) 73 os.makedirs(dir) 74 75 c = self.ctx.conn(args) 76 77 import omero 78 p = omero.sys.ParametersI() 79 p.leaves() 80 81 ds = c.sf.getContainerService().loadContainerHierarchy("Dataset", datasets, p) 82 if not ds: 83 self.ctx.die(7, "No datasets found: %s", ", ".join([str(x) for x in datasets])) 84 85 for d in ds: 86 for i in d.linkedImageList(): 87 if i: 88 i = i.id.val 89 args.file = open(os.path.join(dir, "%s.ome.%s" % (i,args.type.lower())), "wb") 90 self.handleImages(args, [i])9193 e = None 94 handle = args.file 95 96 c = self.ctx.conn(args) 97 e = c.getSession().createExporter() 98 99 remove = True 100 try: 101 for img in images: 102 e.addImage(img) 103 104 import omero 105 try: 106 if args.type == "TIFF": 107 l = e.generateTiff() 108 else: 109 l = e.generateXml() 110 except omero.ServerError, se: 111 self.ctx.err("%s: %s" % (se.__class__.__name__, se.message)) 112 return 113 114 remove = False 115 offset = 0 116 while True: 117 rv = e.read(offset, DEFAULT_READ_LENGTH) 118 if not rv: 119 break 120 rv = rv[:min(DEFAULT_READ_LENGTH, l - offset)] 121 offset += len(rv) 122 if handle == sys.stdout: 123 sys.stdout.buffer.write(rv) 124 else: 125 handle.write(rv) 126 127 finally: 128 if handle != sys.stdout: 129 handle.close() 130 if remove: 131 os.remove(handle.name) 132 e.close()
Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Tue Oct 18 13:29:13 2011 | http://epydoc.sourceforge.net |