[rhmessaging-commits] rhmessaging commits: r1819 - mgmt/cumin/python/wooly.
rhmessaging-commits at lists.jboss.org
rhmessaging-commits at lists.jboss.org
Tue Apr 1 11:47:34 EDT 2008
Author: justi9
Date: 2008-04-01 11:47:34 -0400 (Tue, 01 Apr 2008)
New Revision: 1819
Modified:
mgmt/cumin/python/wooly/widgets.py
mgmt/cumin/python/wooly/widgets.strings
Log:
Introduces a new kind of ItemSet, RenderingItemSet, which uses an
ItemRenderer to generate each item's output. The default
implementation uses a template, as before.
Eventually RenderingItemSet will replace ItemSet altogether.
Modify Paginator to use the new item set class.
Introduce PropertySet and ActionSet.
Modified: mgmt/cumin/python/wooly/widgets.py
===================================================================
--- mgmt/cumin/python/wooly/widgets.py 2008-04-01 15:44:42 UTC (rev 1818)
+++ mgmt/cumin/python/wooly/widgets.py 2008-04-01 15:47:34 UTC (rev 1819)
@@ -183,6 +183,61 @@
return None
+class RenderingItemSet(Widget):
+ def __init__(self, app, name, item_renderer):
+ super(RenderingItemSet, self).__init__(app, name)
+
+ self.item_renderer = item_renderer
+
+ self.items = Attribute(app, "items")
+ self.add_attribute(self.items)
+
+ def get_item_count(self, session, *args):
+ return len(self.get_items(session, *args))
+
+ def get_items(self, session, *args):
+ items = self.items.get(session)
+
+ if items is None:
+ items = self.do_get_items(session, *args)
+
+ if items is None:
+ items = ()
+
+ return items
+
+ def do_get_items(self, session, *args):
+ pass
+
+ def render_items(self, session, *args):
+ items = self.get_items(session, *args)
+ writer = Writer()
+
+ for item in items:
+ self.item_renderer.render(writer, session, item)
+
+ return writer.to_string()
+
+class ItemRenderer(object):
+ def __init__(self, widget):
+ self.widget = widget
+
+ def render_content(self, session, item):
+ return item
+
+ def render(self, writer, session, item):
+ return self.render_content(session, item)
+
+class TemplateRenderer(ItemRenderer):
+ def __init__(self, widget, template_key):
+ super(TemplateRenderer, self).__init__(widget)
+
+ text = self.widget.get_string(template_key)
+ self.__tmpl = ObjectBoundTemplate(self, text)
+
+ def render(self, writer, session, item):
+ self.__tmpl.render(writer, session, item)
+
class ItemTree(ItemSet):
def get_items(self, session, *args):
"""Get the root items"""
@@ -195,41 +250,42 @@
writer = Writer()
for child in self.get_child_items(session, *args):
- self.item_tmpl.render(writer, session, child)
+ self.item_renderer.render(writer, session, child)
return writer.to_string()
-class Paginator(ItemSet):
+class Paginator(RenderingItemSet):
def __init__(self, app, name):
- super(Paginator, self).__init__(app, name)
+ renderer = self.PageLink(self, "page_html")
+ super(Paginator, self).__init__(app, name, renderer)
- self.__page = IntegerParameter(app, "page")
- self.__page.default = 0
- self.add_parameter(self.__page)
+ self.page_index = IntegerParameter(app, "page")
+ self.page_index.default = 0
+ self.add_parameter(self.page_index)
- self.__pageset = IntegerParameter(app, "pageset")
- self.__pageset.default = 0
- self.add_parameter(self.__pageset)
+ self.pageset_index = IntegerParameter(app, "pageset")
+ self.pageset_index.default = 0
+ self.add_parameter(self.pageset_index)
- self.__count = Attribute(app, "count")
- self.add_attribute(self.__count)
+ self.page_count = Attribute(app, "count")
+ self.add_attribute(self.page_count)
self.page_size = 15
self.pageset_size = 5
def get_bounds(self, session):
- page = self.__page.get(session)
+ page = self.page_index.get(session)
return self.page_size * page, self.page_size * (page + 1)
def get_pageset_bounds(self, session):
- pageset = self.__pageset.get(session)
+ pageset = self.pageset_index.get(session)
return self.pageset_size * pageset, self.pageset_size * (pageset + 1)
def set_count(self, session, count):
- return self.__count.set(session, count)
+ return self.page_count.set(session, count)
def get_count(self, session):
- return self.__count.get(session)
+ return self.page_count.get(session)
def get_page_count(self, session):
count = self.get_count(session)
@@ -244,7 +300,7 @@
(href, class_ and " class=\"%s\" " % class_ or " ", content)
def render_prev_page_link(self, session, *args):
- page = self.__page.get(session)
+ page = self.page_index.get(session)
if page < 1:
html = self.__link(session.marshal(), "<", "pagenav disabled")
@@ -253,15 +309,16 @@
pageset_start = self.get_pageset_bounds(session)[0]
branch = session.branch()
- self.__page.set(branch, page)
+ self.page_index.set(branch, page)
if page < pageset_start:
- self.__pageset.set(branch, self.__pageset.get(session) - 1)
+ nindex = self.pageset_index.get(session) - 1
+ self.pageset_index.set(branch, nindex)
html = self.__link(branch.marshal(), "<", "pagenav")
return html
def render_next_page_link(self, session, *args):
- page = self.__page.get(session)
+ page = self.page_index.get(session)
if page >= self.get_page_count(session) - 1:
html = self.__link(session.marshal(), ">", "pagenav disabled")
@@ -270,53 +327,83 @@
pageset_end = self.get_pageset_bounds(session)[1]
branch = session.branch()
- self.__page.set(branch, page)
+ self.page_index.set(branch, page)
if page >= pageset_end: # XXX should be >? bounds func is funny
- self.__pageset.set(branch, self.__pageset.get(session) + 1)
+ nindex = self.pageset_index.get(session) + 1
+ self.pageset_index.set(branch, nindex)
html = self.__link(branch.marshal(), ">", "pagenav")
return html
def render_prev_pageset_link(self, session, *args):
- pageset = self.__pageset.get(session)
+ pageset = self.pageset_index.get(session)
if pageset < 1:
html = self.__link(session.marshal(), "<<", "pagenav disabled")
else:
branch = session.branch()
- self.__pageset.set(branch, pageset - 1)
+ self.pageset_index.set(branch, pageset - 1)
html = self.__link(branch.marshal(), "<<", "pagenav")
return html
def render_next_pageset_link(self, session, *args):
- pageset = self.__pageset.get(session)
+ pageset = self.pageset_index.get(session)
if pageset >= self.get_pageset_count(session) - 1:
html = self.__link(session.marshal(), ">>", "pagenav disabled")
else:
branch = session.branch()
- self.__pageset.set(branch, pageset + 1)
+ self.pageset_index.set(branch, pageset + 1)
html = self.__link(branch.marshal(), ">>", "pagenav")
return html
def do_get_items(self, session, *args):
- count = self.__count.get(session)
+ count = self.page_count.get(session)
start, end = self.get_pageset_bounds(session)
page_count = self.get_page_count(session)
return range(start, min(end, page_count))
- def render_item_class_attr(self, session, page):
- if self.__page.get(session) == page:
- return " class=\"selected\""
-
- def render_item_href(self, session, page):
- branch = session.branch()
- self.__page.set(branch, page)
- return branch.marshal()
+ class PageLink(TemplateRenderer):
+ def render_class_attr(self, session, page):
+ if self.widget.page_index.get(session) == page:
+ return " class=\"selected\""
+
+ def render_href(self, session, page):
+ branch = session.branch()
+ self.widget.page_index.set(branch, page)
+ return branch.marshal()
- def render_item_content(self, session, page):
- return page + 1
+ def render_content(self, session, page):
+ return page + 1
+
+class PropertySet(RenderingItemSet):
+ def __init__(self, app, name, item_renderer=None):
+ super(PropertySet, self).__init__(app, name, item_renderer)
+
+ if self.item_renderer is None:
+ self.item_renderer = PropertyRenderer(self, "property_html")
+
+class PropertyRenderer(TemplateRenderer):
+ def render_title(self, session, prop):
+ return prop[0]
+
+ def render_value(self, session, prop):
+ return prop[1]
+
+class ActionSet(RenderingItemSet):
+ def __init__(self, app, name, item_renderer=None):
+ super(ActionSet, self).__init__(app, name, item_renderer)
+
+ if self.item_renderer is None:
+ self.item_renderer = ActionRenderer(self, "action_html")
+
+class ActionRenderer(TemplateRenderer):
+ def render_href(self, session, action):
+ return action[0]
+
+ def render_content(self, session, action):
+ return action[1]
Modified: mgmt/cumin/python/wooly/widgets.strings
===================================================================
--- mgmt/cumin/python/wooly/widgets.strings 2008-04-01 15:44:42 UTC (rev 1818)
+++ mgmt/cumin/python/wooly/widgets.strings 2008-04-01 15:47:34 UTC (rev 1819)
@@ -128,5 +128,17 @@
<li>{prev_pageset_link}</li><li>{prev_page_link}</li>{items}<li>{next_page_link}</li><li>{next_pageset_link}</li>
</ul>
-[Paginator.item_html]
-<li><a {item_class_attr} href="{item_href}">{item_content}</a></li>
+[Paginator.page_html]
+<li><a {class_attr} href="{href}">{content}</a></li>
+
+[PropertySet.html]
+<table>{items}</table>
+
+[PropertySet.property_html]
+<tr><th>{title}</th><td>{value}</td></tr>
+
+[ActionSet.html]
+<ul>{items}</ul>
+
+[ActionSet.action_html]
+<li><a href="{href}">{content}</a></li>
More information about the rhmessaging-commits
mailing list