# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
dss,isCreated=dsm.giveADataScopeTransactionCalled(scopeName)
self.assertTrue(isCreated)
#
- t0=dss.createRdExtVarTransac(varName,obj2Str({"ab":[4,5,6]}))
+ t0=dss.createRdWrVarTransac(varName,obj2Str({"ab":[4,5,6]}))
dss.atomicApply([t0])
#
+ self.assertEqual(dss.getAccessOfVar(varName),"RdWr")
+ #
t1=dss.addKeyValueInVarHard(varName,obj2Str("cd"),obj2Str([7,8,9,10]))
dss.atomicApply([t1])
#
t0=dss.createRdExtVarTransac(varName,obj2Str({"ab":[4,5,6]}))
dss.atomicApply([t0])
#
+ self.assertEqual(dss.getAccessOfVar(varName),"RdExt")
+ #
self.assertRaises(SALOME.SALOME_Exception,dss.addKeyValueInVarErrorIfAlreadyExisting,varName,obj2Str("ab"),obj2Str([7,8,9,10]))#raises because ab is already a key !
t1=dss.addKeyValueInVarErrorIfAlreadyExisting(varName,obj2Str("cd"),obj2Str([7,8,9,10]))
dss.atomicApply([t1])
dss,isCreated=dsm.giveADataScopeTransactionCalled(scopeName)
self.assertTrue(isCreated)
#
- t0=dss.createRdExtVarTransac(varName,obj2Str({"ab":[4,5,6]}))
+ t0=dss.createRdWrVarTransac(varName,obj2Str({"ab":[4,5,6]}))
dss.atomicApply([t0])
#
t1=dss.addKeyValueInVarErrorIfAlreadyExisting(varName,obj2Str("cd"),obj2Str([7,8,9,10]))
dss,isCreated=dsm.giveADataScopeTransactionCalled(scopeName)
self.assertTrue(isCreated)
#
- t0=dss.createRdExtVarTransac(varName,obj2Str({"ab":[4,5,6]}))
+ t0=dss.createRdWrVarTransac(varName,obj2Str({"ab":[4,5,6]}))
dss.atomicApply([t0])
#
t1=dss.addKeyValueInVarHard(varName,obj2Str("cd"),obj2Str([7,8,9,10]))
t0=dss.createRdExtVarTransac(varName,obj2Str({"ab":[4,5,6]}))
dss.atomicApply([t0])
#
- self.assertRaises(SALOME.SALOME_Exception,dss.addKeyValueInVarErrorIfAlreadyExistingNow,varName,obj2Str("ab"),obj2Str([7,8,9,10]))#raises because ab is already a key !
- dss.addKeyValueInVarErrorIfAlreadyExistingNow(varName,obj2Str("cd"),obj2Str([7,8,9,10]))
+ self.assertEqual(dss.getAccessOfVar(varName),"RdExt")
+ t1=dss.addMultiKeyValueSession(varName)
+ self.assertEqual(dss.getAccessOfVar(varName),"RdExtInit")
+ self.assertRaises(SALOME.SALOME_Exception,t1.addKeyValueInVarErrorIfAlreadyExistingNow,obj2Str("ab"),obj2Str([7,8,9,10]))#raises because ab is already a key !
+ self.assertEqual(str2Obj(dss.fetchSerializedContent(varName)),{'ab':[4,5,6]})
+ wk=dss.waitForKeyInVar(varName,obj2Str("cd"))
+ t1.addKeyValueInVarErrorIfAlreadyExistingNow(obj2Str("cd"),obj2Str([7,8,9,10]))
+ self.assertEqual(str2Obj(wk.waitFor()),[7,8,9,10])
+ self.assertEqual(str2Obj(dss.fetchSerializedContent(varName)),{'ab':[4,5,6]})# it is not a bug ! commit of t1 not done !
+ dss.atomicApply([t1])
+ self.assertEqual(dss.getAccessOfVar(varName),"RdExt")
#
self.assertEqual(str2Obj(dss.fetchSerializedContent(varName)),{'ab':[4,5,6],'cd':[7,8,9,10]})
wk=dss.waitForKeyInVar(varName,obj2Str("cd"))
keys=[str2Obj(elt) for elt in dss.getAllKeysOfVarWithTypeDict(varName)]
self.assertEqual(keys,['ab','cd'])
+ def testTransaction6(self):
+ """ Test to test RdWr global vars with transaction"""
+ scopeName="Scope1"
+ varName="a"
+ dsm=salome.naming_service.Resolve("/DataServerManager")
+ dsm.cleanScopesInNS()
+ if scopeName in dsm.listScopes():
+ dsm.removeDataScope(scopeName)
+ dss,isCreated=dsm.giveADataScopeTransactionCalled(scopeName)
+ self.assertTrue(isCreated)
+ #
+ t0=dss.createWorkingVarTransac(varName,obj2Str({}))
+ a=SalomeSDSClt.GetHandlerFromRef(t0.getVar())
+ self.assertEqual(dss.getAccessOfVar(varName),"RdWr")
+ # play
+ a["ab"]=4
+ self.assertEqual(a.local_copy(),{"ab":4})
+ a.assign({"ab":5})
+ self.assertEqual(a.local_copy(),{"ab":5})
+ a.assign({"ab":4})
+ a["cd"]=[5]
+ self.assertEqual(a.local_copy(),{"ab":4,"cd":[5]})
+ a["cd"].append(77)
+ self.assertEqual(a.local_copy(),{"ab":4,"cd":[5,77]})
+ a.__setitem__("ef",["a","bb"])
+ self.assertEqual(a.local_copy(),{"ab":4,"cd":[5,77],"ef":["a","bb"]})
+ a["ef"].append("ccc")
+ self.assertEqual(a.local_copy(),{"ab":4,"cd":[5,77],"ef":["a","bb","ccc"]})
+ a["gh"]=a
+ self.assertEqual(a.local_copy(),{"ab":4,"cd":[5,77],"ef":["a","bb","ccc"],"gh":{"ab":4,"cd":[5,77],"ef":["a","bb","ccc"]}})
+ a["gh"]["cd"].append(99) ; a["cd"].append(88)
+ self.assertEqual(a.local_copy(),{"ab":4,"cd":[5,77,88],"ef":["a","bb","ccc"],"gh":{"ab":4,"cd":[5,77,99],"ef":["a","bb","ccc"]}})
+ # WARNING here not problem to overwrite
+ a["gh"]=7
+ self.assertEqual(a.local_copy(),{"ab":4,"cd":[5,77,88],"ef":["a","bb","ccc"],"gh":7})
+ # end of play
+ self.assertTrue(isinstance(a,SalomeSDSClt.Dict))
+ self.assertTrue(isinstance(a,SalomeSDSClt.WrappedType))# important for EEM
+ # commit : RdWr->RdOnly
+ dss.atomicApply([t0])
+ #
+ self.assertEqual(dss.getAccessOfVar(varName),"RdOnly") # after atomicApply the var is readOnly. Impossible to change its value !
+ self.assertEqual(str2Obj(dss.fetchSerializedContent(varName)),{"ab":4,"cd":[5,77,88],"ef":["a","bb","ccc"],"gh":7})
+ dsm.cleanScopesInNS()
+ del a # very important kill Ref before removingDataScope...
+ if scopeName in dsm.listScopes():
+ dsm.removeDataScope(scopeName)
+ pass
+
+ def testTransaction7(self):
+ """Like testTransaction5 but after a recovery."""
+ scopeName="Scope1"
+ varName="a"
+ dsm=salome.naming_service.Resolve("/DataServerManager")
+ dsm.cleanScopesInNS()
+ if scopeName in dsm.listScopes():
+ dsm.removeDataScope(scopeName)
+ dss,isCreated=dsm.giveADataScopeTransactionCalled(scopeName)
+ self.assertTrue(isCreated)
+ #
+ t0=dss.createRdExtInitVarTransac(varName,obj2Str({"ab":[4,5,6]}))
+ dss.atomicApply([t0])
+ #
+ self.assertEqual(dss.getAccessOfVar(varName),"RdExtInit")
+ t1=dss.addMultiKeyValueSession(varName)
+ self.assertEqual(dss.getAccessOfVar(varName),"RdExtInit")
+ t1.addKeyValueInVarErrorIfAlreadyExistingNow(obj2Str("cd"),obj2Str([7,8,9,10]))
+ self.assertEqual(str2Obj(dss.fetchSerializedContent(varName)),{'ab':[4,5,6]})# it is not a bug ! commit of t1 not done !
+ dss.atomicApply([t1])
+ self.assertEqual(dss.getAccessOfVar(varName),"RdExt")
+ self.assertEqual(str2Obj(dss.fetchSerializedContent(varName)),{'ab':[4,5,6],'cd':[7,8,9,10]})
+ pass
+
def setUp(self):
salome.salome_init()
pass