commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnue-common/src/datasources/drivers/appserver/a...


From: Reinhard Mueller
Subject: gnue-common/src/datasources/drivers/appserver/a...
Date: Sun, 19 Oct 2003 09:17:46 -0400

CVSROOT:        /cvsroot/gnue
Module name:    gnue-common
Branch:         
Changes by:     Reinhard Mueller <address@hidden>       03/10/19 09:17:46

Modified files:
        src/datasources/drivers/appserver/appserver: Driver.py 

Log message:
        Convert values received from the RPC interface into native Python 
values.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/datasources/drivers/appserver/appserver/Driver.py.diff?tr1=1.25&tr2=1.26&r1=text&r2=text

Patches:
Index: gnue-common/src/datasources/drivers/appserver/appserver/Driver.py
diff -c gnue-common/src/datasources/drivers/appserver/appserver/Driver.py:1.25 
gnue-common/src/datasources/drivers/appserver/appserver/Driver.py:1.26
*** gnue-common/src/datasources/drivers/appserver/appserver/Driver.py:1.25      
Sat Oct 18 17:42:03 2003
--- gnue-common/src/datasources/drivers/appserver/appserver/Driver.py   Sun Oct 
19 09:17:45 2003
***************
*** 42,48 ****
  import types
  import md5
  import sys
! from mx import DateTime
  
  class Appserver_Connector:
    def __init__(self, connectData):
--- 42,48 ----
  import types
  import md5
  import sys
! import mx.DateTime, mx.DateTime.ISO
  
  class Appserver_Connector:
    def __init__(self, connectData):
***************
*** 85,91 ****
  
    def request(self,table,filter,sort,fieldlist,unicodeMode=0):
      listid = self._sm.request(self._sess_id,table,filter,sort,fieldlist)
!     return Appserver_ListCursor(self,listid,fieldlist,unicodeMode)
  
    def call(self,classname,obj_id_list,methodname,parameters):
      self._sm.call(self._sess_id,classname,obj_id_list,methodname,parameters)
--- 85,91 ----
  
    def request(self,table,filter,sort,fieldlist,unicodeMode=0):
      listid = self._sm.request(self._sess_id,table,filter,sort,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)
***************
*** 102,113 ****
      self._sm.close(self._sess_id,commit)
  
  class Appserver_ListCursor:
!   def __init__(self,dataCon,listid,fieldlist,unicodeMode=0):
      self._dataCon=dataCon
      self._listid=listid
      self._fieldlist=fieldlist
      self._stackpos=0
      self._unicodeMode=unicodeMode
  
    def fetch(self,count=5):
      if self._stackpos == -1:
--- 102,146 ----
      self._sm.close(self._sess_id,commit)
  
  class Appserver_ListCursor:
!   def __init__(self,dataCon,listid,classname,fieldlist,unicodeMode=0):
      self._dataCon=dataCon
      self._listid=listid
      self._fieldlist=fieldlist
      self._stackpos=0
      self._unicodeMode=unicodeMode
+     self._fieldtypes = self._dataCon._sm.load (self._dataCon._sess_id, 
+                                                classname, [''], 
self._fieldlist)
+ 
+   # convert a value retrieved from RPC to the correct native Python type
+   def __rpc_to_native (self, value, type):
+ 
+     # Empty strings indicate None
+     if value == '':
+       return None
+ 
+     # String: convert to unicode or local encoding
+     elif type [:7] == 'string(':
+       value = unicode (value, 'utf-8')
+       if self._unicodeMode:
+         return value
+       else:
+         return value.encode (gConfig ('textEncoding'))
+ 
+     # Date: convert to mx.DateTime object
+     elif type == 'date':
+       return mx.DateTime.ISO.ParseDate (value)
+ 
+     # Time: convert to mx.DateTime object
+     elif type == 'time':
+       return mx.DateTime.ISO.ParseTime (value)
+ 
+     # DateTime: convert to mx.DateTime object
+     elif type == 'datetime':
+       return mx.DateTime.ISO.ParseDateTime (value)
+ 
+     # All others (id, number, boolean, reference): no need to convert
+     else:
+       return value
  
    def fetch(self,count=5):
      if self._stackpos == -1:
***************
*** 123,147 ****
  
      list = []
      for i in result:
-       # xmlrpc GNURPC driver changes None into 1
-       # so we have to check for None or 1
-       # while (Instance!=None) and (Instance!=1):
        dict = {}
!       j = 1
        for fieldName in self._fieldlist:
!         value = i[j]
!         
!         # convert Strings to unicode
!         if type(value) == types.StringType:
!           value = unicode(value,'utf-8')
! 
!         # recode unicode strings to standart encoding
!         if (type(value) == types.UnicodeType) and \
!                (not self._unicodeMode):
!           value = value.encode(gConfig('textEncoding'))
!             
!         dict[fieldName] = value
!         j=j+1
          
        dict["gnue_id"]=i[0]
        list.append(dict)      
--- 156,166 ----
  
      list = []
      for i in result:
        dict = {}
!       j = 0
        for fieldName in self._fieldlist:
!         dict [fieldName] = self.__rpc_to_native (i [j+1], self._fieldtypes 
[j])
!         j += 1
          
        dict["gnue_id"]=i[0]
        list.append(dict)      
***************
*** 179,186 ****
      self._updateList[classname].append(fieldDict)
      self._updateKeyList[classname].append(id)
  
!   # convert a string, a unicode string or a date to utf-8
!   def _to_utf_8 (self, s):
      if type (s) == types.StringType:
        if self._unicodeMode:
          msg = 'WARNING: non-unicode passed to the dbdriver (%s)' % value
--- 198,205 ----
      self._updateList[classname].append(fieldDict)
      self._updateKeyList[classname].append(id)
  
!   # convert a native Python type into something transportable by RPC
!   def __native_to_rpc (self, s):
      if type (s) == types.StringType:
        if self._unicodeMode:
          msg = 'WARNING: non-unicode passed to the dbdriver (%s)' % value
***************
*** 188,194 ****
        s = unicode (s, gConfig ('textEncoding'))
      if type (s) == types.UnicodeType:
        s = s.encode ('utf-8')
!     elif type (s) == DateTime.DateTimeType:
        s = s.date + ' ' + s.time
      elif s is None:
        s = ''
--- 207,213 ----
        s = unicode (s, gConfig ('textEncoding'))
      if type (s) == types.UnicodeType:
        s = s.encode ('utf-8')
!     elif type (s) == mx.DateTime.DateTimeType:
        s = s.date + ' ' + s.time
      elif s is None:
        s = ''
***************
*** 205,211 ****
          id = self._updateKeyList[classname].pop()
          dict = self._updateList[classname].pop()
          # TODO: merge calls with similar updated fields (=dict.values())
!         data = [self._to_utf_8 (x) for x in dict.values ()]
          new_ids = self._dataCon._sm.store (self._dataCon._sess_id, classname,
                                             [id], dict.keys(), [data])
          dict ["gnue_id"] = new_ids [0]
--- 224,230 ----
          id = self._updateKeyList[classname].pop()
          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])
          dict ["gnue_id"] = new_ids [0]




reply via email to

[Prev in Thread] Current Thread [Next in Thread]