commit-gnue
[Top][All Lists]
Advanced

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

[gnue] r8249 - trunk/gnue-appserver/src


From: johannes
Subject: [gnue] r8249 - trunk/gnue-appserver/src
Date: Mon, 3 Apr 2006 18:20:16 -0500 (CDT)

Author: johannes
Date: 2006-03-23 08:55:23 -0600 (Thu, 23 Mar 2006)
New Revision: 8249

Modified:
   trunk/gnue-appserver/src/geasSession.py
   trunk/gnue-appserver/src/repository.py
   trunk/gnue-appserver/src/test.py
Log:
geasSession.load () supports reference properties for type-retrieval now


Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py     2006-03-23 14:31:23 UTC (rev 
8248)
+++ trunk/gnue-appserver/src/geasSession.py     2006-03-23 14:55:23 UTC (rev 
8249)
@@ -28,7 +28,7 @@
 
 from gnue.appserver import data, geasList, geasInstance
 from gnue.appserver.geasAuthentication import AuthError
-from gnue.appserver.repository import PropertyNotFoundError
+from gnue.appserver import repository
 
 
 # =============================================================================
@@ -550,14 +550,16 @@
       else:
         typelist = []
         for p in propertylist:
-          if classdef.properties.has_key (p):
-            typelist.append (classdef.properties [p].fullType)
+          item = classdef.findItem (p)
 
-          elif classdef.procedures.has_key (p):
+          if isinstance (item, repository.Property):
+            typelist.append (item.fullType)
+
+          elif isinstance (item. repository.Procedure):
             typelist.append ('procedure')
 
           else:
-            raise PropertyNotFoundError, (p, classdef.fullName)
+            raise repository.PropertyNotFoundError, (p, classdef.fullName)
 
         result.append (typelist)
 

Modified: trunk/gnue-appserver/src/repository.py
===================================================================
--- trunk/gnue-appserver/src/repository.py      2006-03-23 14:31:23 UTC (rev 
8248)
+++ trunk/gnue-appserver/src/repository.py      2006-03-23 14:55:23 UTC (rev 
8249)
@@ -116,6 +116,11 @@
     msg = u_("The filters have circular references")
     errors.ApplicationError.__init__ (self, msg)
 
+class NotAReferenceError (errors.ApplicationError):
+  def __init__ (self, classname, propertyname):
+    msg = u_("'%(property)s' of class '%(class)s' is not a reference 
property")\
+        % {'class': classname, 'property': propertyname}
+    errors.ApplicationError.__init__ (self, msg)
 
 # =============================================================================
 # This class implements the class repository
@@ -761,8 +766,6 @@
 
 
   # ---------------------------------------------------------------------------
-  #
-  # ---------------------------------------------------------------------------
 
   def getFilterLabels (self, language):
     """
@@ -796,6 +799,8 @@
     return [label for (pos, text, label) in order]
 
     
+  # ---------------------------------------------------------------------------
+
   def getClassLabel (self, language):
 
     for lang in getLanguages (language):
@@ -806,6 +811,44 @@
     return self.fullName
 
 
+  # ---------------------------------------------------------------------------
+  # Find a property or procedure by it's fully qualified name
+  # ---------------------------------------------------------------------------
+
+  def findItem (self, itemname):
+    """
+    Find a property of a procedure of the given name. If the name contains
+    references (sepearted by a point) these references will be resolved.
+
+    @param itemname: fully qualified name of the property or procedure to find
+    @returns: the property or procedure instance of the found item
+
+    @raises PropertyNotFoundError: if no such property or procedure exists.
+    """
+
+    parts   = itemname.split ('.', 1)
+    current = parts.pop (0)
+
+    if self.properties.has_key (current):
+      if self.properties [current].isReference:
+        return self.properties [current].referencedClass.findItem (parts [0])
+
+      elif parts:
+        raise NotAReferenceError, (self.fullName, current)
+
+      else:
+        return self.properties [current]
+
+    elif self.procedures.has_key (current):
+      return self.procedures [current]
+
+    else:
+      raise PropertyNotFoundError, (current, self.fullName)
+
+
+
+  # ---------------------------------------------------------------------------
+
   def _getFilterDefinition (self, language, dataCon):
     """
     """

Modified: trunk/gnue-appserver/src/test.py
===================================================================
--- trunk/gnue-appserver/src/test.py    2006-03-23 14:31:23 UTC (rev 8248)
+++ trunk/gnue-appserver/src/test.py    2006-03-23 14:55:23 UTC (rev 8249)
@@ -104,6 +104,19 @@
     session.rollback ()
     self._ok ()
 
+    print "Loading the datatypes with load () ...",
+    rset = session.load ("address_person", [None],
+                    ["address_name", "address_street", "address_city",
+                     "address_country.address_code",
+                     "address_country.address_name"])
+    self._ok ()
+
+    print "These are again the values of the first instance:"
+    print "  Name   :", rset[0][0]
+    print "  Street :", rset[0][1]
+    print "  City   :", rset[0][2]
+    print "  Country:", rset[0][3] + '/' + rset[0][4]
+
     print "Loading the first instance with load () ...",
     rset = session.load ("address_person", [first_id],
                     ["address_name", "address_street", "address_city",





reply via email to

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