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