Salome HOME
venv directory is configured in config_appli.xml file
[modules/kernel.git] / src / SALOMESDS / SalomeSDSClt.py
index 9e0969de2dd49c4f2e5e213c7c4219445c1722d8..07c03f742b8428145925bc32faf3855cef625157 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2021  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
 # Author : Anthony Geay
 
 import SALOME
-import cPickle
+import pickle
+import SALOMEWrappedStdType
 
-class WrappedType(object):
+class InvokatorStyle:
+    def __init__(self,varPtr):
+        self._var_ptr=varPtr
+    def ptr(self):
+        return self._var_ptr
+    pass
+
+class InvokatorPossibleStyle(InvokatorStyle):
+    def __init__(self,varPtr):
+        InvokatorStyle.__init__(self,varPtr)
+        assert(self.__class__.IsOK(varPtr))
+
+    def invokePythonMethodOn(self,meth,argsInStrFrmt):
+        return self._var_ptr.invokePythonMethodOn(meth,argsInStrFrmt)
+        
+    @classmethod
+    def IsOK(cls,varPtr):
+        return isinstance(varPtr,SALOME._objref_PickelizedPyObjRdExtServer) or isinstance(varPtr,SALOME._objref_PickelizedPyObjRdWrServer)
+    pass
+
+class InvokatorImpossibleStyle(InvokatorStyle):
+    def __init__(self,varPtr):
+        InvokatorStyle.__init__(self,varPtr)
+        assert(self.__class__.IsOK(varPtr))
+        
+    def invokePythonMethodOn(self,meth,argsInStrFrmt):
+        raise Exception("Cannot invoke because it is readonly var !")
+
+    @classmethod
+    def IsOK(cls,varPtr):
+        return isinstance(varPtr,SALOME._objref_PickelizedPyObjRdOnlyServer)
+    pass
+
+def InvokatorStyleFactory(varPtr):
+    if InvokatorImpossibleStyle.IsOK(varPtr):
+        return InvokatorImpossibleStyle(varPtr)
+    if InvokatorPossibleStyle.IsOK(varPtr):
+        return InvokatorPossibleStyle(varPtr)
+    raise Exception("InvokatorStyleFactory : unmanaged type of var (%s)!"%(type(varPtr)))
+    pass
+
+class WrappedType(SALOMEWrappedStdType.WrappedType):
     def __init__(self,varPtr,isTemporaryVar=False):
         assert(isinstance(varPtr,SALOME._objref_PickelizedPyObjServer))
-        self._var_ptr=varPtr
+        self._var_ptr=InvokatorStyleFactory(varPtr)
         if not isTemporaryVar:
-            self._var_ptr.Register()
+            self._var_ptr.ptr().Register()
         self._is_temp=isTemporaryVar
         pass
 
+    def ptr(self):
+        return self._var_ptr.ptr()
+
     def local_copy(self):
-        return cPickle.loads(self._var_ptr.fetchSerializedContent())
+        return pickle.loads(self._var_ptr.ptr().fetchSerializedContent())
 
     def __str__(self):
         return self.local_copy().__str__()
@@ -44,17 +89,18 @@ class WrappedType(object):
         return (self._wrapped_type,(self.local_copy(),))
 
     def assign(self,elt):
-        assert(isinstance(self._var_ptr,SALOME._objref_PickelizedPyObjRdWrServer))
-        st=cPickle.dumps(elt,cPickle.HIGHEST_PROTOCOL)
-        self._var_ptr.setSerializedContent(st)
+        ptrCorba=self._var_ptr.ptr()
+        assert(isinstance(ptrCorba,SALOME._objref_PickelizedPyObjRdWrServer))
+        st=pickle.dumps(elt,pickle.HIGHEST_PROTOCOL)
+        ptrCorba.setSerializedContent(st)
         pass
 
     def __del__(self):
-        self._var_ptr.UnRegister()
+        self._var_ptr.ptr().UnRegister()
         pass
     pass
 
-class List(WrappedType):
+class List(WrappedType,SALOMEWrappedStdType.List):
     def __init__(self,varPtr,isTemporaryVar=False):
         WrappedType.__init__(self,varPtr,isTemporaryVar)
         self._wrapped_type=list
@@ -99,7 +145,7 @@ class List(WrappedType):
     def sort(self,*args):
         ret=Caller(self._var_ptr,"sort")
         return ret(*args)
-    
+    # work on local copy
     def count(self,*args):
         return self.local_copy().count(*args)
 
@@ -110,7 +156,7 @@ class List(WrappedType):
         return len(self.local_copy())
     pass
 
-class Dict(WrappedType):
+class Dict(WrappedType,SALOMEWrappedStdType.Dict):
     def __init__(self,varPtr,isTemporaryVar=False):
         WrappedType.__init__(self,varPtr,isTemporaryVar)
         self._wrapped_type=dict
@@ -179,7 +225,7 @@ class Dict(WrappedType):
 
     pass
 
-class Tuple(WrappedType):
+class Tuple(WrappedType,SALOMEWrappedStdType.Tuple):
     def __init__(self,varPtr,isTemporaryVar=False):
         WrappedType.__init__(self,varPtr,isTemporaryVar)
         self._wrapped_type=tuple
@@ -202,7 +248,7 @@ class Tuple(WrappedType):
 
     pass
 
-class Float(WrappedType):
+class Float(WrappedType,SALOMEWrappedStdType.Float):
     def __init__(self,varPtr,isTemporaryVar=False):
         WrappedType.__init__(self,varPtr,isTemporaryVar)
         self._wrapped_type=float
