[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5379 - trunk/gnue-appserver/src,
reinhard <=