[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue-appserver/src geasInstance.py
From: |
Reinhard Mueller |
Subject: |
gnue-appserver/src geasInstance.py |
Date: |
Sat, 18 Oct 2003 19:10:44 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue-appserver
Branch:
Changes by: Reinhard Mueller <address@hidden> 03/10/18 19:10:43
Modified files:
src : geasInstance.py
Log message:
Again cleaned up type conversions, and added some more checks for
correct
datatype.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-appserver/src/geasInstance.py.diff?tr1=1.28&tr2=1.29&r1=text&r2=text
Patches:
Index: gnue-appserver/src/geasInstance.py
diff -c gnue-appserver/src/geasInstance.py:1.28
gnue-appserver/src/geasInstance.py:1.29
*** gnue-appserver/src/geasInstance.py:1.28 Sat Oct 18 17:54:26 2003
--- gnue-appserver/src/geasInstance.py Sat Oct 18 19:10:39 2003
***************
*** 19,28 ****
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: geasInstance.py,v 1.28 2003/10/18 21:54:26 reinhard Exp $
import types
! from mx import DateTime
#
=============================================================================
# Instance class
--- 19,29 ----
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: geasInstance.py,v 1.29 2003/10/18 23:10:39 reinhard Exp $
import types
! import mx.DateTime
! import mx.DateTime.ISO
#
=============================================================================
# Instance class
***************
*** 40,163 ****
self._classdef = classdef
#
---------------------------------------------------------------------------
! # Get the value of a property
#
---------------------------------------------------------------------------
def _getValue (self, propertyname):
propertydef = self._classdef.properties [propertyname]
if propertydef.gnue_type == "id" or \
propertydef.gnue_type == "string":
! # String property (the id is actually a string, too)
! s = self._record.getField (propertydef.column)
! if s is None:
! return ""
! elif type (s) == types.UnicodeType:
# encode unicode values to utf-8 (normal case)
! return s.encode ('utf-8')
! elif type (s) == types.StringType:
# if not UnicodeType then return normal string
! return s
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (s, propertyname)
elif propertydef.gnue_type == "number":
! # Number property
! s = self._record.getField (propertydef.column)
! if s is None:
! return ""
! elif propertydef.gnue_scale == 0:
! # ... without fractional part
! try:
! return int (s)
! except ValueError:
! raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (s, propertyname)
! else:
! # ... with fractional part
! try:
! return float (s)
! except ValueError:
! raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (s, propertyname)
elif propertydef.gnue_type == "date":
! s = self._record.getField (propertydef.column)
! if s is None: # NULL
! return ""
! elif type (s) == types.UnicodeType: # String DB field w/ Unicode
# TODO: Check if valid date
! return s.encode ('utf-8')
! elif type (s) == types.StringType: # String DB field w/o Unicode
# TODO: Check if valid date
! return s
! elif type (s) == DateTime.DateTimeType: # DateTime DB field
! return s.date
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (s, propertyname)
elif propertydef.gnue_type == "time":
! s = self._record.getField (propertydef.column)
! if s is None: # NULL
! return ""
! elif type (s) == types.UnicodeType: # String DB field w/ Unicode
# TODO: Check if valid time
! return s.encode ('utf-8')
! elif type (s) == types.StringType: # String DB field w/o Unicode
# TODO: Check if valid time
! return s
! elif type (s) == DateTime.DateTimeType: # DateTime DB field
! return s.time
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (s, propertyname)
elif propertydef.gnue_type == "datetime":
! s = self._record.getField (propertydef.column)
! if s is None: # NULL
! return ""
! elif type (s) == types.UnicodeType: # String DB field w/ Unicode
# TODO: Check if valid datetime
! return s.encode ('utf-8')
! elif type (s) == types.StringType: # String DB field w/o Unicode
# TODO: Check if valid datetime
! return s
! elif type (s) == DateTime.DateTimeType: # DateTime DB field
! return s.date + " " + s.time
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (s, propertyname)
elif propertydef.gnue_type == "boolean":
! # Boolean property
! s = self._record.getField (propertydef.column)
! if s is None:
! return ""
! elif s in [0, "0", "f", "F", "false", "FALSE", "n", "N", "no", "NO"]:
return 0
! elif s in [1, "1", "t", "T", "true", "true", "y", "Y", "yes", "YES"]:
return 1
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (s, propertyname)
elif self._classdef.classes.has_key (propertydef.gnue_type):
! # Reference property: gnue_type is a classname
! s = self._record.getField (propertydef.column)
! if s is None:
! return ""
! else:
! return s
# TODO: Missing property types:
# * list properties
# * calculated properties (must have triggers working first)
else:
! raise Exception, "Field type '%s' not defined." % propertydef.gnue_type
#
---------------------------------------------------------------------------
# Get the values of a list of properties
--- 41,146 ----
self._classdef = classdef
#
---------------------------------------------------------------------------
! # 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)
+ # Always return an empty string for NULL
+ if value is None:
+ return ""
+
+ # String property (the id is actually a string, too)
if propertydef.gnue_type == "id" or \
propertydef.gnue_type == "string":
! if type (value) == types.UnicodeType:
# encode unicode values to utf-8 (normal case)
! return value.encode ('utf-8')
! elif type (value) == types.StringType:
# if not UnicodeType then return normal string
! return value
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (repr (value), propertyname)
+ # Number property
elif propertydef.gnue_type == "number":
! try:
! if propertydef.gnue_scale == 0:
! # ... without fractional part
! return int (value)
! else:
! # ... with fractional part
! return float (value)
! except ValueError:
! raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (repr (value), propertyname)
+ # Date property
elif propertydef.gnue_type == "date":
! if type (value) == mx.DateTime.DateTimeType: # DateTime DB field
! return value.date
! elif type (value) == types.UnicodeType: # String DB field w/ Unicode
# TODO: Check if valid date
! return value.encode ('utf-8')
! elif type (value) == types.StringType: # String DB field w/o Unicode
# TODO: Check if valid date
! return value
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (repr (value), propertyname)
+ # Time property
elif propertydef.gnue_type == "time":
! if type (value) == mx.DateTime.DateTimeType: # DateTime DB field
! return value.time
! elif type (value) == types.UnicodeType: # String DB field w/ Unicode
# TODO: Check if valid time
! return value.encode ('utf-8')
! elif type (value) == types.StringType: # String DB field w/o Unicode
# TODO: Check if valid time
! return value
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (repr (value), propertyname)
+ # Date/Time property
elif propertydef.gnue_type == "datetime":
! if type (value) == mx.DateTime.DateTimeType: # DateTime DB field
! return value.date + " " + value.time
! elif type (value) == types.UnicodeType: # String DB field w/ Unicode
# TODO: Check if valid datetime
! return value.encode ('utf-8')
! elif type (value) == types.StringType: # String DB field w/o Unicode
# TODO: Check if valid datetime
! return value
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (repr (value), propertyname)
+ # 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
else:
raise Exception, ("Database returned invalid value '%s' for " + \
! "property '%s'") % (repr (value), propertyname)
+ # Reference property: gnue_type is a classname
elif self._classdef.classes.has_key (propertydef.gnue_type):
! return value
# TODO: Missing property types:
# * list properties
# * calculated properties (must have triggers working first)
else:
! raise Exception, "Property type '%s' not defined" %
propertydef.gnue_type
#
---------------------------------------------------------------------------
# Get the values of a list of properties
***************
*** 170,211 ****
return result
#
---------------------------------------------------------------------------
! # Set the value of a property
#
---------------------------------------------------------------------------
def _putValue (self, propertyname, value):
propertydef = self._classdef.properties [propertyname]
! # TODO: from property type: add more tests to see if the new value is
valid
if value == "":
value = None
elif propertydef.gnue_type == "id" or \
! propertydef.gnue_type == "string":
! # String property (the id is actually a string, too)
if type (value) is not types.StringType:
value = str (value)
# decode unicode values from utf-8
value = unicode (value, 'utf-8')
!
elif propertydef.gnue_type == "number":
! # TODO: check if value is a valid number, probably convert into
int/float
! pass
!
elif propertydef.gnue_type == "date":
! # TODO: check if value is a valid date, probably convert into DateTime
! pass
elif propertydef.gnue_type == "time":
! # TODO: check if value is a valid time, probably convert into DateTime
! pass
elif propertydef.gnue_type == "datetime":
! # TODO: check if value is valid, probably convert into DateTime
! pass
elif propertydef.gnue_type == "boolean":
- # Boolean property
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"]:
--- 153,221 ----
return result
#
---------------------------------------------------------------------------
! # Set the value of a property and convert it into native datatype
#
---------------------------------------------------------------------------
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
+ # NULL
if value == "":
value = None
+
+ # String property (the id is actually a string, too)
elif propertydef.gnue_type == "id" or \
! propertydef.gnue_type == "string":
if type (value) is not 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 Exception, "Invalid value '%s' for property '%s'" % \
! (value, propertyname)
!
! # 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 Exception, "Invalid value '%s' for property '%s'" % \
! (value, propertyname)
+ # 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 Exception, "Invalid value '%s' for property '%s'" % \
! (value, propertyname)
+ # Date/Time property
elif propertydef.gnue_type == "datetime":
! try:
! value = mx.DateTime.ISO.ParseDateTime (value)
! except ValueError:
! raise Exception, "Invalid value '%s' for property '%s'" % \
! (value, propertyname)
+ # 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"]:
- gnue-appserver/src geasInstance.py, Jan Ischebeck, 2003/10/07
- gnue-appserver/src geasInstance.py, Reinhard Mueller, 2003/10/16
- gnue-appserver/src geasInstance.py, Reinhard Mueller, 2003/10/17
- gnue-appserver/src geasInstance.py, Reinhard Mueller, 2003/10/18
- gnue-appserver/src geasInstance.py, Reinhard Mueller, 2003/10/18
- gnue-appserver/src geasInstance.py, Reinhard Mueller, 2003/10/18
- gnue-appserver/src geasInstance.py,
Reinhard Mueller <=
- gnue-appserver/src geasInstance.py, Reinhard Mueller, 2003/10/19
- gnue-appserver/src geasInstance.py, Reinhard Mueller, 2003/10/19
- gnue-appserver/src geasInstance.py, Reinhard Mueller, 2003/10/19