commit-gnue
[Top][All Lists]
Advanced

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

r5648 - trunk/gnue-common/src/datasources/drivers/appserver/Schema/Disco


From: johannes
Subject: r5648 - trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery
Date: Tue, 6 Apr 2004 08:07:14 -0500 (CDT)

Author: johannes
Date: 2004-04-06 08:07:13 -0500 (Tue, 06 Apr 2004)
New Revision: 5648

Modified:
   
trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery/Introspection.py
Log:
Rebuilt the introspection part to match recent changes


Modified: 
trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery/Introspection.py
===================================================================
--- 
trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery/Introspection.py
       2004-04-06 12:30:08 UTC (rev 5647)
+++ 
trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery/Introspection.py
       2004-04-06 13:07:13 UTC (rev 5648)
@@ -30,10 +30,7 @@
 __all__ = ['Introspection']
 
 import string
-from string import lower, join, split
-import sys
 
-from gnue.common.apps import GDebug, GConfig
 from gnue.common.datasources import GIntrospection
 
 # =============================================================================
@@ -43,21 +40,16 @@
 # -----------------------------------------------------------------------------
 # Base class for all Introspection exceptions
 # -----------------------------------------------------------------------------
-class EIntrospection (Exception):
-  def __init__ (self, text):
-    self._msg = text
-    Exception.__init__ (self, self._msg)
+class IntrospectionError (gException):
+  pass
 
-  def __repr__ (self):
-    return self._msg
-
 # -----------------------------------------------------------------------------
 # Requested module does not exist in class repository
 # -----------------------------------------------------------------------------
-class EModuleNotFound (EIntrospection):
+class ModuleNotFoundError (IntrospectionError):
   def __init__ (self, module):
-    msg = "Introspection: Module '%s' not found." % module
-    EIntrospection.__init__ (self, msg)
+    msg = u_("Module '%s' not found.") % module
+    gException.__init__ (self, msg)
 
 
 
@@ -82,79 +74,79 @@
       if not type in ['object', None]:
         return []
 
-      cond = []
+      cond = {}
     else:
       cond = self._getNameCondition (name)
 
     fields = ["gnue_module", "gnue_name"]
-    cursor = self._connection.request ("gnue_class", cond, fields, fields)
+    sess = self._connection._sm
+    sessId = self._connection._sess_id
+    listId = sess.request (sessId, 'gnue_class', cond, fields, fields)
 
-    try:
-      data = [1]
+    for rec in sess.fetch (sessId, listId, 0, sess.count (sessId, listId)):
+      modname = self._modules [rec [1]]
+      self._classes [rec [0]] = "%s_%s" % (modname, rec [2])
 
-      while len (data):
-        data = cursor.fetch ()
 
-        for classdef in data:
-          classid = classdef ["gnue_id"]
-          modname = self._modules [classdef ["gnue_module"]]
-
-          self._classes [classid] = "%s_%s" % (modname, classdef ["gnue_name"])
-
-      for classid in self._classes.keys ():
-        attrs = {"id"     : string.lower (self._classes [classid]),
-                 "name"   : self._classes [classid],
-                 "type"   : "object",
-                 "gnue_id": classid}
+    for classid in self._classes.keys ():
+      attrs = {"id"     : string.lower (self._classes [classid]),
+               "name"   : self._classes [classid],
+               "type"   : "object",
+               "gnue_id": classid}
       
-        result.append (GIntrospection.Schema (attrs, 
-                                  getChildSchema = self._getChildSchema))
+      result.append (GIntrospection.Schema (attrs, 
+                                       getChildSchema = self._getChildSchema))
 
-    finally:
-      cursor.close ()
-
     if len (result):
       return result
+
     else:
       return None
 
+
+
   # -------------------------------------------------------------------------
   # Create a dictionary with all available modules
   # -------------------------------------------------------------------------
+
   def _getModuleDictionary (self):
+    """
+    This function creates a dictionary of all modules available, where the
+    gnue_id acts as key.
+    """
     res    = {}
