[rhmessaging-commits] rhmessaging commits: r1818 - mgmt/cumin/python/wooly.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Tue Apr 1 11:44:42 EDT 2008


Author: justi9
Date: 2008-04-01 11:44:42 -0400 (Tue, 01 Apr 2008)
New Revision: 1818

Modified:
   mgmt/cumin/python/wooly/__init__.py
Log:
Catch an error case in string resolution.

Factor out the more basic template functionality into
BoundObjectTemplate.  This will be used for ItemSet renderer objects.



Modified: mgmt/cumin/python/wooly/__init__.py
===================================================================
--- mgmt/cumin/python/wooly/__init__.py	2008-04-01 15:16:41 UTC (rev 1817)
+++ mgmt/cumin/python/wooly/__init__.py	2008-04-01 15:44:42 UTC (rev 1818)
@@ -168,6 +168,9 @@
 
     def get_string(self, key):
         for cls in self.__class__.__mro__:
+            if cls is object:
+                return
+
             str = None
             strs = cls.get_module_strings()
 
@@ -636,21 +639,15 @@
 class Writer(StringIOWriter):
     pass
 
-class Template(object):
-    def __init__(self, widget, key):
-        self.widget = widget
-        self.key = key
-        self.fragments = None
+class ObjectBoundTemplate(object):
+    def __init__(self, obj, text):
+        self.__object = obj
+        self.__text = text
+        self.__fragments = None
 
     def compile(self):
-        text = self.widget.get_string(self.key)
+        return self.resolve(self.parse(self.__text))
 
-        if not text:
-            raise Exception("Template '%s.%s' not found" \
-                            % (self.widget.__class__.__name__, self.key))
-
-        return self.resolve(self.parse(text))
-
     def parse(self, text):
         strings = list()
 
@@ -691,15 +688,13 @@
         
         for string in strings:
             if string.startswith("{") and string.endswith("}"):
-                # Might be a placeholder; look for a matching render
-                # method
-                key = string[1:-1]
-                method = self.find_method("render_" + key)
+                name = string[1:-1]
+                method = self.find_method("render_" + name)
 
                 if method:
                     fragments.append(method)
                 else:
-                    child = self.widget.children_by_name.get(key)
+                    child = self.find_child(name)
 
                     if child:
                         fragments.append(child)
@@ -711,36 +706,54 @@
         return fragments
 
     def find_method(self, name):
-        for cls in self.widget.__class__.__mro__:
-            method = getattr(cls, name, None)
+        for cls in self.__object.__class__.__mro__:
+            meth = getattr(cls, name, None)
 
-            if method and callable(method):
-                return method
+            if meth and callable(meth):
+                return meth
 
+    def find_child(self, name):
+        return None
+
     def render(self, writer, session, *args):
-        if not self.fragments:
-            self.fragments = self.compile()
+        if not self.__fragments:
+            self.__fragments = self.compile()
 
-        for elem in self.fragments:
-            if type(elem) is str:
-                writer.write(elem)
-            elif callable(elem):
+        for frag in self.__fragments:
+            if type(frag) is str:
+                writer.write(frag)
+            elif callable(frag):
                 #print "tc", elem, args
 
-                result = elem(self.widget, session, *args)
+                result = frag(self.__object, session, *args)
 
                 if result is not None:
                     writer.write(str(result))
             else:
-                result = elem.render(session)
+                result = frag.render(session)
 
                 if result is not None:
                     writer.write(str(result))
 
     def __repr__(self):
-        name = self.widget.__class__.__name__ + "." + self.key
+        name = self.__object.__class__.__name__ + "." + self.key
         return "%s('%s')" % (self.__class__.__name__, name)
 
+class Template(ObjectBoundTemplate):
+    def __init__(self, widget, key):
+        text = widget.get_string(key)
+
+        if not text:
+            raise Exception("Template '%s.%s' not found" \
+                            % (widget.__class__.__name__, key))
+
+        super(Template, self).__init__(widget, text)
+
+        self.widget = widget
+
+    def find_child(self, name):
+        return self.widget.children_by_name.get(name)
+
 class WidgetCall(object):
     def __init__(self, stack, widget, session, object):
         self.stack = stack




More information about the rhmessaging-commits mailing list