commit-gnue
[Top][All Lists]
Advanced

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

gnue-appserver/src classrep/Namespace.py langua...


From: Reinhard Mueller
Subject: gnue-appserver/src classrep/Namespace.py langua...
Date: Sun, 19 Oct 2003 13:55:56 -0400

CVSROOT:        /cvsroot/gnue
Module name:    gnue-appserver
Branch:         
Changes by:     Reinhard Mueller <address@hidden>       03/10/19 13:55:56

Modified files:
        src/classrep   : Namespace.py 
        src/language   : Object.py ObjectList.py 
Added files:
        src/language   : test.py 

Log message:
        Convert all data into native Python datatypes in language interface. 
Added test
        program.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-appserver/src/classrep/Namespace.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-appserver/src/language/test.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-appserver/src/language/Object.py.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-appserver/src/language/ObjectList.py.diff?tr1=1.6&tr2=1.7&r1=text&r2=text

Patches:
Index: gnue-appserver/src/classrep/Namespace.py
diff -c gnue-appserver/src/classrep/Namespace.py:1.2 
gnue-appserver/src/classrep/Namespace.py:1.3
*** gnue-appserver/src/classrep/Namespace.py:1.2        Thu Sep 18 11:14:10 2003
--- gnue-appserver/src/classrep/Namespace.py    Sun Oct 19 13:55:55 2003
***************
*** 19,25 ****
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: Namespace.py,v 1.2 2003/09/18 15:14:10 jvetter Exp $
  
  import string
  
--- 19,25 ----
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: Namespace.py,v 1.3 2003/10/19 17:55:55 reinhard Exp $
  
  import string
  
***************
*** 110,116 ****
  # Create a fully qualified name from a namespace and an identifier
  # 
-----------------------------------------------------------------------------
  def createName (namespace, identifier):
!   return "%s_%s" % (namespace, identifier)
  
  # 
-----------------------------------------------------------------------------
  # Try to figure out which NSID_* constant applies to identifier
--- 110,116 ----
  # Create a fully qualified name from a namespace and an identifier
  # 
-----------------------------------------------------------------------------
  def createName (namespace, identifier):
!   return str ("%s_%s" % (namespace, identifier))
  
  # 
-----------------------------------------------------------------------------
  # Try to figure out which NSID_* constant applies to identifier
Index: gnue-appserver/src/language/Object.py
diff -c gnue-appserver/src/language/Object.py:1.7 
gnue-appserver/src/language/Object.py:1.8
*** gnue-appserver/src/language/Object.py:1.7   Sat Oct 18 19:19:40 2003
--- gnue-appserver/src/language/Object.py       Sun Oct 19 13:55:56 2003
***************
*** 19,33 ****
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: Object.py,v 1.7 2003/10/18 23:19:40 reinhard Exp $
  
  import sys
! 
  
  def newObject (server, sessionId, classname, objData=None):
    return Object (server, sessionId, classname, objData)
  
  # ===========================================================================
  # Implements a single business object
  # ===========================================================================
  class Object:
--- 19,82 ----
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: Object.py,v 1.8 2003/10/19 17:55:56 reinhard Exp $
  
  import sys
! import types
! import mx.DateTime
! import mx.DateTime.ISO
  
  def newObject (server, sessionId, classname, objData=None):
    return Object (server, sessionId, classname, objData)
  
  # ===========================================================================
+ # Helper methods
+ # ===========================================================================
+ 
+ # ---------------------------------------------------------------------------
+ # Convert RPC transportable datatype into native Python object
+ # ---------------------------------------------------------------------------
+ 
+ def rpc_to_native (value, type):
+ 
+   # Empty strings indicate None
+   if value == '':
+     return None
+ 
+   # String: convert to unicode
+ # elif type [:7] == 'string(':
+ #   return unicode (value, 'utf-8')
+ 
+   # 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
+ 
+ # ---------------------------------------------------------------------------
+ # Convert native Python object into RPC transportable datatype
+ # ---------------------------------------------------------------------------
+ 
+ def __native_to_rpc (value):
+ 
+   if value is None:
+     return ''
+   elif isinstance (value, types.UnicodeType):
+     return value.encode ('utf-8')
+   else:
+     return str (value)
+ 
+ # ===========================================================================
  # Implements a single business object
  # ===========================================================================
  class Object:
***************
*** 59,68 ****
      if not self._cache.has_key (attr):
        if self._attrIsValid (attr):
        res = self._server.load (self._session_id, self._class, 
!                                [self.objectId], [attr]) [0]
!         # TODO: ask the class repository for the type of the attribute, 
convert
!         # it into the appropriate native python type
!       self._cache [attr] = res [0]
        else:
          raise AttributeError, attr
  
--- 108,115 ----
      if not self._cache.has_key (attr):
        if self._attrIsValid (attr):
        res = self._server.load (self._session_id, self._class, 
!                                [self.objectId, ''], [attr])
!       self._cache [attr] = rpc_to_native (res [0] [0], res [1] [0])
        else:
          raise AttributeError, attr
  
***************
*** 103,109 ****
        if key == 'gnue_id': 
        continue
        prop.append (key)
!       data.append (self._cache[key])
  
      res = self._server.store (self._session_id, self._class, [self.objectId],
                                prop, [data])
--- 150,156 ----
        if key == 'gnue_id': 
        continue
        prop.append (key)
!       data.append (native_to_rpc (self._cache[key]))
  
      res = self._server.store (self._session_id, self._class, [self.objectId],
                                prop, [data])
Index: gnue-appserver/src/language/ObjectList.py
diff -c gnue-appserver/src/language/ObjectList.py:1.6 
gnue-appserver/src/language/ObjectList.py:1.7
*** gnue-appserver/src/language/ObjectList.py:1.6       Thu Sep 18 11:14:10 2003
--- gnue-appserver/src/language/ObjectList.py   Sun Oct 19 13:55:56 2003
***************
*** 19,28 ****
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: ObjectList.py,v 1.6 2003/09/18 15:14:10 jvetter Exp $
  
  import types
! from Object import newObject
  
  CACHE_STEP = 10
  
--- 19,28 ----
  # write to the Free Software Foundation, Inc., 59 Temple Place 
  # - Suite 330, Boston, MA 02111-1307, USA.
  #
! # $Id: ObjectList.py,v 1.7 2003/10/19 17:55:56 reinhard Exp $
  
  import types
! from Object import newObject, rpc_to_native
  
  CACHE_STEP = 10
  
***************
*** 99,112 ****
    def _populateCache (self):
      rset = self._server.fetch (self._session_id, self.list_id, 
                                 len (self._cache), CACHE_STEP, 0)    
      for row in rset:
        ## Convert array into dictonary
!       i = 1
        objData = {}
  
        for p in self.properties:
!         objData [p] = row [i]
!         i = i + 1
          
        objData ["gnue_id"] = row [0]
        obj = newObject (self._server, self._session_id, self.classname, 
objData)
--- 99,114 ----
    def _populateCache (self):
      rset = self._server.fetch (self._session_id, self.list_id, 
                                 len (self._cache), CACHE_STEP, 0)    
+     types = self._server.load (self._session_id, self.classname, [''],
+                                self.properties)
      for row in rset:
        ## Convert array into dictonary
!       i = 0
        objData = {}
  
        for p in self.properties:
!         objData [p] = rpc_to_native (row [i+1], types [0] [i])
!         i += 1
          
        objData ["gnue_id"] = row [0]
        obj = newObject (self._server, self._session_id, self.classname, 
objData)




reply via email to

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