[gnue] r9535 - trunk/gnue-common/src/definitions

[email protected]
Newsgroups gmane.comp.cms.gnue.cvs
Message-ID <[email protected]>
Author: reinhard
Date: 2007-04-26 11:36:13 -0500 (Thu, 26 Apr 2007)
New Revision: 9535

Modified:
   trunk/gnue-common/src/definitions/GParser.py
Log:
Execute the actual import immediately when parsing the statement rather than in
phase 1 init.


Modified: trunk/gnue-common/src/definitions/GParser.py
===================================================================
--- trunk/gnue-common/src/definitions/GParser.py	2007-04-26 14:27:47 UTC (rev 9534)
+++ trunk/gnue-common/src/definitions/GParser.py	2007-04-26 16:36:13 UTC (rev 9535)
@@ -132,6 +132,7 @@
   dh.url = url
   dh.checkRequired = checkRequired
   dh.parser = parser
+  dh.root_attributes = attributes
 
   dh.initValidation ()
 
@@ -167,16 +168,6 @@
 
   dh.finalValidation ()
 
-  # Set the root object's attributes
-  #
-  # There should only be 1 root object but GNUe Forms
-  # allows for nested forms so we have to walk the tree
-  #
-  #
-  #object.__dict__.update(attributes)
-  if hasattr(object,'walk'):
-    object.walk (__addAttributesWalker, attributes = attributes)
-
   if initialize:
     assert gDebug (7, "Initializing the object tree starting at %s" % (object))
     object.phaseInit (dh._phaseInitCount)
@@ -188,14 +179,6 @@
   return object
 
 
-# -----------------------------------------------------------------------------
-
-def __addAttributesWalker (object, attributes = {}):
-
-  if isinstance (object, GRootObj):
-    object.__dict__.update (attributes)
-
-
 # ---------------------------------------------------------------------------
 # Remove redundant whitespace characters from a string
 # ---------------------------------------------------------------------------
@@ -552,6 +535,15 @@
     # Set the attributes
     object._set_initial_attributes_(lattrs)
 
+    # If it is an import, replace the placeholder with the actual object
+    if isinstance(object, GImportItem):
+        object = object.get_imported_item()
+        self.xmlStack[0].addChild(object)
+        object.setParent(self.xmlStack[0])
+
+    if isinstance(object, GRootObj):
+        object.__dict__.update(self.root_attributes)
+
     self.xmlStack.insert (0, object)
     self.nameStack.insert (0, tname)
 
@@ -708,22 +700,15 @@
     GObj.__init__ (self, parent, type = type)
 
     self._loadedxmlattrs = {} # Set by parser
-    self._inits          = [self.__primaryInit]
     self._xmlParser      = self.findParentOfType (None)._xmlParser
 
 
   # ---------------------------------------------------------------------------
-  # Prepare the type or the importclass for the object
+  # Do the actual importing
   # ---------------------------------------------------------------------------
 
-  def _buildObject (self):
-    """
-    After the parser has built the object determine either the apropriate type
-    or the importclass for the object. This will be needed by the phase-init.
+  def get_imported_item(self):
 
-    @returns: number of phase initializations needed by this object
-    """
-
     if hasattr (self, '_xmltag'):
       self._type = 'GC%s' % self._xmltag
 
@@ -731,15 +716,6 @@
       item = self._type [9:].lower ()
       self._importclass = self._xmlParser.getXMLelements () [item]['BaseClass']
 
-    return GObj._buildObject (self)
-
-
-  # ---------------------------------------------------------------------------
-  # Phase I init
-  # ---------------------------------------------------------------------------
-
-  def __primaryInit (self):
-
     # Open the library and convert it into objects
     handle = openResource (self.library)
     parent = self.findParentOfType (None)
@@ -761,15 +737,13 @@
     rv = self.__findImportItem (self, form, id)
     if rv is not None:
       rv._IMPORTED = True
-      rv.setParent (self)
-      self.addChild (rv)
 
       # transfer attributes reassigned during the import
       for key in [k for k in self._loadedxmlattrs.keys () if k [0] != '_']:
         rv.__dict__ [key] = self._loadedxmlattrs [key]
         assert gDebug (7, ">>> Moving %s" % key)
 
-      rv._buildObject ()
+      return rv
 
     else:
       raise MarkupError, \
@@ -806,6 +780,11 @@
 # Generic class for importable objects
 # =============================================================================
 
+# This works like this:
+# <import trigger="trigger1,trigger2" entry="entry1,entry2">
+# which is horrible, doesn't make much sense (give the deep nesting of things
+# in forms) and should most probably be removed completely. -- Reinhard
+
 class GImport (GObj):
 
   # ---------------------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.