[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r6425 - trunk/gnue-appserver/src/classrep
From: |
johannes |
Subject: |
r6425 - trunk/gnue-appserver/src/classrep |
Date: |
Wed, 29 Sep 2004 10:00:16 -0500 (CDT) |
Author: johannes
Date: 2004-09-29 10:00:15 -0500 (Wed, 29 Sep 2004)
New Revision: 6425
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/Parameter.py
trunk/gnue-appserver/src/classrep/Procedure.py
trunk/gnue-appserver/src/classrep/Property.py
trunk/gnue-appserver/src/classrep/__init__.py
Log:
Improved loading of class repository (reduced number of selects from 96 to 6)
Modified: trunk/gnue-appserver/src/classrep/Base.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Base.py 2004-09-29 09:26:36 UTC (rev
6424)
+++ trunk/gnue-appserver/src/classrep/Base.py 2004-09-29 15:00:15 UTC (rev
6425)
@@ -262,6 +262,7 @@
self._getColumns ())
if len (list) == 1:
newItem = self._getNewItem (list [0])
+ newItem.complete ()
try:
newItem.validate ()
@@ -282,8 +283,16 @@
del self._items [key.lower ()]
+ # ---------------------------------------------------------------------------
+ # Add an item to the internal dictionary
+ # ---------------------------------------------------------------------------
+ def __setitem__ (self, key, value):
+ self._items [key.lower ()] = value
+
+
+
# =============================================================================
# This class maps all dictionary-keys to properties
# =============================================================================
@@ -374,3 +383,16 @@
for (key, value) in self.__predefined.items ():
if isinstance (value, types.UnicodeType) and value == aObject.objectId:
self.__predefined [key] = aObject
+
+
+ # ---------------------------------------------------------------------------
+ # Complete an instance
+ # ---------------------------------------------------------------------------
+
+ def complete (self):
+ """
+ Descendants can override this function to perform tasks to make an instance
+ complete. This function will be called after a new instance has been
+ created on a request to the dictionary (__getitem__).
+ """
+ pass
Modified: trunk/gnue-appserver/src/classrep/Class.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Class.py 2004-09-29 09:26:36 UTC (rev
6424)
+++ trunk/gnue-appserver/src/classrep/Class.py 2004-09-29 15:00:15 UTC (rev
6425)
@@ -83,6 +83,7 @@
# NOTE: this won't happen very often, since it is only called if a
# module requests a list of all classes without having it's own
# ClassDict-instance.
+ gDebug (2, "FORCE classdict.reload () in constructor ?!")
self.reload ()
@@ -95,12 +96,36 @@
This function reloads all available classes of a module, and all their
properties and procedures.
"""
+ gDebug (2, "ClassDict::reload ()")
+
BaseDictionary.reload (self)
+
+ gProp = PropertyDict (self._session, None, modules = self.modules)
+ gProp.reload ()
+
+ gParam = ParameterDict (self._session, None)
+ gParam.reload ()
+
+ gProc = ProcedureDict (self._session, None, modules = self.modules)
+ gProc.reload ()
+
+ for proc in gProc.values ():
+ for param in gParam.values ():
+ if param.gnue_procedure.gnue_id == proc.gnue_id:
+ proc.parameters [param.fullName] = param
+
for aClass in self.values ():
- aClass.properties.reload ()
- aClass.procedures.reload ()
+ for prop in gProp.values ():
+ if prop.gnue_class.gnue_id == aClass.gnue_id:
+ aClass.properties [prop.fullName] = prop
+ for proc in gProc.values ():
+ if proc.gnue_class.gnue_id == aClass.gnue_id:
+ aClass.procedures [proc.fullName] = proc
+ gDebug (2, "End of ClassDict::Reload ()")
+
+
# ---------------------------------------------------------------------------
# Create a new instance for a dictionary-item
# ---------------------------------------------------------------------------
@@ -110,11 +135,8 @@
Create a new instance of a class and reload it's properties and procedures.
"""
module = self.modules.find (aObject.gnue_module.objectId)
- c = Class (self._session, self, module, aObject,
- {"gnue_id": aObject.objectId})
- c.properties.reload ()
- c.procedures.reload ()
- return c
+ return Class (self._session, self, module, aObject,
+ {"gnue_id": aObject.objectId})
# ---------------------------------------------------------------------------
@@ -260,3 +282,20 @@
for proc in self.procedures.values ():
proc.replaceReferences (module)
proc.replaceReferences (me)
+
+
+ # ---------------------------------------------------------------------------
+ # For a class to be complete, make sure properties and procedures are loaded
+ # ---------------------------------------------------------------------------
+
+ def complete (self):
+ """
+ After adding a new instance to the class dictionary make sure it's
+ properties and procedures are up to date too
+ """
+ gDebug (2, "Completing class %s" % self.fullName)
+ self.properties.reload ()
+ self.procedures.reload ()
+
+ self.validate ()
+
Modified: trunk/gnue-appserver/src/classrep/Module.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Module.py 2004-09-29 09:26:36 UTC (rev
6424)
+++ trunk/gnue-appserver/src/classrep/Module.py 2004-09-29 15:00:15 UTC (rev
6425)
@@ -143,8 +143,15 @@
if attr == 'classes':
self.__dict__ ['classes'] = ClassDict (self._session, self.modules, self)
- # Make sure the created class-dictionary is up to date
- self.classes.reload ()
+ if self.modules.classdict is not None:
+ for aClass in self.modules.classdict.values ():
+ if aClass.gnue_module.gnue_id == self.gnue_id:
+ self.classes [aClass.fullName] = aClass
+ else:
+ # Make sure the created class-dictionary is up to date
+ gDebug (2, "FORCE a classdict-reload through moduledict.classes ()")
+ self.classes.reload ()
+
return self.classes
else:
Modified: trunk/gnue-appserver/src/classrep/Parameter.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Parameter.py 2004-09-29 09:26:36 UTC
(rev 6424)
+++ trunk/gnue-appserver/src/classrep/Parameter.py 2004-09-29 15:00:15 UTC
(rev 6425)
@@ -65,7 +65,10 @@
# ---------------------------------------------------------------------------
def _getReloadCondition (self):
- return ['eq', ['field', u'gnue_procedure'], ['const', self.__proc.gnue_id]]
+ if self.__proc is not None:
+ return ['eq', ['field', u'gnue_procedure'],
['const',self.__proc.gnue_id]]
+ else:
+ return []
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/classrep/Procedure.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Procedure.py 2004-09-29 09:26:36 UTC
(rev 6424)
+++ trunk/gnue-appserver/src/classrep/Procedure.py 2004-09-29 15:00:15 UTC
(rev 6425)
@@ -49,39 +49,36 @@
# ---------------------------------------------------------------------------
# Construct a Procedure-Dictionary for class aClass
# ---------------------------------------------------------------------------
- def __init__ (self, session, aClass, predefs = None):
+ def __init__ (self, session, aClass, predefs = None, modules = None):
BaseDictionary.__init__ (self, session, 'gnue_procedure')
- self.__class = aClass
- self.__module = self.__class.module
+ self.__class = aClass
+ if aClass is not None:
+ self.__module = self.__class.module
+ self.__modules = modules or self.__module.modules
+ else:
+ self.__module = None
+ self.__modules = modules
- # ---------------------------------------------------------------------------
- # Reload the dictionary
- # ---------------------------------------------------------------------------
- def reload (self):
- BaseDictionary.reload (self)
- for aProc in self.values ():
- aProc.parameters.reload ()
-
-
# ---------------------------------------------------------------------------
# Create a new instance of a dictionary item
# ---------------------------------------------------------------------------
def _getNewItem (self, aObject):
- pMod = self.__module.modules.find (aObject.gnue_module.objectId)
- aProc = Procedure (self._session, pMod, aObject,
+ pMod = self.__modules.find (aObject.gnue_module.objectId)
+ return Procedure (self._session, pMod, aObject,
{"gnue_id": aObject.objectId})
- aProc.parameters.reload ()
- return aProc
# ---------------------------------------------------------------------------
# A reload () returns only the procedures of the class
# ---------------------------------------------------------------------------
def _getReloadCondition (self):
- return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+ if self.__class is not None:
+ return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+ else:
+ return []
# ---------------------------------------------------------------------------
@@ -157,3 +154,12 @@
self.calcFullName = None
self.isValidated = True
+
+
+ # ---------------------------------------------------------------------------
+ # Complete the procedure instance
+ # ---------------------------------------------------------------------------
+
+ def complete (self):
+ gDebug (2, "Completing procudure %s" % self.fullName)
+ self.parameters.reload ()
Modified: trunk/gnue-appserver/src/classrep/Property.py
===================================================================
--- trunk/gnue-appserver/src/classrep/Property.py 2004-09-29 09:26:36 UTC
(rev 6424)
+++ trunk/gnue-appserver/src/classrep/Property.py 2004-09-29 15:00:15 UTC
(rev 6425)
@@ -52,16 +52,21 @@
# ---------------------------------------------------------------------------
# Construct a Property-Dictionary for class aClass
# ---------------------------------------------------------------------------
- def __init__ (self, session, aClass, predefs = None):
+ def __init__ (self, session, aClass, predefs = None, modules = None):
BaseDictionary.__init__ (self, session, 'gnue_property')
- self.__class = aClass
- self.__module = self.__class.module
+ self.__class = aClass
+ if aClass is not None:
+ self.__module = self.__class.module
+ self.__modules = modules or self.__module.modules
+ else:
+ self.__module = None
+ self.__modules = modules
# 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'])
+ pMod = self.__modules.find (pDef ['gnue_module'])
prop = Property (session, pMod, None, pDef)
self._items [prop.fullName.lower ()] = prop
@@ -71,7 +76,7 @@
# Create a new instance of a dictionary item
# ---------------------------------------------------------------------------
def _getNewItem (self, aObject):
- pMod = self.__module.modules.find (aObject.gnue_module.objectId)
+ pMod = self.__modules.find (aObject.gnue_module.objectId)
return Property (self._session, pMod, aObject,
{"gnue_id": aObject.objectId})
@@ -80,7 +85,10 @@
# Restrict a reload () to the classes properties
# ---------------------------------------------------------------------------
def _getReloadCondition (self):
- return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+ if self.__class is not None:
+ return ['eq', ['field', u'gnue_class'], ['const', self.__class.gnue_id]]
+ else:
+ return []
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/classrep/__init__.py
===================================================================
--- trunk/gnue-appserver/src/classrep/__init__.py 2004-09-29 09:26:36 UTC
(rev 6424)
+++ trunk/gnue-appserver/src/classrep/__init__.py 2004-09-29 15:00:15 UTC
(rev 6425)
@@ -65,4 +65,5 @@
for module in server.modules.values ():
module.validate ()
+ gDebug (1, "Classrepository loaded")
return
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r6425 - trunk/gnue-appserver/src/classrep,
johannes <=