-    cursor = self._connection.request ('gnue_module', [], ['gnue_id'], 
-                                       ['gnue_id', 'gnue_name'])
-    try:
-      data = [1]
-      while len (data):
-        data = cursor.fetch ()
-
-        for module in data:
-          res [module ['gnue_id']] = module ['gnue_name']
-
-    finally:
-      cursor.close ()
-
+    sess   = self._connection._sm
+    sessId = self._connection._sess_id
+    listId = sess.request (sessId, 'gnue_module', [], ['gnue_id'], 
+                               ['gnue_name'])
+    for rec in sess.fetch (sessId, listId, 0, sess.count (sessId, listId)):
+      res [rec [0]] = rec [1]
+      
     return res
 
+
   # -------------------------------------------------------------------------
-  # Create a condition sequence for a given classname
+  # Create a condition dictionary for a given classname
   # -------------------------------------------------------------------------
+
   def _getNameCondition (self, name):
+    """
+    This function creates a condition dictionary which matches the given name.
+    """
     (module, classname) = string.split (name, '_')
 
     if not module in self._modules.values ():
-      raise EModuleNotFound (module)
+      raise ModuleNotFoundError, module
 
     # Find the Module-Id
     for moduleId in self._modules.keys ():
       if self._modules [moduleId] == module:
         break
 
-    return [["eq", ""], ["field", "gnue_module"], ["const", moduleId],
-            ["eq", ""], ["field", "gnue_name"]  , ["const", classname]]
+    return {'gnue_module': moduleId, 'gnue_name': classname}
 
+
+
   # -------------------------------------------------------------------------
   # Get a list of all properties owned by a given class
   # -------------------------------------------------------------------------
@@ -162,44 +154,36 @@
     result = []
     self._modules = self._getModuleDictionary ()
 
-    cursor = self._connection.request ("gnue_property", 
-          [["eq", ""], ["field", "gnue_class"], ["const", parent.gnue_id]],
-          ["gnue_module", "gnue_name"], 
-          ["gnue_module", "gnue_name", "gnue_type", "gnue_length",
-           "gnue_scale"])
-    try:
-      data = [1]
-      while len (data):
-        data = cursor.fetch ()
+    sort   = ['gnue_module', 'gnue_name']
+    fields = sort + ['gnue_type', 'gnue_length', 'gnue_scale']
 
-        for property in data:
-          name  = "%s_%s" % (self._modules [property ['gnue_module']],
-                             property ['gnue_name'])
+    sess   = self._connection._sm
+    sessId = self._connection._sess_id
+    listId = sess.request (sessId, 'gnue_property', 
+                           {'gnue_class': parent.gnue_id}, sort, fields)
 
-          # TODO: this is a workaround for gnue-forms lack of typecasts
-          if property ['gnue_type'] == "number":
-            datatype = "number"
-          elif property ['gnue_type'] in ["date", "datetime"]:
-            datatype = "date"
-          else:
-            datatype = "text"
+    for rec in sess.fetch (sessId, listId, 0, sess.count (sessId, listId)):
+      name = "%s_%s" % (self._modules [rec [1]], rec [2])
 
-          attrs = {'id'        : "%s.%s" % (parent.id, name.lower ()),
-                   'name'      : name,
-                   'datatype'  : datatype,
-                   'precision' : property ['gnue_scale'] ,
-                   'nativetype': 'unknown',
-                   'required'  : 0}
+      if rec [3] == 'number':
+        datatype = 'number'
+      elif rec [3] in ['date', 'datetime']:
+        datatype = 'date'
+      else:
+        datatype = 'text'
 
-          if property ['gnue_type'] in ['boolean', 'date', 'datetime', 
-                                        'number', 'string', 'time']:
-            attrs ['length'] = property ['gnue_length']
-          else:
-            attrs ['length'] = 32
+      attrs = {'id'        : "%s.%s" % (parent.id, name.lower ()),
+               'name'      : name,
+               'datatype'  : datatype,
+               'precision' : rec [5],
+               'nativetype': 'unknown',
+               'length'    : rec [4],
+               'required'  : 0}
 
-          result.append (GIntrospection.Schema (attrs))
+      # reference properties have a fixed length
+      if '_' in datatype:
+        attrs ['length'] = 32
 
-    finally:
-      cursor.close ()
+      result.append (GIntrospection.Schema (attrs))
 
     return result





reply via email to

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