commit-gnue
[Top][All Lists]
Advanced

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

r5379 - trunk/gnue-appserver/src


From: reinhard
Subject: r5379 - trunk/gnue-appserver/src
Date: Fri, 19 Mar 2004 11:09:24 -0600 (CST)

Author: reinhard
Date: 2004-03-19 11:09:23 -0600 (Fri, 19 Mar 2004)
New Revision: 5379

Modified:
   trunk/gnue-appserver/src/geasInstance.py
   trunk/gnue-appserver/src/geasRpcServer.py
   trunk/gnue-appserver/src/geasSession.py
Log:
Adapted to the new possibilities of the RPC interface.


Modified: trunk/gnue-appserver/src/geasInstance.py
===================================================================
--- trunk/gnue-appserver/src/geasInstance.py    2004-03-19 17:07:20 UTC (rev 
5378)
+++ trunk/gnue-appserver/src/geasInstance.py    2004-03-19 17:09:23 UTC (rev 
5379)
@@ -63,32 +63,25 @@
     self.__classdef = classdef
 
   # ---------------------------------------------------------------------------
-  # Get the value of a property and convert it into RPC-transportable datatype
+  # Convert a value into the give type if possible
   # ---------------------------------------------------------------------------
 
-  def _getValue (self, propertyname):
-    propertydef = self.__classdef.properties [propertyname]
-    value = self.__record.getField (propertydef.column)
+  def __convert (self, value, propertydef):
 
-    # Always return an empty string for NULL
     if value is None:
-      return ""
+      # "None" is always valid, independent of data type
+      return None
 
-    # String property (the id is actually a string, too)
-    if propertydef.gnue_type == "id" or \
-       propertydef.gnue_type == "string":      
+    elif propertydef.dbType == "string":
+      # String property: we expect the database to deliver a unicode string
       if isinstance (value, types.UnicodeType):
-        # encode unicode values to utf-8 (normal case)
-        return value.encode ('utf-8')
-      elif isinstance (value, types.StringType):
-        # if not UnicodeType then return normal string
         return value
       else:
         raise DbValueError (propertyname, value)
-    
 
-    # Number property
-    elif propertydef.gnue_type == "number":
+    elif propertydef.dbType == "number":
+      # Number property: Must be something that can be converted to an int or
+      # float
       try:
         if propertydef.gnue_scale == 0:
           # ... without fractional part
@@ -99,163 +92,107 @@
       except ValueError:
         raise DbValueError (propertyname, value)
       
-    # Date property
-    elif propertydef.gnue_type == "date":
-      if isinstance (value, mx.DateTime.DateTimeType):
-        return value.date
-      elif isinstance (value, types.UnicodeType):
-        # TODO: Check if valid date
-        return value.encode ('utf-8')
+    elif propertydef.dbType == "date":
+      # Date property: Must be an mx.DateTime or at least parseable as such
+      if isinstance (value, types.UnicodeType):
+        value = mx.DateTime.ISO.ParseDateTime (value.encode ('utf-8') + \
+                                               ' 00:00:00')
       elif isinstance (value, types.StringType):
-        # TODO: Check if valid date
-        return value
-      else:
-        raise DbValueError (propertyname, value)
+        value = mx.DateTime.ISO.ParseDateTime (value + ' 00:00:00')
 
-    # Time property
-    elif propertydef.gnue_type == "time":
       if isinstance (value, mx.DateTime.DateTimeType):
-        return value.time
-      # some dbdrivers return DateTimeDelta values
-      elif isinstance (value, mx.DateTime.DateTimeDeltaType):
-        return str (value)
-      elif isinstance (value, types.UnicodeType):
-        # TODO: Check if valid time
-        return value.encode ('utf-8')
-      elif isinstance (value, types.StringType):
-        # TODO: Check if valid time
-        return value
+        return mx.DateTime.DateTime (value.year, value.month, value.day,
+                                     0, 0, 0)
       else:
         raise DbValueError (propertyname, value)
 
