Package omero :: Package gateway :: Package scripts :: Module testdb_create
[hide private]
[frames] | no frames]

Source Code for Module omero.gateway.scripts.testdb_create

  1  #!/usr/bin/env python 
  2  # -*- coding: utf-8 -*- 
  3   
  4  """ 
  5     Library for gateway tests 
  6   
  7     Copyright 2009 Glencoe Software, Inc. All rights reserved. 
  8     Use is subject to license terms supplied in LICENSE.txt 
  9   
 10  """ 
 11   
 12  import os 
 13  import omero 
 14  from omero.rtypes import rstring 
 15   
 16  from omero.gateway.scripts import dbhelpers 
 17   
 18  dbhelpers.USERS = { 
 19      'user': dbhelpers.UserEntry('weblitz_test_user','foobar', 'User', 'Weblitz'), 
 20      'author': dbhelpers.UserEntry('weblitz_test_author','foobar', 'Author', 'Weblitz'), 
 21      } 
 22   
 23  dbhelpers.PROJECTS = { 
 24      'testpr1' : dbhelpers.ProjectEntry('weblitz_test_priv_project', 'author'), 
 25      'testpr2' : dbhelpers.ProjectEntry('weblitz_test_priv_project2', 'author'), 
 26  } 
 27   
 28  dbhelpers.DATASETS = { 
 29      'testds1' : dbhelpers.DatasetEntry('weblitz_test_priv_dataset', 'testpr1'), 
 30      'testds2' : dbhelpers.DatasetEntry('weblitz_test_priv_dataset2', 'testpr1'), 
 31      'testds3' : dbhelpers.DatasetEntry('weblitz_test_priv_dataset3', 'testpr2'), 
 32  } 
 33   
 34  dbhelpers.IMAGES = { 
 35      'testimg1' : dbhelpers.ImageEntry('weblitz_test_priv_image', 'imgs/CHOBI_d3d.dv', 'testds1'), 
 36      'testimg2' : dbhelpers.ImageEntry('weblitz_test_priv_image2', 'imgs/CHOBI_d3d.dv', 'testds1'), 
 37      'tinyimg' : dbhelpers.ImageEntry('weblitz_test_priv_image_tiny', 'imgs/tinyTest.d3d.dv', 'testds1'), 
 38      'badimg' : dbhelpers.ImageEntry('weblitz_test_priv_image_bad', False, 'testds1'), 
 39      'tinyimg2' : dbhelpers.ImageEntry('weblitz_test_priv_image_tiny2', 'imgs/tinyTest.d3d.dv', 'testds2'), 
 40      'tinyimg3' : dbhelpers.ImageEntry('weblitz_test_priv_image_tiny3', 'imgs/tinyTest.d3d.dv', 'testds3'), 
 41      'bigimg' : dbhelpers.ImageEntry('weblitz_test_priv_image_big', 'imgs/big.tiff', 'testds3'), 
 42  } 
 43   
 44   
