[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