@@ -217,8 +263,11 @@ class Float(WrappedType):
     def __imul__(self,*args):
         return self.local_copy().__mul__(*args)
 
-    def __idiv__(self,*args):
-        return self.local_copy().__div__(*args)
+    def __itruediv__(self,*args):
+        return self.local_copy().__truediv__(*args)
+
+    def __ifloordiv__(self,*args):
+        return self.local_copy().__floordiv__(*args)
 
     def __add__(self,*args):
         return self.local_copy().__add__(*args)
@@ -229,8 +278,11 @@ class Float(WrappedType):
     def __mul__(self,*args):
         return self.local_copy().__mul__(*args)
 
-    def __div__(self,*args):
-        return self.local_copy().__div__(*args)
+    def __floordiv__(self,*args):
+        return self.local_copy().__floordiv__(*args)
+
+    def __truediv__(self,*args):
+        return self.local_copy().__truediv__(*args)
     
     def __pow__(self,*args):
         return self.local_copy().__pow__(*args)
@@ -257,7 +309,7 @@ class Float(WrappedType):
         return self.local_copy().real(*args)
     pass
 
-class Int(WrappedType):
+class Int(WrappedType,SALOMEWrappedStdType.Int):
     def __init__(self,varPtr,isTemporaryVar=False):
         WrappedType.__init__(self,varPtr,isTemporaryVar)
         self._wrapped_type=int
@@ -275,8 +327,11 @@ class Int(WrappedType):
     def __imod__(self,*args):
         return self.local_copy().__mod__(*args)
     
-    def __idiv__(self,*args):
-        return self.local_copy().__div__(*args)
+    def __itruediv__(self,*args):
+        return self.local_copy().__truediv__(*args)
+    
+    def __ifloordiv__(self,*args):
+        return self.local_copy().__floordiv__(*args)
 
     def __add__(self,*args):
         return self.local_copy().__add__(*args)
@@ -290,9 +345,12 @@ class Int(WrappedType):
     def __mod__(self,*args):
         return self.local_copy().__mod__(*args)
 
-    def __div__(self,*args):
-        return self.local_copy().__div__(*args)
-    
+    def __truediv__(self,*args):
+        return self.local_copy().__truediv__(*args)
+
+    def __floordiv__(self,*args):
+        return self.local_copy().__floordiv__(*args)
+
     def __pow__(self,*args):
         return self.local_copy().__pow__(*args)
 
@@ -315,7 +373,7 @@ class Int(WrappedType):
         return self.local_copy().real(*args)
     pass
 
-class String(WrappedType):
+class String(WrappedType,SALOMEWrappedStdType.String):
     def __init__(self,varPtr,isTemporaryVar=False):
         WrappedType.__init__(self,varPtr,isTemporaryVar)
         self._wrapped_type=int
@@ -450,13 +508,12 @@ class String(WrappedType):
 
 class Caller:
     def __init__(self,varPtr,meth):
-        assert(isinstance(varPtr,SALOME._objref_PickelizedPyObjServer))
         self._var_ptr=varPtr
         self._meth=meth
         pass
 
     def __call__(self,*args):
-        ret=self._var_ptr.invokePythonMethodOn(self._meth,cPickle.dumps(args,cPickle.HIGHEST_PROTOCOL))
+        ret=self._var_ptr.invokePythonMethodOn(self._meth,pickle.dumps(args,pickle.HIGHEST_PROTOCOL))
         return GetHandlerFromRef(ret,True)
     pass
 
@@ -466,7 +523,7 @@ def GetHandlerFromRef(objCorba,isTempVar=False):
     """ Returns a client that allows to handle a remote corba ref of a global var easily.
     """
     assert(isinstance(objCorba,SALOME._objref_PickelizedPyObjServer))
-    v=cPickle.loads(objCorba.fetchSerializedContent())
+    v=pickle.loads(objCorba.fetchSerializedContent())
     if v is None:
         objCorba.UnRegister()
         return None
@@ -475,18 +532,21 @@ def GetHandlerFromRef(objCorba,isTempVar=False):
     
 def CreateRdOnlyGlobalVar(value,varName,scopeName):
     import salome
+    salome.salome_init()
     dsm=salome.naming_service.Resolve("/DataServerManager")
     d2s,isCreated=dsm.giveADataScopeCalled(scopeName)
-    return GetHandlerFromRef(d2s.createRdOnlyVar(varName,cPickle.dumps(value,cPickle.HIGHEST_PROTOCOL)),False)
+    return GetHandlerFromRef(d2s.createRdOnlyVar(varName,pickle.dumps(value,pickle.HIGHEST_PROTOCOL)),False)
     
 def CreateRdExtGlobalVar(value,varName,scopeName):
     import salome
+    salome.salome_init()
     dsm=salome.naming_service.Resolve("/DataServerManager")
     d2s,isCreated=dsm.giveADataScopeCalled(scopeName)
-    return GetHandlerFromRef(d2s.createRdExtVar(varName,cPickle.dumps(value,cPickle.HIGHEST_PROTOCOL)),False)
+    return GetHandlerFromRef(d2s.createRdExtVar(varName,pickle.dumps(value,pickle.HIGHEST_PROTOCOL)),False)
 
-def GetHandlerFromName(scopeName,varName):
+def GetHandlerFromName(varName,scopeName):
     import salome
+    salome.salome_init()
     dsm=salome.naming_service.Resolve("/DataServerManager")
     d2s=dsm.retriveDataScope(scopeName)
     return GetHandlerFromRef(d2s.retrieveVar(varName),False)