[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r5194 - trunk/gnue-common/src/datasources/drivers/appserver/appserver
From: |
reinhard |
Subject: |
r5194 - trunk/gnue-common/src/datasources/drivers/appserver/appserver |
Date: |
Sat, 28 Feb 2004 18:22:17 -0600 (CST) |
Author: reinhard
Date: 2004-02-28 18:22:16 -0600 (Sat, 28 Feb 2004)
New Revision: 5194
Modified:
trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
Log:
Changed all RPC calls to be absolutely Unicode safe.
Modified:
trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
2004-02-28 20:50:46 UTC (rev 5193)
+++ trunk/gnue-common/src/datasources/drivers/appserver/appserver/Connection.py
2004-02-29 00:22:16 UTC (rev 5194)
@@ -49,6 +49,18 @@
from DataObject import DataObject
from gnue.common.datasources.drivers.appserver.Schema.Discovery.Introspection
import Introspection
+# Translate Unicode to String. Called for every string parameter passed to RPC.
+# Works for lists, recursively.
+def _toString (value):
+ if type (value) == types.ListType:
+ return [_toString (x) for x in value]
+ elif type (value) == types.UnicodeType:
+ return value.encode ('utf-8')
+ elif type (value) == types.TupleType:
+ (x, y) = value
+ return (_toString (x), _toString (y))
+ else:
+ return value
# TODO: move all non standart Connection functions (request, ...) into a
subobject native
# to prevent namespace conflicts
@@ -108,11 +120,21 @@
return self._updateCursor
def request(self,table,filter,sort,fieldlist,unicodeMode=0):
- listid = self._sm.request(self._sess_id,table,filter,sort,fieldlist)
+ s_table = _toString (table)
+ s_filter = _toString (filter)
+ s_sort = _toString (sort)
+ s_fieldlist = _toString (fieldlist)
+ listid = self._sm.request (self._sess_id, s_table, s_filter, s_sort,
+ s_fieldlist)
return Appserver_ListCursor(self,listid,table,fieldlist,unicodeMode)
def call(self,classname,obj_id_list,methodname,parameters):
- self._sm.call(self._sess_id,classname,obj_id_list,methodname,parameters)
+ s_classname = _toString (classname)
+ s_obj_id_list = _toString (obj_id_list)
+ s_methodname = _toString (methodname)
+ s_parameters = _toString (parameters)
+ self._sm.call (self._sess_id, s_classname, s_obj_id_list, s_methodname,
+ s_parameters)
def commit (self):
self._updateCursor.execute ()
@@ -150,8 +172,11 @@
self._fieldlist=fieldlist
self._stackpos=0
self._unicodeMode=unicodeMode
+
+ s_classname = _toString (classname)
+ s_fieldlist = _toString (self._fieldlist)
self._fieldtypes = self._dataCon._sm.load (self._dataCon._sess_id,
- classname, [''],
self._fieldlist)
+ s_classname, [''], s_fieldlist)
self._fieldtypes = self._fieldtypes [0]
# convert a value retrieved from RPC to the correct native Python type
@@ -162,7 +187,7 @@
return None
# String: convert to unicode or local encoding
- elif typestr [:7] == 'string(':
+ elif typestr [:6] == 'string':
try:
value = unicode (value, 'utf-8')
except TypeError, msg:
@@ -263,8 +288,10 @@
def execute (self):
for classname in self._deleteList.keys ():
- self._dataCon._sm.delete (self._dataCon._sess_id, classname,
- self._deleteList [classname])
+ s_classname = _toString (classname)
+ s_deleteList = _toString (self._deleteList [classname])
+ self._dataCon._sm.delete (self._dataCon._sess_id, s_classname,
+ s_deleteList)
del self._deleteList [classname]
for classname in self._updateList.keys ():
@@ -273,8 +300,11 @@
dict = self._updateList[classname].pop()
# TODO: merge calls with similar updated fields (=dict.values())
data = [self.__native_to_rpc (x) for x in dict.values ()]
- new_ids = self._dataCon._sm.store (self._dataCon._sess_id, classname,
- [id], dict.keys(), [data])
+ s_classname = _toString (classname)
+ s_id = _toString (id)
+ s_propertynames = _toString (dict.keys ())
+ new_ids = self._dataCon._sm.store (self._dataCon._sess_id, s_classname,
+ [s_id], s_propertynames, [data])
dict ["gnue_id"] = new_ids [0]
del self._updateList [classname]
del self._updateKeyList [classname]
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5194 - trunk/gnue-common/src/datasources/drivers/appserver/appserver,
reinhard <=