[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r6825 - in trunk/gnue-appserver/src: . language
From: |
johannes |
Subject: |
r6825 - in trunk/gnue-appserver/src: . language |
Date: |
Mon, 27 Dec 2004 04:19:56 -0600 (CST) |
Author: johannes
Date: 2004-12-27 04:19:55 -0600 (Mon, 27 Dec 2004)
New Revision: 6825
Modified:
trunk/gnue-appserver/src/geasSession.py
trunk/gnue-appserver/src/language/Object.py
trunk/gnue-appserver/src/language/Session.py
Log:
Improved language-interface (calc. fields available again). Session.load ()
returns 'procedure' for Procedures now
Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py 2004-12-25 14:05:44 UTC (rev
6824)
+++ trunk/gnue-appserver/src/geasSession.py 2004-12-27 10:19:55 UTC (rev
6825)
@@ -462,9 +462,21 @@
if object_id:
instance = self.__findInstance (classdef, object_id, propertylist)
result.append (instance.get (propertylist))
+
else:
- result.append ([classdef.properties[p].fullType for p in propertylist])
+ typelist = []
+ for p in propertylist:
+ if classdef.properties.has_key (p):
+ typelist.append (classdef.properties [p].fullType)
+ elif classdef.procedure.has_key (p):
+ typelist.append ('procedure')
+
+ else:
+ raise KeyError, p
+
+ result.append (typelist)
+
return result
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/language/Object.py
===================================================================
--- trunk/gnue-appserver/src/language/Object.py 2004-12-25 14:05:44 UTC (rev
6824)
+++ trunk/gnue-appserver/src/language/Object.py 2004-12-27 10:19:55 UTC (rev
6825)
@@ -75,27 +75,28 @@
if name == "gnue_id":
return self.objectId
- if self.__classdef is None:
- self.__classdef = self.__session.getClassDef (self.__class)
+ sm = self.__session.getSessionManager ()
+ sid = self.__session.getSessionId ()
- if self.__attrIsMethod (name):
+ try:
+ datatype = sm.load (sid, self.__class, [''], [name]) [0][0]
+
+ except KeyError:
+ raise MemberNotFoundError, (self.__class, name)
+
+ if datatype == 'procedure':
return Procedure (self.__session, self.objectId, self.__class, name)
- elif self.__attrIsValid (name):
- sm = self.__session.getSessionManager ()
- sid = self.__session.getSessionId ()
+ else:
+ res = sm.load (sid, self.__class, [self.objectId], [name])
+ value = res [0][0]
- res = sm.load (sid, self.__class, [self.objectId, ''], [name])
- (value, datatype) = (res [0][0], res [1][0])
-
# Convert reference fields to object references
if '_' in datatype and value is not None:
return Object (self.__session, datatype, value)
else:
return value
- else:
- raise MemberNotFoundError, (self.__class, name)
# -------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/language/Session.py
===================================================================
--- trunk/gnue-appserver/src/language/Session.py 2004-12-25 14:05:44 UTC
(rev 6824)
+++ trunk/gnue-appserver/src/language/Session.py 2004-12-27 10:19:55 UTC
(rev 6825)
@@ -29,9 +29,6 @@
from gnue.common.apps import i18n, errors
-MODULES = {}
-CLASSES = {}
-
# ===========================================================================
# Exceptions
# ===========================================================================
@@ -60,12 +57,7 @@
self.__context = None
self.parameters = params
- global MODULES
- global CLASSES
- self.__classdefs = CLASSES
- self.__modules = MODULES
-
# -------------------------------------------------------------------------
# Get the session's sessionManager
# -------------------------------------------------------------------------
@@ -171,122 +163,7 @@
raise MessageNotFoundError, self.qualify (messageName)
- # ---------------------------------------------------------------------------
- # Get a 'class-definition' for a given class
- # ---------------------------------------------------------------------------
- def getClassDef (self, classname):
- """
- This function returns a 'class-definition' for a given class. Such a
- class-definition is a dictionary with two keys: 'properties' and
- 'procedures' where both values are sequences of names.
-
- @param classname: name of the class to get a definition-dictionary for
- @return: dictionary with the class-definition
- """
-
- classname = self.qualify (classname)
- if self.__classdefs.has_key (classname):
- return self.__classdefs [classname]
-
- result = {'properties': [], 'procedures': []}
- self.__classdefs [classname] = result
-
- # An internal Session is used only by the appserver process. To avoid
- # any recursions, we use the class-repository directly
- if isinstance (self, InternalSession):
- cDef = self.__sm.classes [classname]
- result ['properties'] = [p.fullName for p in cDef.properties.values ()]
- result ['procedures'] = [p.fullName for p in cDef.procedures.values ()]
-
- else:
- # otherwise we fetch all properties and procedures from the appserver
- (module, name) = classname.split ('_')
- moduleId = self.__findModule (module)
- classId = self.__findClass (moduleId, name)
-
- result ['properties'] = self.__fetchData ('property' , classId)
- result ['procedures'] = self.__fetchData ('procedure', classId)
-
- return result
-
-
- # ---------------------------------------------------------------------------
- # Load data from a table for a given class
- # ---------------------------------------------------------------------------
-
- def __fetchData (self, tablename, classId):
-
- result = []
- listId = self.__sm.request (self.__session_id, "gnue_%s" % tablename,
- {'gnue_class': classId},
- [], ['gnue_name', 'gnue_module'])
-
- while True:
- res = self.__sm.fetch (self.__session_id, listId, len (result), 20, 0)
- if len (res):
- for (gnueId, pName, pModule) in res:
- mName = self.__moduleName (pModule)
- iName = "%s_%s" % (mName, pName)
- result.append (iName)
- else:
- break
-
- return result
-
-
- # ---------------------------------------------------------------------------
- # Find the gnue_id of a given module
- # ---------------------------------------------------------------------------
-
- def __findModule (self, moduleName):
-
- for (gnueId, name) in self.__modules.items ():
- if name == moduleName:
- return gnueId
-
- lid = self.__sm.request (self.__session_id, 'gnue_module',
- {'gnue_name': moduleName}, [], [])
- res = self.__sm.fetch (self.__session_id, lid, 0, 10, 0)
- if res:
- key = res [0][0]
- self.__modules [key] = moduleName
- else:
- key = None
-
- return key
-
-
- # ---------------------------------------------------------------------------
- # Find the name of a module by it's gnue_id
- # ---------------------------------------------------------------------------
-
- def __moduleName (self, moduleId):
-
- if self.__modules.has_key (moduleId):
- return self.__modules [moduleId]
-
- lid = self.__sm.request (self.__session_id, 'gnue_module',
- {'gnue_id': moduleId}, [], ['gnue_name'])
- res = self.__sm.fetch (self.__session_id, lid, 0, 10, 0)
- if res:
- self.__modules [moduleId] = res [0][1]
-
- return self.__modules.get (moduleId)
-
-
- # ---------------------------------------------------------------------------
- # Find the gnue_id of a given class
- # ---------------------------------------------------------------------------
-
- def __findClass (self, moduleId, classname):
-
- lid = self.__sm.request (self.__session_id, 'gnue_class',
- {'gnue_module': moduleId, 'gnue_name': classname}, [], [])
- res = self.__sm.fetch (self.__session_id, lid, 0, 10, 0)
- return len (res) and res [0][0] or None
-
-
# =============================================================================
# Login-Session creates a new Session-Id using 'user' and 'password'
# =============================================================================
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r6825 - in trunk/gnue-appserver/src: . language,
johannes <=