commit-gnue
[Top][All Lists]
Advanced

[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"]:




reply via email to

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