-    # Date/Time property
-    elif propertydef.gnue_type == "datetime":
-      if isinstance (value, mx.DateTime.DateTimeType):
-        return value.date + " " + value.time
-      elif isinstance (value, types.UnicodeType):
-        # TODO: Check if valid datetime
-        return value.encode ('utf-8')
+    elif propertydef.dbType == "time":
+      # Time property: Must be an mx.DateTime or at least parseable as such
+      if isinstance (value, types.UnicodeType):
+        value = mx.DateTime.ISO.ParseDateTime ('0001-01-01 ' + \
+                                               value.encode ('utf-8'))
       elif isinstance (value, types.StringType):
-        # TODO: Check if valid datetime
-        return value
-      else:
-        raise DbValueError (propertyname, value)
+        value = mx.DateTime.ISO.ParseDateTime ('0001-01-01 ' + value)
 
-    # Boolean property
-    elif propertydef.gnue_type == "boolean":
-      if value in [0, "0", "f", "F", "false", "FALSE", "n", "N", "no", "NO"]:
-        return 0
-      elif value in [1, "1", "t", "T", "true", "true", "y", "Y", "yes", "YES"]:
-        return 1
+      if isinstance (value, mx.DateTime.DateTimeType) or \
+         isinstance (value, mxDateTime.DateTimeDeltaType):
+        return mx.DateTime.DateTime (1, 1, 1,
+                                     value.hour, value.minute, value.second)
       else:
         raise DbValueError (propertyname, value)
 
-    # Reference property: gnue_type is a classname
-    elif self.__classdef.classes.has_key (propertydef.gnue_type):
+    elif propertydef.dbType == "datetime":
+      # Date/Time property: Must be an mx.DateTime or at least parseable as
+      # such
       if isinstance (value, types.UnicodeType):
-        # encode unicode values to utf-8 (normal case)
-        return value.encode ('utf-8')
+        return mx.DateTime.ISO.ParseDateTime (value.encode ('utf-8'))
       elif isinstance (value, types.StringType):
-        # if not UnicodeType then return normal string
+        return mx.DateTime.ISO.ParseDateTime (value)
+
+      if isinstance (value, mx.DateTime.DateTimeType):
         return value
       else:
         raise DbValueError (propertyname, value)
 
-    # TODO: Missing property types:
-    #       * list properties
-    #       * calculated properties (must have triggers working first)
+    elif propertydef.dbType == "boolean":
+      # Boolean property: Must be something meaningful
+      if value in [0, "0", "f", "F", "false", "FALSE", "n", "N", "no", "NO",
+                   False]:
+        return False
+      elif value in [1, "1", "t", "T", "true", "true", "y", "Y", "yes", "YES",
+                     True]:
+        return True
+      else:
+        raise DbValueError (propertyname, value)
 
     else:
-      raise Exception (_("Property type '%s' not defined") % \
-                        propertydef.gnue_type)
+      # Unknown property type
+      raise DbValueError (propertyname, value)
 
   # ---------------------------------------------------------------------------
+  # Get the value of a property and convert it into RPC-transportable datatype
+  # ---------------------------------------------------------------------------
+
+  def __getValue (self, propertyname):
+
+    propertydef = self.__classdef.properties [propertyname]
+
+    value = self.__record.getField (propertydef.column)
+
+    return self.__convert (value, propertydef)
+
+  # ---------------------------------------------------------------------------
   # Get the values of a list of properties
   # ---------------------------------------------------------------------------
 
   def get (self, propertylist):
+
     result = []
     for property in propertylist:
-      result.append (self._getValue (property))
+      result.append (self.__getValue (property))
     return result
 
   # ---------------------------------------------------------------------------
   # Set the value of a property and convert it into native datatype
   # ---------------------------------------------------------------------------
 
-  def _putValue (self, propertyname, value):
+  def __putValue (self, propertyname, value):
+
     propertydef = self.__classdef.properties [propertyname]
 
-    # TODO: add more tests to see if the new value is valid, wrt max length
+    __value = self.__convert (value, propertydef)
 
-    # NULL
-    if value == "":
-      value = None
+    self.__record.putField (propertydef.column, __value)
 
