[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5648 - trunk/gnue-common/src/datasources/drivers/appserver/Schema/Discovery,
johannes <=