commit-gnue
[Top][All Lists]
Advanced

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

r5748 - trunk/gnue-appserver/src/classrep


From: johannes
Subject: r5748 - trunk/gnue-appserver/src/classrep
Date: Tue, 20 Apr 2004 09:26:01 -0500 (CDT)

Author: johannes
Date: 2004-04-20 09:26:00 -0500 (Tue, 20 Apr 2004)
New Revision: 5748

Modified:
   trunk/gnue-appserver/src/classrep/Base.py
   trunk/gnue-appserver/src/classrep/Parameter.py
   trunk/gnue-appserver/src/classrep/Procedure.py
   trunk/gnue-appserver/src/classrep/Property.py
   trunk/gnue-appserver/src/classrep/helpers.py
Log:
Better reporting of malformed types. Appserver now recognizes changes of
properties made by other sessions.


Modified: trunk/gnue-appserver/src/classrep/Base.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Base.py   2004-04-20 13:26:15 UTC (rev 
5747)
+++ trunk/gnue-appserver/src/classrep/Base.py   2004-04-20 14:26:00 UTC (rev 
5748)
@@ -22,6 +22,7 @@
 # $Id$
 
 import types
+import helpers
 from gnue.appserver.language.Object import Object
 
 # =============================================================================
@@ -44,7 +45,14 @@
     ClassRepositoryError.__init__ (self, _("Item '%s' not found.") % key)
 
 
+class ItemValidationError (helpers.ValidationError):
+  def __init__ (self, item, message):
+    msg = u_("'%(item)s': %(error)s") \
+          % {"item" : item,
+             "error": message }
+    helpers.ValidationError.__init__ (self, msg)
 
+
 # =============================================================================
 # Class-wrapper for dictionaries
 # =============================================================================
@@ -221,6 +229,14 @@
 
 
   # ---------------------------------------------------------------------------
+  # Virtual: Create an exception for a validation error
+  # ---------------------------------------------------------------------------
+
+  def _validationError (self, item, verr):
+    return ItemValidationError (item.fullName, verr.message)
+
+
+  # ---------------------------------------------------------------------------
   # Return the number of items in the dictionary
   # ---------------------------------------------------------------------------
   def __len__ (self):
@@ -243,12 +259,18 @@
     if self._items.has_key (key):
       return self._items [key]
     else:
+      self._session.rollback ()
       list = self._session.find (self.table, self._getSingleCondition (key),
                                              self._getSortorder (),
                                              self._getColumns ())
       if len (list) == 1:
         newItem = self._getNewItem (list [0])
-        newItem.validate ()
+        try:
+          newItem.validate ()
+
+        except helpers.ValidationError, verr:
+          raise self._validationError (newItem, verr)
+
         self._items [key] = newItem
         return newItem
 

Modified: trunk/gnue-appserver/src/classrep/Parameter.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Parameter.py      2004-04-20 13:26:15 UTC 
(rev 5747)
+++ trunk/gnue-appserver/src/classrep/Parameter.py      2004-04-20 14:26:00 UTC 
(rev 5748)
@@ -21,6 +21,7 @@
 # $Id: $
 
 from Base import *
+import helpers
 
 # =============================================================================
 # Exceptions
@@ -106,3 +107,4 @@
     BaseObject.__init__ (self, session, 'gnue_parameter', aObject, pDefs)
     self.fullName = self.gnue_name
     self.dbType   = self.gnue_type
+

Modified: trunk/gnue-appserver/src/classrep/Procedure.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Procedure.py      2004-04-20 13:26:15 UTC 
(rev 5747)
+++ trunk/gnue-appserver/src/classrep/Procedure.py      2004-04-20 14:26:00 UTC 
(rev 5748)
@@ -36,6 +36,10 @@
            { "classname": classname, "procedure": procedure }
     ClassRepositoryError.__init__ (self, msg)
 
+class ProcedureValidationError (ItemValidationError):
+  def __init__ (self, classname, procedure, message):
+    pName = "%s.%s" % (classname, procedure)
+    ItemValidationError.__init__ (self, pName, message)
 
 # =============================================================================
 # Dictionary with all properties of a given class
@@ -104,6 +108,9 @@
   def _itemNotFoundError (self, key):
     return ProcedureNotFoundError (self.__class.fullName, key)
 
+  def _validationError (self, item, verr):
+    return ProcedureValidationError (self.__class.fullName, item.fullName,
+                                     verr.message)
 
 # =============================================================================
 # A Business Object Procedure
@@ -136,9 +143,6 @@
 
     helpers.verifyProcedure (self)
 
-    for pa in self.parameters.values ():
-      pa.validate ()
-
     self.isCalculated = self.gnue_type is not None and \
                         len (self.parameters.keys ()) == 0 and \
                         self.gnue_name [:3].lower () == 'get'

