commit-gnue
[Top][All Lists]
Advanced

[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'
 # =============================================================================





reply via email to

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