import pdb import sys from java.io import File from ome.formats.importer import ImportLibrary from ome.formats.importer import OMEROWrapper from ome.formats import OMEROMetadataStore from ome.model.containers import Dataset from ome.model.screen import Plate, Well, WellSample class Uploader(object): def __init__(self, path): """ Creates an uploader instance parameter: path - path to file to upload """ self.path = path store = OMEROMetadataStore('omero', 'omero', 'localhost', '1099') self.store = store reader = OMEROWrapper() self.reader = reader self.lib = ImportLibrary(store, reader) def createPlate(self, image): """ creates plate, well, wellsample information and links it to the image """ update = self.store.getSF().getUpdateService() plate = Plate() plate.setName('plate1') plate = update.saveAndReturnObject(plate) well = Well() well.setRow(1) well.setColumn(1) well.setPlate(plate) well = update.saveAndReturnObject(well) wellSample = WellSample() wellSample.setImage(image) wellSample.setWell(well) wellSample = update.saveAndReturnObject(wellSample) def create(self, name, archive=True): """ uploads the image specified by self.path to the omero server parameter: name - name of the image on the omero server archive - archive original file on server """ # get project from db # if not existing with cretain name # create it project = None for p in self.store.getProjects(): print p.getName() if p.getName() == 'jython uploader': project = p break if not project: project = self.store.addProject('jython uploader', 'uploading files with jytyhon') # get dataset, again, create it if not existing dataset = None for d in self.store.getDatasets(project): if d.getName() == 'image1': dataset = d break if not dataset: dataset = self.store.addDataset('image1', 'the first image series', project) # link dataset to images that will be uploaded self.lib.setDataset(dataset) # open image for reading self.lib.open(self.path) # java File object passed to importImage f = File(self.path) # import image uploades image to server # # parameters are: # file # index: dummy, probably related to gui # numDone: dito # total: dito # imageName # archive: keep original file in store # the method stores metadata, walks through # all series in the file and stores all # images self.lib.importImage(f, 0, 0, planes, name, archive) # try ty add plate, well, sample info # for the image self.createPlate(self.store.getImage(0)) if __name__ == '__main__': # creat uploader with file given as command line are up = Uploader(sys.argv[1]) # upload image as A1 up.create('A1')