Modified: trunk/gnue-appserver/src/classrep/Property.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Property.py       2004-04-20 13:26:15 UTC 
(rev 5747)
+++ trunk/gnue-appserver/src/classrep/Property.py       2004-04-20 14:26:00 UTC 
(rev 5748)
@@ -22,8 +22,8 @@
 # $Id$
 
 from Base import *
-from Namespace import createName
-from helpers import verifyType
+from Namespace import createName, splitName
+import helpers
 
 
 # =============================================================================
@@ -32,11 +32,18 @@
 
 class PropertyNotFoundError (ClassRepositoryError):
   def __init__ (self, classname, key):
-    msg = _("Class '%(classname)s' has no property '%(property)s'") % \
-            { "classname": classname, "property": key }
+    msg = u_("Class '%(classname)s' has no property '%(property)s'") % \
+             { "classname": classname, "property": key }
     ClassRepositoryError.__init__ (self, msg)
 
+class PropertyValidationError (helpers.ValidationError):
+  def __init__ (self, classname, propertyname, message):
+    msg = u_("Property '%(property)s': %(error)s") \
+          % {"property": "%s.%s" % (classname, propertyname),
+             "error"   : message}
+    helpers.ValidationError.__init__ (self, msg)
 
+
 # =============================================================================
 # Dictionary with all properties of a given class
 # =============================================================================
@@ -81,9 +88,10 @@
   # Return a condition to match a given Property
   # ---------------------------------------------------------------------------
   def _getSingleCondition (self, key):
+    propName = splitName (key) [1]
     return [["eq", ""], ["field", u"gnue_class"], 
             ["const", self.__class.gnue_id],
-            ["eq", ""], ["field", u"gnue_name"], ["const", key]]
+            ["eq", ""], ["field", u"gnue_name"], ["const", propName]]
 
 
   # ---------------------------------------------------------------------------
@@ -91,16 +99,25 @@
   # ---------------------------------------------------------------------------
   def _getColumns (self):
     return [u"gnue_module", u"gnue_class", u"gnue_name", u"gnue_type",
-            u"gnue_length", u"gnue_scale", u"gnue_comment"]
+            u"gnue_length", u"gnue_scale", u"gnue_comment", u"gnue_nullable"]
 
 
   # ---------------------------------------------------------------------------
   # Create a key-not-found-exception
   # ---------------------------------------------------------------------------
+
   def _itemNotFoundError (self, key):
     return PropertyNotFoundError (self.__class.fullName, key)
 
 
+  # ---------------------------------------------------------------------------
+  # Create a validation exception
+  # ---------------------------------------------------------------------------
+
+  def _validationError (self, item, verr):
+    return PropertyValidationError (self.__class.fullName, item.fullName,
+                                    verr.message)
+
 # =============================================================================
 # A Business Object Property
 # =============================================================================
@@ -170,8 +187,8 @@
     referenced class definition.
     """
 
-    res = verifyType (self.gnue_type, self.gnue_length, self.gnue_scale,
-                      self.module.classes)
+    res = helpers.verifyType (self.gnue_type, self.gnue_length, 
+                              self.gnue_scale, self.module.classes)
     self.isReference     = res is not None
     self.referencedClass = res
     self.isValidated     = True

Modified: trunk/gnue-appserver/src/classrep/helpers.py
===================================================================
--- trunk/gnue-appserver/src/classrep/helpers.py        2004-04-20 13:26:15 UTC 
(rev 5747)
+++ trunk/gnue-appserver/src/classrep/helpers.py        2004-04-20 14:26:00 UTC 
(rev 5748)
@@ -40,7 +40,14 @@
 class TypeFormatError (ValidationError):
   pass
 
+class ParameterValidationError (ValidationError):
+  def __init__ (self, parameter, message):
+    msg = u_("Parameter %(parameter)s: %(error)s") \
+          % {"parameter": parameter,
+             "error"    : message}
+    ValidationError.__init__ (self, msg)
 
+
 # -----------------------------------------------------------------------------
 # Check if a combination of typename, length and scale is valid
 # -----------------------------------------------------------------------------
@@ -135,10 +142,15 @@
 
   # verify all given parameter types
   for pa in aProc.parameters.values ():
-    verifyBasetype (pa.gnue_type, pa.gnue_length, pa.gnue_scale)
+    try:
+      verifyBasetype (pa.gnue_type, pa.gnue_length, pa.gnue_scale)
 
+    except ValidationError, vErr:
+      raise ParameterValidationError, (pa.fullName, vErr.message)
 
 
+
+
 # -----------------------------------------------------------------------------
 # unit self test code
 # -----------------------------------------------------------------------------





reply via email to

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