-    # String property (the id is actually a string, too)
-    elif propertydef.gnue_type == "id" or \
-         propertydef.gnue_type == "string":      
-      if not isinstance (value, types.StringType):
-        value = str (value)
-      # decode unicode values from utf-8 
-      value = unicode (value, 'utf-8')
-
-    # Number property
-    elif propertydef.gnue_type == "number":
-      try:
-        if propertydef.gnue_scale == 0:
-          # ... without fractional part
-          value = int (value)
-        else:
-          # ... with fractional part
-          value = float (value)
-      except ValueError:
-        raise PropertyValueError (propertyname, value)
-
-    # Date property
-    elif propertydef.gnue_type == "date":
-      try:
-        # Workaround: gnue-common's dbdriver for appserver post a datetime
-        # value for date properties. So silently accept that.
-        value = mx.DateTime.ISO.ParseDateTime (value)
-      except ValueError:
-        raise PropertyValueError (propertyname, value)
-
-    # Time property
-    elif propertydef.gnue_type == "time":
-      try:
-        # Workaround: gnue-common's dbdriver for appserver post a datetime
-        # value for time properties. So silently accept that.
-        value = mx.DateTime.ISO.ParseDateTime (value)
-      except ValueError:
-        raise PropertyValueError (propertyname, value)
-
-    # Date/Time property
-    elif propertydef.gnue_type == "datetime":
-      try:
-        value = mx.DateTime.ISO.ParseDateTime (value)
-      except ValueError:
-        raise PropertyValueError (propertyname, value)
-
-    # Boolean property
-    elif propertydef.gnue_type == "boolean":
-      if value in [0, "0", "f", "F", "false", "FALSE", "n", "N", "no", "NO"]:
-        value = 0
-      elif value in [1, "1", "t", "T", "true", "true", "y", "Y", "yes", "YES"]:
-        value = 1
-      else:
-        raise PropertyValueError (propertyname, value)
-
-    self.__record.putField (propertydef.column, value)
-
   # ---------------------------------------------------------------------------
   # Set the values of a list of properties
   # ---------------------------------------------------------------------------
 
   def put (self, propertylist, valuelist):
+
     i = 0
     for property in propertylist:
-      self._putValue (property, valuelist [i])
+      self.__putValue (property, valuelist [i])
       i += 1
 
   # ---------------------------------------------------------------------------
@@ -273,7 +210,7 @@
 
     # Create an object representing the current business object
     obj = Object.Object (sess, self.__classdef.fullName, 
-                         self._getValue (u'gnue_id'))
+                         self.__getValue (u'gnue_id'))
 
     # fetch the procedure definition
     proceduredef = self.__classdef.procedures [procedurename]

Modified: trunk/gnue-appserver/src/geasRpcServer.py
===================================================================
--- trunk/gnue-appserver/src/geasRpcServer.py   2004-03-19 17:07:20 UTC (rev 
5378)
+++ trunk/gnue-appserver/src/geasRpcServer.py   2004-03-19 17:09:23 UTC (rev 
5379)
@@ -30,7 +30,7 @@
 from gnue.common.apps import GConfig
 from gnue.common.apps.GServerApp import GServerApp
 from gnue.common.datasources import GLoginHandler
-from gnue.common.rpc import GComm
+from gnue.common.rpc import server
 from gnue.common.utils.FileUtils import openResource
 
 from gnue.appserver import VERSION
@@ -170,9 +170,9 @@
       return
 
     # Create the various servers
-    servers = GComm.bind (gnue.paths.data + '/share/gnue/grpc/appserver.grpc',
-                          self._transports,
-                          {'SessionManager': self.requestSessionManager})
+    servers = server.bind (gnue.paths.data + '/share/gnue/grpc/appserver.grpc',
+                           self._transports,
+                           {'SessionManager': self.requestSessionManager})
 
     # be verbose
     print _("\n... GNUe Application Server up and running ...\n")

Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py     2004-03-19 17:07:20 UTC (rev 
5378)
+++ trunk/gnue-appserver/src/geasSession.py     2004-03-19 17:09:23 UTC (rev 
5379)
@@ -203,11 +203,11 @@
 
     result = []
     for object_id in obj_id_list:
-      if object_id == "":
-        result.append ([classdef.properties[p].fullType for p in propertylist])
-      else:
+      if object_id:
         instance = self.__findInstance (classdef, object_id, propertylist)
         result.append (instance.get (propertylist))
+      else:
+        result.append ([classdef.properties[p].fullType for p in propertylist])
 
     return result
 





reply via email to

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