def create_new_data_product(self, dataProductInput): reqcont = {} reqcont['dataProductInput'] = dataProductInput (cont, hdrs, msg) = yield self.rpc_send('create_new_data_product', reqcont) if cont.get('status') == 'OK': defer.returnValue(DataObject.decode(cont['value'])) else: defer.returnValue(None)
def create_new_instrument(self, userInput): reqcont = {} reqcont['userInput'] = userInput (cont, hdrs, msg) = yield self.rpc_send('create_new_instrument', reqcont) if cont.get('status') == 'OK': defer.returnValue(DataObject.decode(cont['value'])) else: defer.returnValue(None)
def test_dataobject(self): dobj = DataObject() dobj.set_attr('thing1','thing2') self.assertIsInstance(dobj.__dict__, dict) self.assertIsInstance(dobj.encode(),dict) self.assertEqual(dobj.get_attr('thing1'),'thing2') # test a simple dictionary d = dict() d['a']=1 d['b']='b' d['c']=3.14159 dobj.decode(d) self.assertEqual(dobj.get_attr('a'),1) self.assertEqual(dobj.get_attr('b'),'b') self.assertEqual(dobj.get_attr('c'),3.14159) dobj2=DataObject.from_encoding(d) self.assertEqual(dobj2.get_attr('a'),1) self.assertEqual(dobj2.get_attr('b'),'b') self.assertEqual(dobj2.get_attr('c'),3.14159) self.assertIdentical(dobj,dobj) # The Uniquie ID makes these two not equal self.assertNotEqual(dobj,dobj2) self.assertEqual(dobj2,DataObject.from_encoding(dobj2.encode())) self.assertRaises(AssertionError,dobj.set_attr, 6, 6) # Put a list, tuple, dict, DataObject and set in a dictionary # List d = dict() l=[1,'f',3.4] d['a']=l dobj3=DataObject.from_encoding(d) self.assertIsInstance(dobj3.get_attr('a'),list) self.assertEqual(dobj3.get_attr('a'),l) # For now, Assuming Lists are protected Blobs! ## Can't put complex things in a list #lx = list(l) #lx.append({6:5}) #dlx={'a':lx} #self.assertRaises(AssertionError,DataObject.from_encoding,dlx) # Tuple t=('t','u','p','l','e') dt={'b':t} self.assertRaises(AssertionError,DataObject.from_encoding,dt) #dobj3=DataObject.from_encoding(dt) ## Made Tuple an error! #self.assertIsInstance(dobj3.get_attr('b'),tuple) #self.assertEqual(dobj3.get_attr('b'),t) # Can't use tuple as Dict Key in DataObject dt={'b':t,(9,8):5} self.assertRaises(AssertionError,DataObject.from_encoding,dt) # Set s=set() for i in t: s.add(i) ds={'s':s} self.assertRaises(AssertionError,DataObject.from_encoding,ds) #self.assertIsInstance(dobj3.get_attr('c'),set) #self.assertEqual(dobj3.get_attr('c'),s) # Dictionary in a dictionary e=dict() f=dict() e['d']=d f['e']=e dobj3=DataObject.from_encoding(f) self.assertIsInstance(dobj3.get_attr('e'),DataObject) de=dobj3.get_attr('e') self.assertIsInstance(de.get_attr('d'),DataObject) dd=de.get_attr('d') self.assertEqual(dd.get_attr('a'),l) # Data Object a=DataObject.from_encoding(d) b=DataObject.from_encoding(d) c=DataObject.from_encoding(d) do=DataObject() do.set_attr('a',a) do.set_attr('b',b) do.set_attr('c',c) self.assertIsInstance(do.get_attr('a'),DataObject) self.assertEqual(do.get_attr('a'),a) print 'obja',a print 'objref',do.get_attr('a') blob = do.encode() d0 = DataObject.from_encoding(blob) #print '===a',d0.get_attr('a').__dict__ #print '===b',d0.get_attr('b').__dict__ #print '===c',d0.get_attr('c').__dict__ self.assertEqual(d0.get_attr('a'),a) # Recover the tuple # dt=d0.get_attr('a') # ti=dt.get_attr('b') # self.assertEqual(ti,t) # Recover the set # ds=d0.get_attr('a') # si=dt.get_attr('c') # self.assertEqual(si,s) self.assertEqual(do,d0) # Test Memory leak issue: # http://code.activestate.com/recipes/52308-the-simple-but-handy-collector-of-a-bunch-of-named/ for i in range(10**2): # try 10**9 a = DataObject()