45 -class TestDBHelper(object):
46
47 - def setUp(self, skipTestDB=False, skipTestImages=True):
48 self.tmpfiles = [] 49 self._has_connected = False 50 self._last_login = None 51 self.doDisconnect() 52 self.USER = dbhelpers.USERS['user'] 53 self.AUTHOR = dbhelpers.USERS['author'] 54 self.ADMIN = dbhelpers.ROOT 55 gateway = omero.client_wrapper() 56 try: 57 rp = gateway.getProperty('omero.rootpass') 58 if rp: 59 dbhelpers.ROOT.passwd = rp 60 finally: 61 gateway.seppuku() 62 63 self.prepTestDB(onlyUsers=skipTestDB, skipImages=skipTestImages) 64 self.doDisconnect()
65
66 - def doConnect (self):
67 if not self._has_connected: 68 self.gateway.connect() 69 self._has_connected = True 70 assert self.gateway.isConnected(), 'Can not connect' 71 assert self.gateway.keepAlive(), 'Could not send keepAlive to connection' 72 self.gateway.setGroupForSession(self.gateway.getEventContext().memberOfGroups[0])
73
74 - def doDisconnect(self):
75 if self._has_connected and self.gateway: 76 self.doConnect() 77 self.gateway.seppuku() 78 assert not self.gateway.isConnected(), 'Can not disconnect' 79 self.gateway = None 80 self._has_connected = False 81 self._last_login = None
82
83 - def doLogin (self, user=None, groupname=None):
84 l = (user, groupname) 85 if self._has_connected and self._last_login == l: 86 return self.doConnect() 87 self.doDisconnect() 88 if user: 89 self.gateway = dbhelpers.login(user, groupname) 90 else: 91 self.gateway = dbhelpers.loginAsPublic() 92 self.doConnect() 93 self._last_login = l
94
95 - def loginAsAdmin (self):
96 self.doLogin(self.ADMIN)
97
98 - def loginAsAuthor (self):
99 self.doLogin(self.AUTHOR)
100
101 - def loginAsUser (self):
102 self.doLogin(self.USER)
103
104 - def loginAsPublic (self):
105 self.doLogin()
106
107 - def tearDown(self):
108 109 try: 110 if self.gateway is not None: 111 self.gateway.seppuku() 112 finally: 113 failure = False 114 for tmpfile in self.tmpfiles: 115 try: 116 tmpfile.close() 117 except: 118 print "Error closing:"+tmpfile 119 if failure: 120 raise Exception("Exception on client.closeSession")
121
122 - def getTestProject (self):
123 return dbhelpers.getProject(self.gateway, 'testpr1')
124
125 - def getTestProject2 (self):
126 return dbhelpers.getProject(self.gateway, 'testpr2')
127
128 - def getTestDataset (self, project=None):
129 return dbhelpers.getDataset(self.gateway, 'testds1', project)
130
131 - def getTestDataset2 (self, project=None):
132 return dbhelpers.getDataset(self.gateway, 'testds2', project)
133
134 - def getTestImage (self, dataset=None, autocreate=False):
135 return dbhelpers.getImage(self.gateway, 'testimg1', forceds=dataset, autocreate=autocreate)
136
137 - def getTestImage2 (self, dataset=None):
138 return dbhelpers.getImage(self.gateway, 'testimg2', dataset)
139
140 - def getBadTestImage (self, dataset=None, autocreate=False):
141 return dbhelpers.getImage(self.gateway, 'badimg', forceds=dataset, autocreate=autocreate)
142
143 - def getTinyTestImage (self, dataset=None, autocreate=False):
144 return dbhelpers.getImage(self.gateway, 'tinyimg', forceds=dataset, autocreate=autocreate)
145
146 - def getTinyTestImage2 (self, dataset=None, autocreate=False):
147 return dbhelpers.getImage(self.gateway, 'tinyimg2', forceds=dataset, autocreate=autocreate)
148
149 - def getTinyTestImage3 (self, dataset=None, autocreate=False):
150 return dbhelpers.getImage(self.gateway, 'tinyimg3', forceds=dataset, autocreate=autocreate)
151
152 - def getBigTestImage (self, dataset=None, autocreate=False):
153 return dbhelpers.getImage(self.gateway, 'bigimg', forceds=dataset, autocreate=autocreate)
154
155 - def prepTestDB (self, onlyUsers=False, skipImages=True):
156 dbhelpers.bootstrap(onlyUsers=onlyUsers, skipImages=skipImages)
157
158 - def waitOnCmd(self, client, handle):
159 callback = omero.callbacks.CmdCallbackI(client, handle) 160 callback.loop(10, 500) # throws on timeout 161 rsp = callback.getResponse() 162 assert isinstance(rsp, omero.cmd.OK) 163 return callback
164 165
166 - def createPDTree(self, project=None, dataset=None):
167 """ 168 Create/link a Project and/or Dataset (link them if both are specified) 169 Existing objects can be parsed as an omero.model object(s) or blitz Wrapper objects. 170 Otherwise new objects will be created with name str(project) or str(dataset). 171 If project OR dataset is specified, the ProjectWrapper or DatasetWrapper is returned. 172 If both project and dataset are specified, they will be linked and the 173 PD-link is returned as a BlitzObjectWrapper. 174 175 @param project: omero.model.ProjectI OR omero.gateway.ProjectWrapper or name (string) 176 @param dataset: omero.model.DatasetI OR omero.gateway.DatasetWrapper or name (string) 177 """ 178 dsId = ds = None 179 prId = pr = None 180 returnVal = None 181 if dataset is not None: 182 try: 183 dsId = dataset.id 184 dsId = dsId.val 185 except: 186 ds = omero.model.DatasetI() 187 ds.name = rstring(str(dataset)) 188 ds = self.gateway.getUpdateService().saveAndReturnObject(ds) 189 returnVal = omero.gateway.DatasetWrapper(self.gateway, ds) 190 dsId = ds.id.val 191 if project is not None: 192 try: 193 prId = project.id 194 prId = prId.val 195 except: 196 pr = omero.model.ProjectI() 197 pr.name = rstring(str(project)) 198 pr = self.gateway.getUpdateService().saveAndReturnObject(pr) 199 returnVal = omero.gateway.ProjectWrapper(self.gateway, pr) 200 prId = pr.id.val 201 if dsId and prId: 202 link = omero.model.ProjectDatasetLinkI() 203 link.setParent(omero.model.ProjectI(prId, False)) 204 link.setChild(omero.model.DatasetI(dsId, False)) 205 link = self.gateway.getUpdateService().saveAndReturnObject(link) 206 returnVal = omero.gateway.BlitzObjectWrapper(self.gateway, link) 207 208 return returnVal
209
210 - def createTestImage(self, imageName="testImage", dataset=None, sizeX = 16, sizeY = 16, sizeZ = 1, sizeC = 1, sizeT = 1):
211 """ 212 Creates a test image of the required dimensions, where each pixel value is set 213 to the average value of x & y. If dataset (obj or name) is specified, will be linked to image. 214 If project (obj or name) is specified, will be created/linked to dataset (if dataset not None) 215 216 @param dataset: omero.model.DatasetI OR DatasetWrapper OR dataset ID 217 """ 218 from numpy import fromfunction, int16 219 from omero.util import script_utils 220 import random 221 222 def f(x,y): 223 return x
224 225 def planeGen(): 226 for p in range(sizeZ * sizeC * sizeT): 227 yield fromfunction(f,(sizeY,sizeX),dtype=int16)
228 229 ds = None 230 if dataset is not None: 231 if hasattr(dataset, "_obj"): 232 dataset = dataset._obj 233 if isinstance(dataset, omero.model.DatasetI): 234 ds = dataset 235 else: 236 try: 237 dsId = long(dataset) 238 ds = omero.model.DatasetI(dsId, False) 239 except: 240 pass 241 242 image = self.gateway.createImageFromNumpySeq (planeGen(), imageName, sizeZ=sizeZ, sizeC=sizeC, sizeT=sizeT, dataset=ds) 243 return image 244