[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r5057 - trunk/gnue-appserver/src/classrep
From: |
johannes |
Subject: |
r5057 - trunk/gnue-appserver/src/classrep |
Date: |
Fri, 30 Jan 2004 12:03:38 -0600 (CST) |
Author: johannes
Date: 2004-01-30 12:03:36 -0600 (Fri, 30 Jan 2004)
New Revision: 5057
Modified:
trunk/gnue-appserver/src/classrep/Base.py
trunk/gnue-appserver/src/classrep/Class.py
trunk/gnue-appserver/src/classrep/Module.py
trunk/gnue-appserver/src/classrep/Namespace.py
trunk/gnue-appserver/src/classrep/Procedure.py
trunk/gnue-appserver/src/classrep/Property.py
trunk/gnue-appserver/src/classrep/__init__.py
trunk/gnue-appserver/src/classrep/repository.ini
trunk/gnue-appserver/src/classrep/test.py
Log:
Heavy code cleaning and reworked the public/protected/private name-schema.
Modified: trunk/gnue-appserver/src/classrep/Base.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Base.py 2004-01-30 13:27:47 UTC (rev
5056)
+++ trunk/gnue-appserver/src/classrep/Base.py 2004-01-30 18:03:36 UTC (rev
5057)
@@ -23,7 +23,7 @@
import types
from gnue.appserver.language import Object
-from Namespace import EClassRepository
+from Namespace import *
# =============================================================================
# Class-wrapper for dictionaries
@@ -34,21 +34,18 @@
# ---------------------------------------------------------------------------
# Construct an instance
# ---------------------------------------------------------------------------
- def __init__ (self, session, tablename, defaultItems = None):
- self.session = session
- self.table = tablename
- self._items = {}
+ def __init__ (self, session, tablename):
+ self.table = tablename
+ self._session = session
+ self._items = {}
- if defaultItems is not None:
- self._items = defaultItems
-
# ---------------------------------------------------------------------------
# Reload the dictionary from the database by merging new records in
# ---------------------------------------------------------------------------
def reload (self):
- list = self.session.find (self.table, self.getCondition (),
- self.getSortorder (),
- ['gnue_name'])
+ list = self._session.find (self.table, self._getReloadCondition (),
+ self._getSortorder (),
+ self._getColumns ())
self.mergeIntoList (list)
# ---------------------------------------------------------------------------
@@ -64,25 +61,38 @@
break
if not found:
- newItem = self.getNewItem (obj)
+ newItem = self._getNewItem (obj)
self._items [newItem.fullName] = newItem
# ---------------------------------------------------------------------------
# Return the conditions to be used on reload ()
# ---------------------------------------------------------------------------
- def getCondition (self):
+ def _getReloadCondition (self):
return []
# ---------------------------------------------------------------------------
+ # Return the list of columns to be used on reload ()
+ # ---------------------------------------------------------------------------
+ def _getColumns (self):
+ return ['gnue_name']
+
+ # ---------------------------------------------------------------------------
# Return the sortorder to be used on reload ()
# ---------------------------------------------------------------------------
- def getSortorder (self):
+ def _getSortorder (self):
return ['gnue_id']
# ---------------------------------------------------------------------------
- # Use getNewItem in derived classes to instanciate new dictionary-items
+ # Get a condition to fetch a single item for the dictionary
# ---------------------------------------------------------------------------
- def getNewItem (self, obj):
+ def _getSingleCondition (self, key):
+ return EClassRepository ("%s: _getSingleCondition() not implemented!" %
+ self.table)
+
+ # ---------------------------------------------------------------------------
+ # Use _getNewItem in derived classes to instanciate new dictionary-items
+ # ---------------------------------------------------------------------------
+ def _getNewItem (self, obj):
raise EClassRepository ("%s: getNewItem() not implemented!" % self.table)
# ---------------------------------------------------------------------------
@@ -119,12 +129,23 @@
return len (self._items)
# ---------------------------------------------------------------------------
- # Route class-access to the underlying dictionary
+ # Access to the underlying dictionary
# ---------------------------------------------------------------------------
def __getitem__ (self, key):
- return self.get (key)
+ if self._items.has_key (key):
+ return self._items [key]
+ else:
+ list = self._session.find (self.table, self._getSingleCondition (key),
+ self._getSortorder (),
+ self._getColumns ())
+ if len (list) == 1:
+ self._items [key] = self._getNewItem (list [0])
+ return self._items [key]
+ raise EItemNotFound (self.table, key)
+
+
# =============================================================================
# This class maps all dictionary-keys to properties
# =============================================================================
@@ -134,44 +155,37 @@
# Constructor
# ---------------------------------------------------------------------------
def __init__ (self, sessionManager, classname, object = None, pDefs = None):
- self._sm = sessionManager
- self.classname = classname
- self._object = object
+ self.classname = classname
+ self._sm = sessionManager
+ self.__object = object
+ self.__predefined = {}
- if pDefs is None:
- self.predefined = {}
- else:
- self.predefined = pDefs
+ if pDefs is not None:
+ self.__predefined = pDefs
# ---------------------------------------------------------------------------
# Return an attributes value
# ---------------------------------------------------------------------------
def __getattr__ (self, attr):
- if self._isPredefined (attr):
- return self._getValue (self.predefined [attr])
+ if self.__predefined.has_key (attr):
+ return self.__getValue (self.__predefined [attr])
else:
- return self._getValue (getattr (self._getObject (), attr))
+ return self.__getValue (getattr (self.__getObject (), attr))
# ---------------------------------------------------------------------------
# Make sure unicode-type values will be encoded as utf-8
# ---------------------------------------------------------------------------
- def _getValue (self, value):
+ def __getValue (self, value):
if isinstance (value, types.UnicodeType):
return value.encode ('utf-8')
else:
return value
# ---------------------------------------------------------------------------
- # Check wether an attribute is predefined or not
- # ---------------------------------------------------------------------------
- def _isPredefined (self, attr):
- return self.predefined.has_key (attr)
-
- # ---------------------------------------------------------------------------
# Get a language interface object
# ---------------------------------------------------------------------------
- def _getObject (self):
- if self._object is None:
- self._object = Object (self._sm, 0, self.classname, self.gnue_id)
+ def __getObject (self):
+ if self.__object is None:
+ self.__object = Object (self._sm, 0, self.classname, self.gnue_id)
else:
- return self._object
+ return self.__object
Modified: trunk/gnue-appserver/src/classrep/Class.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Class.py 2004-01-30 13:27:47 UTC (rev
5056)
+++ trunk/gnue-appserver/src/classrep/Class.py 2004-01-30 18:03:36 UTC (rev
5057)
@@ -39,10 +39,11 @@
predefines = None):
BaseDictionary.__init__ (self, session, 'gnue_class')
- self._sm = sessionManager
self.modules = moduleDict
- self._module = module
+ self._sm = sessionManager
+ self.__module = module
+ # Note: this 'predefines' is a RepositoryDefinition
if predefines is not None:
for cDict in predefines.classes ():
cMod = self.modules.find (cDict ['gnue_module'])
@@ -51,73 +52,63 @@
aClass = Class (self._sm, session, self, cMod, None, cDict, proplist)
self._items [aClass.fullName] = aClass
- # if a module is specified, fetch all it's classes
+ # if this class dictionary is for a special module, we populate it with
+ # all classes, either from a global class dictionary or a fresh reload
if module is not None:
- if self.modules.classdict:
+ if self.modules.classdict is not None:
+ # copy the predefined class dictionary
for item in self.modules.classdict.values ():
if item.module.fullName == module.fullName:
self._items [item.fullName] = item
else:
- self.mergeIntoList (self._requestData (module.gnue_id))
+ # fetch a fresh copy from the datasource
+ self.reload ()
+ # ---------------------------------------------------------------------------
+ # Reload the dictionary and run nested reloads for all classes
+ # ---------------------------------------------------------------------------
+ def reload (self):
+ BaseDictionary.reload (self)
+ for aClass in self.values ():
+ aClass.properties.reload ()
+ aClass.procedures.reload ()
+
# ---------------------------------------------------------------------------
# Create a new instance for a dictionary-item
# ---------------------------------------------------------------------------
- def getNewItem (self, object):
+ def _getNewItem (self, object):
module = self.modules.find (object.gnue_module)
- return Class (self._sm, self.session, self, module, object)
+ return Class (self._sm, self._session, self, module, object)
# ---------------------------------------------------------------------------
# Get an apropriate reload ()-condition
# ---------------------------------------------------------------------------
- def getCondition (self):
- if self._module is not None:
+ def _getReloadCondition (self):
+ if self.__module is not None:
return [["eq", ""], ["field", "gnue_module"],
- ["const", self._module.gnue_id]]
+ ["const", self.__module.gnue_id]]
else:
return []
# ---------------------------------------------------------------------------
- # Request a list of matching business objects
+ # Create a condition to retrieve the klass specified by 'key'
# ---------------------------------------------------------------------------
- def _requestData (self, moduleId = None, className = None):
- if not self.session:
- return []
+ def _getSingleCondition (self, key):
+ (moduleName, className) = splitName (key)
+ module = self.modules [moduleName]
- cond = []
- if moduleId:
- cond = [["eq", ""], ["field", "gnue_module"], ["const", moduleId]]
+ return [["eq", ""], ["field", "gnue_module"], ["const", module.gnue_id],
+ ["eq", ""], ["field", "gnue_name"], ["const", className]]
- if className:
- cond += [["eq", ""], ["field", "gnue_name"], ["const", className]]
-
- return self.session.find ("gnue_class", cond,
- ["gnue_module", "gnue_name"],
- ["gnue_module", "gnue_name"])
-
# ---------------------------------------------------------------------------
- # Return a class object if it exists
+ # On find () this dictionary will prepare the following columns ()
# ---------------------------------------------------------------------------
- def get (self, name):
- (moduleName, className) = splitName (name)
- module = self.modules [moduleName]
+ def _getColumns (self):
+ return ["gnue_module", "gnue_name"]
- # is the class already cached ?
- if self._items.has_key (name):
- return self._items [name]
- # since we had no match cached, ask for it
- res = self._requestData (module.gnue_id, className)
- if len (res) == 1:
- self._items [name] = self.getNewItem (res [0])
- return self._items [name]
-
- raise EClassNotFound (name)
-
-
-
# =============================================================================
# An implementation of a single class
# =============================================================================
@@ -130,11 +121,11 @@
predefs = None, propDefList = None):
BaseObject.__init__ (self, sessionManager, 'gnue_class', object, predefs)
- self.session = session
self.module = module
self.fullName = createName (module.gnue_name, self.gnue_name)
self.table = self.fullName
self.classes = classDict
+ self._session = session
self.properties = PropertyDict (self._sm, session, self, propDefList)
self.procedures = ProcedureDict (self._sm, session, self)
Modified: trunk/gnue-appserver/src/classrep/Module.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Module.py 2004-01-30 13:27:47 UTC (rev
5056)
+++ trunk/gnue-appserver/src/classrep/Module.py 2004-01-30 18:03:36 UTC (rev
5057)
@@ -29,6 +29,7 @@
# =============================================================================
# A List Of Business Object Modules
# =============================================================================
+
class ModuleDict (BaseDictionary):
# ---------------------------------------------------------------------------
@@ -43,36 +44,21 @@
# Note: this 'predefines' is a RepositoryDefinition
if predefines is not None:
for mDict in predefines.modules ():
- module = Module (self._sm, self.session, self, None, mDict)
+ module = Module (self._sm, self._session, self, None, mDict)
self._items [module.fullName] = module
-
# ---------------------------------------------------------------------------
# Create a new module instance
# ---------------------------------------------------------------------------
- def getNewItem (self, object):
- return Module (self._sm, self.session, self, object)
+ def _getNewItem (self, object):
+ return Module (self._sm, self._session, self, object)
# ---------------------------------------------------------------------------
- # Return a Module object if the given module exists
+ # Create a condition to reload a single module
# ---------------------------------------------------------------------------
- def get (self, name):
- # is the requested module cached?
- if self.has_key (name):
- return self._items [name]
+ def _getSingleCondition (self, key):
+ return [["eq", ""], ["field", "gnue_name"], ["const", key]]
- # since it isn't cached we've to ask for it
- cond = [["eq", ""], ["field", "gnue_name"], ["const", name]]
- list = self.session.find ("gnue_module", cond, ["gnue_name"],
- ["gnue_name", "gnue_id"])
-
- # if we have an exact match extend the cache
- if len (list) == 1:
- self._items [name] = self.getNewItem (list [0])
- return self._items [name]
-
- raise EModuleNotFound (name)
-
# ---------------------------------------------------------------------------
# Find a listed module by its id
# ---------------------------------------------------------------------------
@@ -94,16 +80,16 @@
def __init__ (self, sessionManager, session, mDict, object=None, pDefs=None):
BaseObject.__init__ (self, sessionManager, 'gnue_module', object, pDefs)
- self.session = session
self.modules = mDict
self.fullName = self.gnue_name
+ self._session = session
# ---------------------------------------------------------------------------
# Return an attribute's value
# ---------------------------------------------------------------------------
def __getattr__ (self, attr):
if attr == 'classes':
- self.__dict__ ['classes'] = ClassDict (self._sm, self.session,
+ self.__dict__ ['classes'] = ClassDict (self._sm, self._session,
self.modules, self)
# Make sure the created class-dictionary is up to date
self.classes.reload ()
Modified: trunk/gnue-appserver/src/classrep/Namespace.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Namespace.py 2004-01-30 13:27:47 UTC
(rev 5056)
+++ trunk/gnue-appserver/src/classrep/Namespace.py 2004-01-30 18:03:36 UTC
(rev 5057)
@@ -84,6 +84,14 @@
EClassRepository.__init__ (self, msg)
# =============================================================================
+# Requested property does not exist
+# =============================================================================
+class EItemNotFound (EClassRepository):
+ def __init__ (self, tablename, key):
+ msg = "Key '%s' not found in '%s'." % (key, tablename)
+ EClassRepository.__init__ (self, msg)
+
+# =============================================================================
# Class repository definition file has an invalid structure
# =============================================================================
class EInvalidDefinition (EClassRepository):
Modified: trunk/gnue-appserver/src/classrep/Procedure.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Procedure.py 2004-01-30 13:27:47 UTC
(rev 5056)
+++ trunk/gnue-appserver/src/classrep/Procedure.py 2004-01-30 18:03:36 UTC
(rev 5057)
@@ -30,67 +30,47 @@
# =============================================================================
class ProcedureDict (BaseDictionary):
- #
- # TODO: find a good place to call a ProcedureDict.reload () automatically
- #
-
# ---------------------------------------------------------------------------
# Construct a Procedure-Dictionary for class klass
# ---------------------------------------------------------------------------
def __init__ (self, sessionManager, session, klass, predefs = None):
BaseDictionary.__init__ (self, session, 'gnue_procedure')
- self._sm = sessionManager
- self.klass = klass
- self.module = klass.module
+ self._sm = sessionManager
+ self.__class = klass
+ self.__module = self.__class.module
# ---------------------------------------------------------------------------
# Create a new instance of a dictionary item
# ---------------------------------------------------------------------------
- def getNewItem (self, object):
- pMod = self.module.modules.find (object.gnue_module)
- return Procedure (self._sm, pMod, self.klass, object)
+ def _getNewItem (self, object):
+ pMod = self.__module.modules.find (object.gnue_module)
+ return Procedure (self._sm, pMod, object)
# ---------------------------------------------------------------------------
# A reload () returns only the procedures of the class
# ---------------------------------------------------------------------------
- def getCondition (self):
- return [["eq", ""], ["field", "gnue_class"], ["const", self.klass.gnue_id]]
+ def _getReloadCondition (self):
+ return [["eq", ""], ["field", "gnue_class"],
+ ["const", self.__class.gnue_id]]
# ---------------------------------------------------------------------------
- # Read a list of properties from the datasource
+ # Get a condition to match a given procedure
# ---------------------------------------------------------------------------
- def _requestData (self, classId, procedureName = None):
- cond = [["eq", ""], ["field", "gnue_class"], ["const", classId]]
+ def _getSingleCondition (self, key):
+ procName = splitName (key) [1]
- if procedureName:
- cond += [["eq", ""], ["field", "gnue_name"], ["const", procedureName]]
+ return [["eq", ""], ["field", "gnue_class"],
+ ["const", self.__class.gnue_id],
+ ["eq", ""], ["field", "gnue_name"], ["const", procName]]
- return self.session.find ("gnue_procedure", cond, ["gnue_name"],
- ["gnue_class", "gnue_module", "gnue_name",
- "gnue_language", "gnue_code",
"gnue_compiledcode",
- "gnue_comment"])
-
# ---------------------------------------------------------------------------
- # Return a Procedure object if it exists
+ # Get a list of columns to be prepared on a find ()
# ---------------------------------------------------------------------------
- def get (self, name):
- (moduleName, procName) = splitName (name)
+ def _getColumns (self):
+ return ["gnue_module", "gnue_class", "gnue_name", "gnue_language"]
- # is the procedure already cached
- if self.has_key (name):
- return self._items [name]
- # since we had no match in the cache ask for it
- res = self._requestData (self.klass.gnue_id, procName)
-
- if len (res) == 1:
- self._items [name] = self.getNewItem (res [0])
- return self._items [name]
-
- raise EProcedureNotFound (self.klass.fullName, name)
-
-
# =============================================================================
# A Business Object Procedure
# =============================================================================
@@ -99,12 +79,9 @@
# ---------------------------------------------------------------------------
# Construct a new procedure from module, class and business object
# ---------------------------------------------------------------------------
- def __init__ (self, sessionManager, module, klass, object, pDefs = None):
+ def __init__ (self, sessionManager, module, object, pDefs = None):
BaseObject.__init__ (self, sessionManager, 'gnue_procedure', object, pDefs)
- self.klass = klass
- self.module = module
-
# gnue_procedure.gnue_name is already a fully qualified identifier
self.fullName = createName (module.gnue_name, self.gnue_name)
Modified: trunk/gnue-appserver/src/classrep/Property.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Property.py 2004-01-30 13:27:47 UTC
(rev 5056)
+++ trunk/gnue-appserver/src/classrep/Property.py 2004-01-30 18:03:36 UTC
(rev 5057)
@@ -36,69 +36,48 @@
def __init__ (self, sessionManager, session, klass, predefs = None):
BaseDictionary.__init__ (self, session, 'gnue_property')
- self._sm = sessionManager
- self.klass = klass
- self.module = klass.module
+ self._sm = sessionManager
+ self.__class = klass
+ self.__module = self.__class.module
+ # predefs is a list of dictionaries, describing the properties
if predefs is not None:
for pDef in predefs:
- pMod = self.module.modules.find (pDef ['gnue_module'])
- prop = Property (self._sm, pMod, self.klass, None, pDef)
+ pMod = self.__module.modules.find (pDef ['gnue_module'])
+ prop = Property (self._sm, pMod, None, pDef)
+
self._items [prop.fullName] = prop
- else:
- self.reload ()
# ---------------------------------------------------------------------------
# Create a new instance of a dictionary item
# ---------------------------------------------------------------------------
- def getNewItem (self, object):
- pMod = self.module.modules.find (object.gnue_module)
- return Property (self._sm, pMod, self.klass, object)
+ def _getNewItem (self, object):
+ pMod = self.__module.modules.find (object.gnue_module)
+ return Property (self._sm, pMod, object)
# ---------------------------------------------------------------------------
# Restrict a reload () to the classes properties
# ---------------------------------------------------------------------------
- def getCondition (self):
- return [["eq", ""], ["field", "gnue_class"], ["const", self.klass.gnue_id]]
+ def _getReloadCondition (self):
+ return [["eq", ""], ["field", "gnue_class"],
+ ["const", self.__class.gnue_id]]
# ---------------------------------------------------------------------------
- # Read a list of properties from the datasource
+ # Return a condition to match a given Property
# ---------------------------------------------------------------------------
- def _requestData (self, classId, propertyName = None):
- # Special case: if there is already a property with a matching class id
- # we assume all properties of the requesed class are already cached
- for prop in self.values ():
- if prop.gnue_class == classId:
- return []
+ def _getSingleCondition (self, key):
+ return [["eq", ""], ["field", "gnue_class"],
+ ["const", self.__class.gnue_id],
+ ["eq", ""], ["field", "gnue_name"], ["const", key]]
- cond = [["eq", ""], ["field", "gnue_class"], ["const", classId]]
-
- if propertyName:
- cond += [["eq", ""], ["field", "gnue_name"], ["const", propertyName]]
-
- return self.session.find ("gnue_property", cond, ["gnue_name"],
- ["gnue_class", "gnue_module", "gnue_name",
- "gnue_type", "gnue_length", "gnue_scale",
- "gnue_comment"])
-
# ---------------------------------------------------------------------------
- # Return a Property object if it exists
+ # Return a list of columns to be prepared by a find ()
# ---------------------------------------------------------------------------
- def get (self, name):
- # is the property already cached
- if self.has_key (name):
- return self._items [name]
+ def _getColumns (self):
+ return ["gnue_class", "gnue_module", "gnue_name", "gnue_type",
+ "gnue_length", "gnue_scale", "gnue_comment"]
- # since we had no match in the cache ask for it
- res = self._requestData (self.klass.gnue_id, name)
- if len (res) == 1:
- self._items [name] = self.getNewItem (res [0])
- return self._items [name]
-
- raise EPropertyNotFound (self.klass.fullName, name)
-
-
# =============================================================================
# A Business Object Property
# =============================================================================
@@ -107,19 +86,19 @@
# ---------------------------------------------------------------------------
# Construct a new property from module, class and business object
# ---------------------------------------------------------------------------
- def __init__ (self, sessionManager, module, klass, object, pDefs = None):
+ def __init__ (self, sessionManager, module, object, pDefs = None):
BaseObject.__init__ (self, sessionManager, 'gnue_property', object, pDefs)
- self.klass = klass
- self.module = module
+ self.__module = module
# gnue_property.gnue_name is already a fully qualified identifier
- self.fullName = createName (self.module.gnue_name, self.gnue_name)
+ self.fullName = createName (self.__module.gnue_name, self.gnue_name)
self.column = self.fullName
if self.gnue_type == 'string':
self.fullType = '%s(%d)' % (self.gnue_type, int (self.gnue_length))
+
elif self.gnue_type == 'number':
if self.gnue_scale == 0:
self.fullType = '%s(%d)' % (self.gnue_type, int (self.gnue_length))
Modified: trunk/gnue-appserver/src/classrep/__init__.py
===================================================================
--- trunk/gnue-appserver/src/classrep/__init__.py 2004-01-30 13:27:47 UTC
(rev 5056)
+++ trunk/gnue-appserver/src/classrep/__init__.py 2004-01-30 18:03:36 UTC
(rev 5057)
@@ -51,10 +51,12 @@
# Create a boot-catalogue from the ini-file
bootcat = RepositoryDefinition (defaultRepository)
+ # Boot the class repository using this boot-catalogue
server.modules = ModuleDict (server, session, bootcat)
server.classes = ClassDict (server, session, server.modules, None, bootcat)
server.modules.classdict = server.classes
+ # and finally refresh the repository from the datasource
server.modules.reload ()
server.classes.reload ()
Modified: trunk/gnue-appserver/src/classrep/repository.ini
===================================================================
--- trunk/gnue-appserver/src/classrep/repository.ini 2004-01-30 13:27:47 UTC
(rev 5056)
+++ trunk/gnue-appserver/src/classrep/repository.ini 2004-01-30 18:03:36 UTC
(rev 5057)
@@ -19,7 +19,7 @@
; write to the Free Software Foundation, Inc., 59 Temple Place
; - Suite 330, Boston, MA 02111-1307, USA.
;
-; $Id: repository.ini,v 1.4 2003/11/08 18:43:28 siesel Exp $
+; $Id$
; =============================================================================
; Module definitions
Property changes on: trunk/gnue-appserver/src/classrep/repository.ini
___________________________________________________________________
Name: svn:keywords
+ Id
Modified: trunk/gnue-appserver/src/classrep/test.py
===================================================================
--- trunk/gnue-appserver/src/classrep/test.py 2004-01-30 13:27:47 UTC (rev
5056)
+++ trunk/gnue-appserver/src/classrep/test.py 2004-01-30 18:03:36 UTC (rev
5057)
@@ -50,7 +50,6 @@
print "Procedures of 'address_person':"
ap = m.classes ['address_person']
-ap.procedures.reload ()
for pr in ap.procedures.values ():
print "%s coded in %s" % (pr.fullName, pr.gnue_language)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5057 - trunk/gnue-appserver/src/classrep,
johannes <=