[rhmessaging-commits] rhmessaging commits: r1773 - in mgmt: cumin/python/cumin and 3 other directories.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Wed Mar 19 08:59:52 EDT 2008


Author: justi9
Date: 2008-03-19 08:59:51 -0400 (Wed, 19 Mar 2008)
New Revision: 1773

Modified:
   mgmt/bin/devel
   mgmt/cumin/python/cumin/action.py
   mgmt/cumin/python/cumin/broker.py
   mgmt/cumin/python/cumin/brokercluster.py
   mgmt/cumin/python/cumin/brokergroup.py
   mgmt/cumin/python/cumin/brokerprofile.py
   mgmt/cumin/python/cumin/client.py
   mgmt/cumin/python/cumin/configproperty.py
   mgmt/cumin/python/cumin/exchange.py
   mgmt/cumin/python/cumin/model.py
   mgmt/cumin/python/cumin/page.py
   mgmt/cumin/python/cumin/queue.py
   mgmt/cumin/python/cumin/realm.py
   mgmt/cumin/python/cumin/stat.py
   mgmt/cumin/python/cumin/system.py
   mgmt/cumin/python/cumin/virtualhost.py
   mgmt/cumin/python/cumin/widgets.py
   mgmt/cumin/python/wooly/__init__.py
   mgmt/cumin/python/wooly/devel.py
   mgmt/cumin/python/wooly/forms.py
   mgmt/cumin/python/wooly/pages.py
   mgmt/cumin/python/wooly/server.py
   mgmt/cumin/python/wooly/tables.py
   mgmt/cumin/python/wooly/widgets.py
   mgmt/misc/boneyard.py
   mgmt/notes/justin-todo.txt
Log:
A change to address a long-standing API issue.

 * get_title is gone; if you want to call render_title outside of a
   widget.render call, you need to provide the correct arguments by
   calling widget.get_args(session)

 * Each widget can define the arguments passed to its internal
   do_render and render_xxx calls by defining get_args(session).

 * I removed the experimental features for passing args that didn't
   pan out.



Modified: mgmt/bin/devel
===================================================================
--- mgmt/bin/devel	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/bin/devel	2008-03-19 12:59:51 UTC (rev 1773)
@@ -11,6 +11,6 @@
 
 source "etc/devel.profile"
 
-devel-etags
+make tags
 
 exec emacs -nw -l "etc/devel.el"

Modified: mgmt/cumin/python/cumin/action.py
===================================================================
--- mgmt/cumin/python/cumin/action.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/action.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -21,14 +21,14 @@
         self.add_column(col)
 
     class DescriptionColumn(ItemTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, item):
             return "Description"
 
         def render_content(self, session, item):
             return item.get_description(session)
 
     class WhenColumn(ItemTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, item):
             return "When"
 
         def render_content(self, session, item):
@@ -40,7 +40,7 @@
                 ""
 
     class StatusColumn(ItemTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, item):
             return "Status"
 
         def render_content(self, session, item):
@@ -57,7 +57,7 @@
 
             return text
 
-    def do_get_items(self, session, object):
+    def do_get_items(self, session, *args):
         return reversed(sorted_by(self.app.model.invocations, "when"))
 
 class ActionPage(Page):
@@ -67,5 +67,5 @@
         self.__actions = ActionInvocationSet(app, "actions")
         self.add_child(self.__actions)
 
-    def get_title(self, session, object):
+    def render_title(self, session, *args):
         return "Actions"

Modified: mgmt/cumin/python/cumin/broker.py
===================================================================
--- mgmt/cumin/python/cumin/broker.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/broker.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -44,15 +44,15 @@
         self.groupify = self.Groupify(app, "groupify", self)
         self.add_child(self.groupify)
 
-    def get_title(self, session, model):
+    def render_title(self, session, *args):
         count = BrokerRegistration.select().count()
         return "Brokers %s" % fmt_count(count)
 
     class Unregister(FormButton):
-        def render_content(self, session, model):
+        def render_content(self, session):
             return "Unregister"
 
-        def process_submit(self, session, model):
+        def process_submit(self, session):
             ids = self.parent.ids.get(session)
             self.parent.ids.clear(session)
 
@@ -62,14 +62,14 @@
             self.page().set_redirect_url(session, branch.marshal())
 
     class BrokerSetGroupInput(BrokerGroupInput):
-        def render_submit_id(self, session, model):
+        def render_submit_id(self, session):
             return self.parent.groupify.path()
 
     class Groupify(FormButton):
-        def render_content(self, session, model):
+        def render_content(self, session):
             return "Add"
 
-        def process_submit(self, session, model):
+        def process_submit(self, session):
             group = self.parent.groups.get(session)
 
             if group:
@@ -86,7 +86,7 @@
             self.page().set_redirect_url(session, session.marshal())
 
     class NameColumn(SqlTableColumn):
-        def get_title(self, session, model):
+        def render_title(self, session, data):
             return "Name"
 
         def render_content(self, session, data):
@@ -96,7 +96,7 @@
             return fmt_olink(branch, broker, name=data["name"])
 
     class GroupsColumn(SqlTableColumn):
-        def get_title(self, session, model):
+        def render_title(self, session, data):
             return "Groups"
 
         def get_orderby_sql(self, session):
@@ -181,7 +181,7 @@
         self.page().set_current_frame(session, self.clients_close)
         return self.show_mode(session, self.clients_close)
 
-    def get_title(self, session, broker):
+    def render_title(self, session, broker):
         return "Broker '%s'" % broker.name
 
 class BrokerStatus(CuminStatus):
@@ -221,7 +221,7 @@
     def show_config(self, session):
         return self.tabs.show_mode(session, self.config)
 
-    def get_title(self, session, reg):
+    def render_title(self, session, reg):
         return "Broker '%s'" % reg.name
 
     def do_process(self, session, reg):
@@ -232,7 +232,7 @@
 
         super(BrokerView, self).do_process(session, reg)
 
-    def render_data_url(self, session, model):
+    def render_data_url(self, session, reg):
         return "model.xml"
 
     def render_address(self, session, reg):
@@ -276,42 +276,48 @@
             self.__queues = QueueSet(app, "items")
             self.add_child(self.__queues)
 
-        def get_object(self, session, reg):
-            return self.parent.parent.parent.vhost.get(session)
+        def get_args(self, session):
+            return self.frame().get_args(session)
 
-        def get_title(self, session, reg):
+        def render_title(self, session, reg):
             vhost = reg.getDefaultVhost()
             return "Queues %s" % fmt_count(vhost.queues.count())
 
-        def render_add_queue_href(self, session, object):
+        def render_add_queue_href(self, session, reg):
             branch = session.branch()
             self.frame().show_queue(branch, None).show_add(branch)
             return branch.marshal()
 
     class BrokerExchangeTab(ExchangeSet):
-        def get_object(self, session, reg):
-            return self.parent.parent.parent.vhost.get(session)
+        def get_args(self, session):
+            return self.frame().get_args(session)
 
-        def get_title(self, session, broker):
-            vhost = self.parent.parent.parent.vhost.get(session)
-            return super(BrokerView.BrokerExchangeTab, self).get_title \
+        def render_title(self, session, reg):
+            vhost = reg.getDefaultVhost()
+            return super(BrokerView.BrokerExchangeTab, self).render_title \
                 (session, vhost)
 
     class BrokerClientTab(ClientSet):
-        def get_object(self, session, reg):
-            return self.parent.parent.parent.vhost.get(session)
+        def get_args(self, session):
+            return self.frame().get_args(session)
 
-        def get_title(self, session, broker):
-            vhost = self.parent.parent.parent.vhost.get(session)
-            return super(BrokerView.BrokerClientTab, self).get_title \
+        def render_title(self, session, reg):
+            vhost = reg.getDefaultVhost()
+            return super(BrokerView.BrokerClientTab, self).render_title \
                 (session, vhost)
 
     class BrokerStatsTab(Widget):
-        def get_title(self, session, broker):
+        def get_args(self, session):
+            return self.frame().get_args(session)
+
+        def render_title(self, session, reg):
             return "Statistics"
 
     class BrokerLogTab(Widget):
-        def get_title(self, session, broker):
+        def get_args(self, session):
+            return self.frame().get_args(session)
+
+        def render_title(self, session, reg):
             return "Log Messages"
 
 class BrokerBrowser(Widget):
@@ -334,11 +340,11 @@
         self.brokers = self.BrowserBrokers(app, "brokers")
         self.add_child(self.brokers)
 
-    def get_title(self, session, model):
+    def render_title(self, session, *args):
         return "Brokers %s" % fmt_count(BrokerRegistration.select().count())
 
     class BrowserBrokers(BrokerSet):
-        def render_sql_where(self, session, object):
+        def render_sql_where(self, session):
             elems = list()
             group = self.parent.group.get(session)
             #profile = self.parent.profile.get(session)
@@ -355,33 +361,33 @@
             if elems:
                 return "where %s" % " and ".join(elems)
 
-    def render_add_broker_href(self, session, model):
+    def render_add_broker_href(self, session):
         branch = session.branch()
         self.frame().show_brokers_add(branch)
         return branch.marshal()
 
-    def render_clear_filters_href(self, session, model):
+    def render_clear_filters_href(self, session):
         branch = session.branch()
         self.group.set(branch, None)
         self.profile.set(branch, None)
         self.cluster.set(branch, None)
         return branch.marshal()
 
-    def render_group_filters(self, session, model):
+    def render_group_filters(self, session):
         groups = BrokerGroup.select()
         return self._render_filters(session, groups, self.group_tmpl)
 
     def render_group_link(self, session, group):
         return self._render_filter_link(session, group, self.group)
 
-    def render_profile_filters(self, session, model):
+    def render_profile_filters(self, session):
         profiles = BrokerProfile.select()
         return self._render_filters(session, profiles, self.profile_tmpl)
 
     def render_profile_link(self, session, profile):
         return self._render_filter_link(session, profile, self.profile)
 
-    def render_cluster_filters(self, session, model):
+    def render_cluster_filters(self, session):
         clusters = BrokerCluster.select()
         return self._render_filters(session, clusters, self.cluster_tmpl)
 
@@ -392,9 +398,9 @@
         writer = Writer()
 
         for object in collection:
-            template.render(session, object, writer)
+            template.render(writer, session, object)
 
-        template.render(session, None, writer)
+        template.render(writer, session, None)
 
         return writer.to_string()
 
@@ -458,19 +464,19 @@
         def get_default(self, session):
             return dict()
 
-    def process_display(self, session, object):
+    def process_display(self, session):
         if self.more.get(session):
             self.fields.set(session, self.fields.get(session) + 3)
 
-    def render_fields(self, session, object):
+    def render_fields(self, session):
         writer = Writer()
 
         for i in range(self.fields.get(session)):
-            self.field_tmpl.render(session, i, writer)
+            self.field_tmpl.render(writer, session, i)
             
         return writer.to_string()
 
-    def render_field_name_name(self, session, object):
+    def render_field_name_name(self, session, index):
         return self.names.path()
 
     def render_field_name_value(self, session, index):
@@ -484,7 +490,7 @@
             return "<ul class=\"errors\"><li>%s</li></ul>" % \
                 "</li><li>".join(errors[index])
 
-    def render_field_address_name(self, session, object):
+    def render_field_address_name(self, session, index):
         return self.addrs.path()
 
     def render_field_address_value(self, session, index):
@@ -498,45 +504,39 @@
             return "<ul class=\"errors\"><li>%s</li></ul>" % \
                 "</li><li>".join(errors[index])
 
-    def render_field_group_name(self, session, object):
+    def render_field_group_name(self, session, index):
         return self.groups.path()
 
     def render_groups(self, session, index):
         writer = Writer()
 
         for group in BrokerGroup.select():
-            self.group_tmpl.render(session, (index, group), writer)
+            self.group_tmpl.render(writer, session, index, group)
 
         return writer.to_string()
 
-    def render_group_value(self, session, args):
-        index, group = args
+    def render_group_value(self, session, index, group):
         return group.id
 
-    def render_group_name(self, session, args):
-        index, group = args
+    def render_group_name(self, session, index, group):
         return group.name
 
-    def render_group_selected_attr(self, session, args):
-        index, group = args
+    def render_group_selected_attr(self, session, index, group):
         groups = self.groups.get(session)
         if len(groups) > index and group.id == groups[index].id:
             return "selected=\"selected\""
 
     class MoreEntries(FormButton):
-        def render_content(self, session, model):
+        def render_content(self, session):
             return "More Entries"
 
 class BrokerSetAdd(BrokerSetForm):
-    def get_title(self, session, object):
-        return "Register New Brokers"
-
-    def process_cancel(self, session, model):
+    def process_cancel(self, session):
         branch = session.branch()
         self.frame().show_view(branch)
         self.page().set_redirect_url(session, branch.marshal())
 
-    def process_submit(self, session, model):
+    def process_submit(self, session):
         action = self.app.model.broker_registration.add
 
         addrs = self.addrs.get(session)
@@ -571,7 +571,7 @@
                         if group:
                             reg.addBrokerGroup(group)
 
-            self.process_cancel(session, model)
+            self.process_cancel(session)
 
     def validate(self, session, addrs, names, groups):
         nerrs = self.name_errors.get(session)
@@ -596,6 +596,9 @@
 
         return not len(nerrs) and not len(aerrs)
 
+    def render_title(self, session):
+        return "Register New Brokers"
+
 class BrokerEdit(CuminFieldForm):
     def __init__(self, app, name):
         super(BrokerEdit, self).__init__(app, name)
@@ -605,8 +608,11 @@
 
         self.groups = BrokerGroupCheckboxField(app, "groups", self)
         self.add_field(self.groups)
+
+    def get_args(self, session):
+        return self.frame().get_args(session)
         
-    def get_title(self, session, reg):
+    def render_title(self, session, reg):
         return "Edit Broker '%s'" % reg.name
 
     def process_cancel(self, session, reg):
@@ -643,34 +649,33 @@
         for group in reg.groups:
             self.groups.get(session).append(group)
 
-# XXX use reg, not broker, where appropriate
 class BrokerRemove(CuminConfirmForm):
-    def get_title(self, session, broker):
-        return "Unregister Broker '%s'" % broker.name
-
-    def process_cancel(self, session, broker):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+    
+    def process_cancel(self, session, reg):
         branch = session.branch()
         self.frame().show_view(branch)
         self.page().set_redirect_url(session, branch.marshal())
 
-    def process_submit(self, session, broker):
+    def process_submit(self, session, reg):
         action = self.app.model.broker_registration.remove
-        action.invoke(broker)
+        action.invoke(reg)
 
         branch = session.branch()
         self.page().show_main(branch).show_view(branch)
         self.page().set_redirect_url(session, branch.marshal())
 
-    def render_submit_content(self, session, broker):
-        return "Yes, Unregister Broker '%s'" % broker.name
+    def render_title(self, session, reg):
+        return "Unregister Broker '%s'" % reg.name
 
-    def render_cancel_content(self, session, broker):
+    def render_submit_content(self, session, reg):
+        return "Yes, Unregister Broker '%s'" % reg.name
+
+    def render_cancel_content(self, session, reg):
         return "No, Cancel"
 
 class BrokerSetRemove(CuminBulkActionForm, Frame):
-    def get_title(self, session, model):
-        return "Unregister Brokers"
-
     def process_return(self, session, id):
         branch = session.branch()
         frame = self.frame()
@@ -683,6 +688,9 @@
         # XXX need to handle object not found case
         action.invoke(BrokerRegistration.get(id))
 
+    def render_title(self, session):
+        return "Unregister Brokers"
+
     def render_item_content(self, session, id):
         return "Unregister Broker '%s'" % BrokerRegistration.get(id).name
 

Modified: mgmt/cumin/python/cumin/brokercluster.py
===================================================================
--- mgmt/cumin/python/cumin/brokercluster.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/brokercluster.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -13,15 +13,15 @@
 strings = StringCatalog(__file__)
 
 class BrokerClusterSet(SQLObjectItemSet):
-    def render_cluster_add_href(self, session, model):
+    def render_cluster_add_href(self, session, *args):
         branch = session.branch()
         self.page().show_broker_cluster_add(branch)
         return branch.marshal()
     
-    def get_title(self, session, model):
+    def render_title(self, session, *args):
         return "Broker Clusters %s" % fmt_count(BrokerCluster.select().count())
 
-    def do_get_items(self, session, model):
+    def do_get_items(self, session, *args):
         return BrokerCluster.select()
 
     def render_item_link(self, session, cluster):
@@ -67,7 +67,7 @@
         self.broker.set_object(session, broker)
         return self.show_mode(session, self.broker)
 
-    def get_title(self, session, cluster):
+    def render_title(self, session, cluster):
         return "Broker Cluster '%s'" % cluster.name
 
 class BrokerClusterStatus(CuminStatus):
@@ -86,21 +86,27 @@
         self.tabs.add_tab(self.ClusterBrokerTab(app, "brokers"))
         self.tabs.add_tab(self.ClusterStatsTab(app, "stats"))
 
-    def get_title(self, session, cluster):
+    def render_title(self, session, cluster):
         return "Broker Cluster '%s'" % cluster.name
 
     def render_name(self, session, cluster):
         return cluster.name
 
     class ClusterBrokerTab(BrokerSet):
-        def get_title(self, session, cluster):
+        def get_args(self, session):
+            return self.frame().get_args(session)
+
+        def render_title(self, session, cluster):
             return "Brokers %s" % fmt_count(len(cluster.brokers))
 
         def do_get_items(self, session, cluster):
             return cluster.brokers
 
     class ClusterStatsTab(Widget):
-        def get_title(self, session, cluster):
+        def get_args(self, session):
+            return self.frame().get_args(session)
+
+        def render_title(self, session, cluster):
             return "Statistics"
 
 class BrokerClusterForm(CuminForm):
@@ -118,21 +124,21 @@
         self.page().set_redirect_url(session, branch.marshal())
 
 class BrokerClusterAdd(BrokerClusterForm, Frame):
-    def get_title(self, session, model):
+    def render_title(self, session):
         return "Add Cluster"
 
-    def process_cancel(self, session, model):
+    def process_cancel(self, session):
         branch = session.branch()
         self.page().show_main(branch)
         self.page().set_redirect_url(session, branch.marshal())
     
-    def process_submit(self, session, model):
+    def process_submit(self, session):
         cluster = BrokerCluster()
         self.process_cluster(session, cluster)
     
 class BrokerClusterEdit(BrokerClusterForm, Frame):
-    def get_title(self, session, cluster):
-        return "Edit Cluster '%s'" % cluster.name
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
     def process_cancel(self, session, cluster):
         branch = session.branch()
@@ -145,9 +151,12 @@
     def process_display(self, session, cluster):
         self.cluster_name.set(session, cluster.name)
 
+    def render_title(self, session, cluster):
+        return "Edit Cluster '%s'" % cluster.name
+
 class BrokerClusterRemove(CuminConfirmForm):
-    def get_title(self, session, cluster):
-        return "Remove Broker Cluster '%s'" % cluster.name
+    def get_args(self, session):
+        return self.get_args(session)
 
     def process_cancel(self, session, cluster):
         branch = session.branch()
@@ -161,6 +170,9 @@
         self.page().show_main(branch)
         self.page().set_redirect_url(session, branch.marshal())
 
+    def render_title(self, session, cluster):
+        return "Remove Broker Cluster '%s'" % cluster.name
+
     def render_submit_content(self, session, cluster):
         return "Yes, Remove Broker Cluster '%s'" % cluster.name
 

Modified: mgmt/cumin/python/cumin/brokergroup.py
===================================================================
--- mgmt/cumin/python/cumin/brokergroup.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/brokergroup.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -21,16 +21,16 @@
         #col = self.StatusColumn(app, "status")
         #self.add_column(col)
 
-    def get_title(self, session, model):
+    def render_title(self, session):
         return "Broker Groups %s" % fmt_count(BrokerGroup.select().count())
 
-    def render_group_add_href(self, session, model):
+    def render_group_add_href(self, session):
         branch = session.branch()
         self.frame().show_broker_group(branch, None).show_add(branch)
         return branch.marshal()
 
     class NameColumn(SqlTableColumn):
-        def get_title(self, session, model):
+        def render_title(self, session, data):
             return "Name"
 
         def render_content(self, session, data):
@@ -47,7 +47,7 @@
         self.add_parameter(param)
         self.set_parameter(param)
 
-    def do_get_items(self, session, model):
+    def do_get_items(self, session, *args):
         return BrokerGroup.select()
 
     def render_item_value(self, session, group):
@@ -68,7 +68,7 @@
 
         self.set_parameter(self.__inputs.get_parameter())
 
-    def get_title(self, session, object):
+    def render_title(self, session):
         return "Broker Groups"
 
 class BrokerGroupFrame(CuminFrame):
@@ -95,7 +95,7 @@
         self.add_child(remove)
         self.set_remove_mode(remove)
 
-    def get_title(self, session, group):
+    def render_title(self, session, group):
         if group:
             title = "Broker Group '%s'" % group.name
         else:
@@ -118,14 +118,17 @@
 
         self.tabs.add_tab(self.GroupBrokerTab(app, "brokers"))
 
-    def get_title(self, session, group):
+    def render_title(self, session, group):
         return "Broker Group '%s'" % group.name
 
     def render_name(self, session, group):
         return group.name
 
     class GroupBrokerTab(BrokerSet):
-        def get_title(self, session, group):
+        def get_args(self, session):
+            return self.frame().get_args(session)
+
+        def render_title(self, session, group):
             return "Brokers %s" % \
                 fmt_count(self.get_item_count(session, group))
 
@@ -145,17 +148,14 @@
         self.add_field(self.group_name)
 
 class BrokerGroupAdd(BrokerGroupForm):
-    def get_title(self, session, model):
-        return "Add Group"
-
-    def process_cancel(self, session, model):
+    def process_cancel(self, session):
         branch = session.branch()
         self.page().pop_current_frame(branch)
         self.page().pop_current_frame(branch)
         self.page().get_current_frame(branch).show_view(branch)
         self.page().set_redirect_url(session, branch.marshal())
     
-    def process_submit(self, session, model):
+    def process_submit(self, session):
         errors = self.validate(session)
 
         if errors:
@@ -165,11 +165,14 @@
             method = self.app.model.broker_group.add
             method.invoke(None, args)
 
-            self.process_cancel(session, model)
+            self.process_cancel(session)
 
+    def render_title(self, session):
+        return "Add Group"
+
 class BrokerGroupEdit(BrokerGroupForm):
-    def get_title(self, session, group):
-        return "Edit Group '%s'" % group.name
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
     def process_cancel(self, session, group):
         branch = session.branch()
@@ -192,9 +195,12 @@
     def process_display(self, session, group):
         self.group_name.set(session, group.name)
 
+    def render_title(self, session, group):
+        return "Edit Group '%s'" % group.name
+
 class BrokerGroupRemove(CuminConfirmForm, Frame):
-    def get_title(self, session, group):
-        return "Remove Broker Group '%s'" % group.name
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
     def process_cancel(self, session, group):
         branch = session.branch()
@@ -213,6 +219,9 @@
         self.page().pop_current_frame(branch)
         self.page().set_redirect_url(session, branch.marshal())
 
+    def render_title(self, session, group):
+        return "Remove Broker Group '%s'" % group.name
+
     def render_submit_content(self, session, group):
         return "Yes, Remove Broker Group '%s'" % group.name
 

Modified: mgmt/cumin/python/cumin/brokerprofile.py
===================================================================
--- mgmt/cumin/python/cumin/brokerprofile.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/brokerprofile.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -12,15 +12,15 @@
 strings = StringCatalog(__file__)
 
 class BrokerProfileSet(SQLObjectItemSet):
-    def render_profile_add_href(self, session, profile):
+    def render_profile_add_href(self, session, *args):
         branch = session.branch()
         self.page().show_broker_profile_add(branch)
         return branch.marshal()
 
-    def get_title(self, session, model):
+    def render_title(self, session, *args):
         return "Broker Profiles %s" % fmt_count(BrokerProfile.select().count())
 
-    def do_get_items(self, session, model):
+    def do_get_items(self, session, *args):
         return BrokerProfile.select()
 
     def render_item_link(self, session, profile):
@@ -48,7 +48,7 @@
         self.add_mode(self.remove)
         self.set_remove_mode(self.remove)
         
-    def get_title(self, session, profile):
+    def render_title(self, session, profile):
         return "Broker Profile '%s'" % profile.name
 
 class BrokerProfileView(CuminView):
@@ -61,24 +61,30 @@
         self.tabs.add_tab(self.ProfileConfigTab(app, "config"))
         self.tabs.add_tab(self.ProfileBrokerTab(app, "brokers"))
 
-    def get_title(self, session, profile):
+    def render_title(self, session, profile):
         return "Broker Profile '%s'" % profile.name
 
     def render_name(self, session, profile):
         return profile.name
 
     class ProfileConfigTab(ConfigPropertySet):
+        def get_args(self, session):
+            return self.frame().get_args(session)
+
         def do_get_items(self, session, profile):
             return sorted_by(profile.properties)
         
-        def get_title(self, session, profile):
+        def render_title(self, session, profile):
             return "Configuration"
 
     class ProfileBrokerTab(BrokerSet):
         def __init__(self, app, name):
             super(BrokerProfileView.ProfileBrokerTab, self).__init__(app, name)
 
-        def get_title(self, session, profile):
+        def get_args(self, session):
+            return self.frame().get_args(session)
+
+        def render_title(self, session, profile):
             return "Brokers %s" % fmt_count(len(profile.brokers))
 
         def do_get_items(self, session, profile):
@@ -119,21 +125,21 @@
         self.page().set_redirect_url(session, branch.marshal())
 
 class BrokerProfileAdd(BrokerProfileForm, Frame):
-    def get_title(self, session, model):
+    def render_title(self, session):
         return "Add Profile"
 
-    def process_cancel(self, session, model):
+    def process_cancel(self, session):
         branch = session.branch()
         self.page().show_main(branch)
         self.page().set_redirect_url(session, branch.marshal())
     
-    def process_submit(self, session, model):
+    def process_submit(self, session):
         profile = BrokerProfile()
         self.process_profile(session, profile)
     
 class BrokerProfileEdit(BrokerProfileForm, Frame):
-    def get_title(self, session, profile):
-        return "Edit Profile '%s'" % profile.name
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
     def process_cancel(self, session, profile):
         branch = session.branch()
@@ -146,9 +152,12 @@
     def process_display(self, session, profile):
         self.profile_name.set(session, profile.name)
 
+    def render_title(self, session, profile):
+        return "Edit Profile '%s'" % profile.name
+
 class BrokerProfileRemove(CuminConfirmForm):
-    def get_title(self, session, profile):
-        return "Remove Broker Profile '%s'" % profile.name
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
     def process_cancel(self, session, profile):
         branch = session.branch()
@@ -162,6 +171,9 @@
         self.page().show_main(branch)
         self.page().set_redirect_url(session, branch.marshal())
 
+    def render_title(self, session, profile):
+        return "Remove Broker Profile '%s'" % profile.name
+
     def render_submit_content(self, session, profile):
         return "Yes, Remove Broker Profile '%s'" % profile.name
 

Modified: mgmt/cumin/python/cumin/client.py
===================================================================
--- mgmt/cumin/python/cumin/client.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/client.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -45,12 +45,15 @@
         self.__close = self.Close(app, "close", self)
         self.add_child(self.__close)
 
-    def get_title(self, session, vhost):
-        return "Clients %s" % fmt_count(vhost.clients.count())
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
     def get_unit_plural(self, session):
         return self.unit.get(session) == "b" and "Bytes" or "Frames"
 
+    def render_title(self, session, vhost):
+        return "Clients %s" % fmt_count(vhost.clients.count())
+
     def render_sql_where(self, session, vhost):
         elems = list()
         elems.append("l.vhost_id = %(id)r")
@@ -61,10 +64,10 @@
         return {"id": vhost.id}
 
     class Close(FormButton):
-        def render_content(self, session, object):
+        def render_content(self, session):
             return "Close"
 
-        def process_submit(self, session, model):
+        def process_submit(self, session):
             ids = self.parent.ids.get(session)
             self.parent.ids.clear(session)
 
@@ -74,7 +77,7 @@
             self.page().set_redirect_url(session, branch.marshal())
 
     class AddressColumn(SqlTableColumn):
-        def get_title(self, session, vhost):
+        def render_title(self, session, data):
             return "Address"
 
         def render_content(self, session, data):
@@ -84,7 +87,7 @@
             return fmt_olink(branch, client, name=data["addr"])
 
     class SessionsColumn(SqlTableColumn):
-        def get_title(self, session, vhost):
+        def render_title(self, session, data):
             return "Sessions"
 
         def render_content(self, session, data):
@@ -97,7 +100,7 @@
             return "XXX"
 
     class SentColumn(NullSortColumn):
-        def get_title(self, session, vhost):
+        def render_title(self, session, data):
             return "%s Sent" % self.parent.get_unit_plural(session)
 
         def get_column_key(self, session):
@@ -108,7 +111,7 @@
             return fmt_rate(value, "", "sec")
 
     class ReceivedColumn(NullSortColumn):
-        def get_title(self, session, vhost):
+        def render_title(self, session, data):
             return "%s Received" % self.parent.get_unit_plural(session)
 
         def get_column_key(self, session):
@@ -148,7 +151,7 @@
     def show_sessions_close(self, session):
         return self.show_mode(session, self.sessions_close)
 
-    def get_title(self, session, client):
+    def render_title(self, session, client):
         return "Client %s" % client.address
 
 def doit(error, args):
@@ -157,8 +160,8 @@
     #print "did it!"
 
 class ClientClose(CuminConfirmForm):
-    def get_title(self, session, client):
-        return "Close Client '%s'" % client.address
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
     def process_cancel(self, session, client):
         branch = session.branch()
@@ -173,6 +176,9 @@
         else:
             self.process_cancel(session, client)
 
+    def render_title(self, session, client):
+        return "Close Client '%s'" % client.address
+
     def render_submit_content(self, session, client):
         return "Yes, Close Client '%s'" % client.address
 
@@ -180,10 +186,7 @@
         return "No, Cancel"
 
 class ClientSetClose(CuminBulkActionForm):
-    def get_title(self, session, object):
-        return "Close Clients"
-
-    def process_return(self, session, object):
+    def process_return(self, session):
         branch = session.branch()
         frame = self.frame()
         frame.show_view(branch)
@@ -195,6 +198,9 @@
         action = self.app.model.client.close
         action.invoke(client)
 
+    def render_title(self, session):
+        return "Close Clients"
+
     def render_item_content(self, session, id):
         return "Close Client %s" % Client.get(id).address
 
@@ -215,7 +221,7 @@
         stat = self.app.model.client.get_stat("bytesToClient")
         return fmt_rate(stat.rate(client), "byte", "sec")
 
-class ClientView(Widget):
+class ClientView(CuminView):
     def __init__(self, app, name):
         super(ClientView, self).__init__(app, name)
 
@@ -233,7 +239,7 @@
     def show_sessions(self, session):
         return self.tabs.show_mode(session, self.sessions)
 
-    def get_title(self, session, client):
+    def render_title(self, session, client):
         return "Client '%s'" % client.address
 
     def render_data_url(self, session, client):
@@ -258,7 +264,7 @@
         self.add_tab(self.StatisticsCurrent(app, "current"))
         self.add_tab(self.StatisticsHistory(app, "history"))
 
-    def get_title(self, session, client):
+    def render_title(self, session):
         return "Statistics"
 
     class StatisticsCurrent(Widget):
@@ -267,7 +273,7 @@
 
             self.add_child(StatSet(app, "general", "general"))
 
-        def get_title(self, session, client):
+        def render_title(self, session):
             return "Current"
 
     class StatisticsHistory(Widget):
@@ -284,14 +290,11 @@
             chart.mode = "rate"
             self.add_child(chart)
 
-        def get_title(self, session, client):
+        def render_title(self, session):
             return "History"
 
 class ClientSessionSetDetach(CuminBulkActionForm, Frame):
-    def get_title(self, session, object):
-        return "Detach Sessions"
-    
-    def process_return(self, session, object):
+    def process_return(self, session):
         branch = session.branch()
         frame = self.frame()
         frame.show_view(branch).show_sessions(branch)
@@ -303,14 +306,14 @@
         action = self.app.model.session.detach
         action.invoke(session_)
 
+    def render_title(self, session):
+        return "Detach Sessions"
+    
     def render_item_content(self, session, id):
         return "Detach Session '%s'" % Session.get(id).name
 
 class ClientSessionSetClose(CuminBulkActionForm, Frame):
-    def get_title(self, session, object):
-        return "Close Sessions"
-    
-    def process_return(self, session, object):
+    def process_return(self, session):
         branch = session.branch()
         frame = self.frame()
         frame.show_view(branch).show_sessions(branch)
@@ -322,6 +325,9 @@
         action = self.app.model.session.close
         action.invoke(session_)
 
+    def render_title(self, session):
+        return "Close Sessions"
+    
     def render_item_content(self, session, id):
         return "Close Session '%s'" % Session.get(id).name
 
@@ -352,7 +358,10 @@
         self.__close = self.Close(app, "close", self)
         self.add_child(self.__close)
 
-    def get_title(self, session, client):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+        
+    def render_title(self, session, client):
         return "Sessions %s" % fmt_count(client.sessions.count())
 
     def render_sql_where(self, session, client):
@@ -365,10 +374,10 @@
         return {"id": client.id}
 
     class Detach(FormButton):
-        def render_content(self, session, object):
+        def render_content(self, session):
             return "Detach"
 
-        def process_submit(self, session, model):
+        def process_submit(self, session):
             ids = self.parent.ids.get(session)
             self.parent.ids.clear(session)
 
@@ -379,10 +388,10 @@
             self.page().set_redirect_url(session, branch.marshal())
 
     class Close(FormButton):
-        def render_content(self, session, object):
+        def render_content(self, session):
             return "Close"
 
-        def process_submit(self, session, model):
+        def process_submit(self, session):
             ids = self.parent.ids.get(session)
             self.parent.ids.clear(session)
 
@@ -393,18 +402,18 @@
             self.page().set_redirect_url(session, branch.marshal())
 
     class NameColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "Name"
 
     class ExpiresColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "Expires"
 
         def render_value(self, session, value):
             return fmt_datetime(datetime.fromtimestamp(value / 1000000000))
 
     class StatusColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "Attached?"
 
         def render_value(self, session, value):

Modified: mgmt/cumin/python/cumin/configproperty.py
===================================================================
--- mgmt/cumin/python/cumin/configproperty.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/configproperty.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -6,7 +6,7 @@
 from util import *
 
 class ConfigPropertySet(ItemSet):
-    def do_get_items(self, session, model):
+    def do_get_items(self, session, *args):
         return sorted_by(model.get_config_properties())
 
     def render_item_name(self, session, prop):

Modified: mgmt/cumin/python/cumin/exchange.py
===================================================================
--- mgmt/cumin/python/cumin/exchange.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/exchange.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -65,7 +65,10 @@
         self.phase = PhaseSwitch(app, "phase")
         self.add_child(self.phase)
 
-    def get_title(self, session, vhost):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
+    def render_title(self, session, vhost):
         return "Exchanges %s" % fmt_count(vhost.exchanges.count())
 
     def render_sql_where(self, session, vhost):
@@ -78,7 +81,7 @@
         return {"id": vhost.id}
 
     class NameColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "Name"
 
         def render_content(self, session, data):
@@ -89,7 +92,7 @@
             return fmt_olink(branch, exchange, name=name)
 
     class ProducersColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "Producers"
 
         def render_content(self, session, data):
@@ -103,7 +106,7 @@
             return fmt_link(branch.marshal(), data["producers"])
 
     class BindingsColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "Bindings"
 
         def render_content(self, session, data):
@@ -114,7 +117,7 @@
             return fmt_link(branch.marshal(), data["bindings"])
 
     class ReceivedColumn(NullSortColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "%s Received" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
@@ -125,7 +128,7 @@
             return fmt_rate(value, "", "sec")
 
     class RoutedColumn(NullSortColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "%s Routed" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
@@ -136,7 +139,7 @@
             return fmt_rate(value, "", "sec")
 
     class DroppedColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "%s Dropped" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
@@ -163,15 +166,7 @@
         self.add_mode(self.view)
         self.set_view_mode(self.view)
 
-    # XXX not awesome
-    def get_object(self, session, object):
-        exchange = self.param.get(session)
-        # XXX
-        #self.app.model.get_stat(exchange, "producers").link_cb = show_producers
-        #self.app.model.get_stat(exchange, "bindings").link_cb = show_bindings
-        return exchange
-
-    def get_title(self, session, exchange):
+    def render_title(self, session, exchange):
         return exchange.name and "Exchange '%s'" % exchange.name \
             or "Default Exchange"
 
@@ -194,7 +189,7 @@
     def render_bytes_dropped(self, session, exchange):
         return self.app.model.exchange.get_stat("byteDrops").value(exchange)
 
-class ExchangeView(Widget):
+class ExchangeView(CuminView):
     def __init__(self, app, name):
         super(ExchangeView, self).__init__(app, name)
 
@@ -218,9 +213,6 @@
     def show_bindings(self, session):
         return self.tabs.show_mode(session, self.bindings);
 
-    def get_title(self, session, exchange):
-        return self.parent.get_title(session, exchange)
-
     def render_data_url(self, session, exchange):
         return "model.xml?class=exchange;id=%i" % exchange.id
 
@@ -242,7 +234,10 @@
         return fmt_datetime(exchange.recTime)
 
 class ExchangeBindingSet(BindingSet):
-    def get_title(self, session, exchange):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
+    def render_title(self, session, exchange):
         return "Queue Bindings %s" % \
             fmt_count(self.get_item_count(session, exchange))
 
@@ -306,9 +301,9 @@
         return error is None
 
 class ExchangeAdd(ExchangeForm):
-    def get_title(self, session, vhost):
-        return "Add Exchange to Host Template '%s'" % vhost.name
-        
+    def get_args(self, session):
+        return self.frame().frame().get_args(session)
+
     def process_cancel(self, session, vhost):
         branch = session.branch()
         self.page().show_broker(branch, vhost.get_broker()).show_view(branch)
@@ -326,9 +321,12 @@
             self.page().show_exchange(branch, exchange).show_view(branch)
             self.page().set_redirect_url(session, branch.marshal())
 
+    def render_title(self, session, vhost):
+        return "Add Exchange"
+        
 class ExchangeEdit(ExchangeForm):
-    def get_title(self, session, exchange):
-        return "Edit Exchange '%s'" % exchange.name
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
     def process_cancel(self, session, exchange):
         branch = session.branch()
@@ -350,9 +348,12 @@
         self.exchange_name.set(session, exchange.name)
         self.type.set(session, exchange.type)
 
+    def render_title(self, session, exchange):
+        return "Edit Exchange '%s'" % exchange.name
+
 class ExchangeRemove(CuminConfirmForm):
-    def get_title(self, session, exchange):
-        return "Remove Exchange '%s'" % exchange.name
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
     def process_cancel(self, session, exchange):
         branch = session.branch()
@@ -368,6 +369,9 @@
         self.page().show_broker(branch, vhost.get_broker()).show_view(branch)
         self.page().set_redirect_url(session, branch.marshal())
 
+    def render_title(self, session, exchange):
+        return "Remove Exchange '%s'" % exchange.name
+
     def render_submit_content(self, session, exchange):
         return "Yes, Remove Exchange '%s'" % exchange.name
 
@@ -381,7 +385,10 @@
         self.add_tab(self.StatisticsCurrent(app, "current"))
         self.add_tab(self.StatisticsHistory(app, "history"))
 
-    def get_title(self, session, exchange):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
+    def render_title(self, session, exchange):
         return "Statistics"
 
     class StatisticsCurrent(Widget):
@@ -391,7 +398,10 @@
 
             self.add_child(StatSet(app, "general", "general"))
 
-        def get_title(self, session, exchange):
+        def get_args(self, session):
+            return self.frame().get_args(session)
+
+        def render_title(self, session, exchange):
             return "Current"
 
     class StatisticsHistory(Widget):
@@ -413,11 +423,17 @@
             chart.stats = ("msgDrops",)
             self.add_child(chart)
 
-        def get_title(self, session, queue):
+        def get_args(self, session):
+            return self.frame().get_args(session)
+
+        def render_title(self, session, exchange):
             return "History"
 
 class ExchangeProducerSet(ItemSet):
-    def get_title(self, session, exchange):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
+    def render_title(self, session, exchange):
         return "Producers %s" % \
             fmt_count(self.get_item_count(session, exchange))
 

Modified: mgmt/cumin/python/cumin/model.py
===================================================================
--- mgmt/cumin/python/cumin/model.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/model.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -727,7 +727,7 @@
     def get_content_type(self, session):
         return Page.xml_content_type
 
-    def do_render(self, session, model):
+    def do_render(self, session):
         writer = Writer()
         writer.write(Page.xml_1_0_declaration)
 

Modified: mgmt/cumin/python/cumin/page.py
===================================================================
--- mgmt/cumin/python/cumin/page.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/page.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -42,9 +42,6 @@
     def set_modal(self, session, modal):
         self.__modal.set(session, modal)
 
-    def get_object(self, session, object):
-        return self.app.model
-
     class FramesAttribute(Attribute):
         def get_default(self, session):
             return list()
@@ -52,10 +49,10 @@
     def get_frames(self, session):
         return self.__frames.get(session)
 
-    def render_class(self, session, object):
+    def render_class(self, session):
         return self.__modal.get(session) and "modal"
 
-    def get_title(self, session, model):
+    def render_title(self, session):
         return "MRG Management"
 
 class MainFrame(CuminFrame):
@@ -99,55 +96,48 @@
         self.__system = SystemFrame(app, "system")
         self.add_mode(self.__system)
 
-    def get_title(self, session, object):
+    def render_title(self, session):
         return "Main"
 
-    def render_user_name(self, session, object):
+    def render_user_name(self, session):
         return session.credentials.get("name")
 
-    def render_logout_href(self, session, object):
+    def render_logout_href(self, session):
         branch = session.branch()
         self.__logout.set(branch, True)
         return branch.marshal()
 
-    def render_frames(self, session, object):
+    def render_frames(self, session):
         self.__object.set(session, object)
         writer = Writer()
 
         for frame in self.page().get_frames(session):
-            self.__frame_tmpl.render(session, frame, writer)
+            self.__frame_tmpl.render(writer, session, frame)
 
         return writer.to_string()
 
     def render_frame_href(self, session, frame):
-        object = frame.get_object(session, self.__object.get(session))
-        return frame.render_href(session, object)
+        args = frame.get_args(session)
+        return frame.render_href(session, *args)
 
     def render_frame_title(self, session, frame):
-        object = frame.get_object(session, self.__object.get(session))
-        return frame.render_title(session, object)
+        args = frame.get_args(session)
+        return frame.render_title(session, *args)
 
-    def render_pending_count(self, session, object):
+    def render_pending_count(self, session):
         return self.app.model.count_invocations("pending")
 
-    def render_completed_count(self, session, object):
+    def render_completed_count(self, session):
         return self.app.model.count_invocations("OK")
 
-    def render_failed_count(self, session, object):
+    def render_failed_count(self, session):
         pcount = self.app.model.count_invocations("pending")
         ccount = self.app.model.count_invocations("OK")
         return len(self.app.model.invocations) - pcount - ccount
 
     def show_broker(self, session, broker):
-        cluster = None #broker.get_broker_cluster()
-
-        if cluster:
-            frame = self.show_broker_cluster(session, cluster)
-            frame = frame.show_broker(session, broker)
-        else:
-            frame = self.show_mode(session, self.__broker)
-            frame.set_object(session, broker)
-
+        frame = self.show_mode(session, self.__broker)
+        frame.set_object(session, broker)
         return self.page().set_current_frame(session, frame)
 
     def show_brokers_add(self, session):
@@ -178,7 +168,7 @@
         frame.set_object(session, system)
         return self.page().set_current_frame(session, frame)
 
-    def do_process(self, session, object):
+    def do_process(self, session, *args):
         if self.__logout.get(session):
             self.__logout.set(session, False)
 
@@ -201,7 +191,7 @@
 
             self.page().set_redirect_url(session, session.marshal())
 
-        super(MainFrame, self).do_process(session, object)
+        super(MainFrame, self).do_process(session, *args)
 
 class MainFrameTabs(LinkSet):
     def __init__(self, app, name):
@@ -218,33 +208,33 @@
         self.add_link(self.SystemsTab(app, "stab"))
 
     class Tab(Link):
-        def render_class(self, session, object):
+        def render_class(self, session):
             if self.parent.selection.get(session) == self.name:
                 return "selected"
 
     class MessagingTab(Tab):
-        def render_content(self, session, object):
+        def render_content(self, session):
             return "Messaging"
 
-        def edit_session(self, session, object):
+        def edit_session(self, session):
             self.parent.selection.set(session, self.name)
             frame = self.page().show_main(session).show_view(session)
             frame.show_messaging(session)
 
     class GridTab(Tab):
-        def render_content(self, session, object):
+        def render_content(self, session):
             return "Grid"
 
-        def edit_session(self, session, object):
+        def edit_session(self, session):
             self.parent.selection.set(session, self.name)
             frame = self.page().show_main(session).show_view(session)
             frame.show_grid(session)
 
     class SystemsTab(Tab):
-        def render_content(self, session, object):
+        def render_content(self, session):
             return "Systems"
 
-        def edit_session(self, session, object):
+        def edit_session(self, session):
             self.parent.selection.set(session, self.name)
             frame = self.page().show_main(session).show_view(session)
             frame.show_systems(session)
@@ -281,21 +271,21 @@
         #self.add_tab(BrokerClusterSet(app, "clusters"))
         #self.add_tab(self.TagTab(app, "tags"))
 
-    def get_title(self, session, model):
+    def render_title(self, session):
         return "Messaging"
 
-    def render_data_url(self, session, model):
+    def render_data_url(self, session):
         return "model.xml"
 
     class TagTab(Widget):
-        def get_title(self, session, model):
+        def render_title(self, session):
             return "Tags"
 
 class GridView(TabbedModeSet):
-    def get_title(self, session, model):
+    def render_title(self, session):
         return "Grid"
 
-    def render_data_url(self, session, model):
+    def render_data_url(self, session):
         return "model.xml"
 
 class SystemsView(TabbedModeSet):
@@ -304,8 +294,8 @@
 
         self.add_tab(SystemSet(app, "systems"))
 
-    def get_title(self, session, model):
+    def render_title(self, session):
         return "Systems"
 
-    def render_data_url(self, session, model):
+    def render_data_url(self, session):
         return "model.xml"

Modified: mgmt/cumin/python/cumin/queue.py
===================================================================
--- mgmt/cumin/python/cumin/queue.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/queue.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -59,7 +59,10 @@
         self.__purge = self.Purge(app, "purge", self)
         self.add_child(self.__purge)
 
-    def get_title(self, session, vhost):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
+    def render_title(self, session, *args):
         return "Queues %s" % fmt_count(Queue.select().count())
 
     def render_sql_where(self, session, vhost):
@@ -72,7 +75,7 @@
         return {"id": vhost.id}
 
     class Purge(FormButton):
-        def process_submit(self, session, object):
+        def process_submit(self, session):
             ids = self.parent.ids.get(session)
             self.parent.ids.clear(session)
 
@@ -81,11 +84,11 @@
             frame.ids.set(branch, ids)
             self.page().set_redirect_url(session, branch.marshal())
 
-        def render_content(self, session, object):
+        def render_content(self, session):
             return "Purge"
 
     class NameColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "Name"
 
         def render_content(self, session, data):
@@ -95,7 +98,7 @@
             return fmt_olink(branch, queue, name=data["name"])
 
     class ConsumersColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "Consumers"
 
         def render_content(self, session, data):
@@ -109,7 +112,7 @@
             return fmt_link(branch.marshal(), data["consumers"])
 
     class BindingsColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "Bindings"
 
         def render_content(self, session, data):
@@ -120,7 +123,7 @@
             return fmt_link(branch.marshal(), data["bindings"])
 
     class EnqueuedColumn(NullSortColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "%s Enqueued" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
@@ -131,7 +134,7 @@
             return fmt_rate(value, "", "sec")
 
     class DequeuedColumn(NullSortColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "%s Dequeued" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
@@ -142,7 +145,7 @@
             return fmt_rate(value, "", "sec")
 
     class DepthColumn(SqlTableColumn):
-        def get_title(self, session, object):
+        def render_title(self, session, data):
             return "%s Depth" % self.parent.unit.get_brief_singular(session)
 
         def get_column_key(self, session):
@@ -179,14 +182,7 @@
     def show_purge(self, session):
         return self.show_mode(session, self.purge)
 
-    # XXX not awesome
-    def get_object(self, session, object):
-        queue = self.param.get(session)
-        #queue_stat(queue, "consumers").link_cb = show_consumers
-        #queue_stat(queue, "bindings").link_cb = show_bindings
-        return queue
-
-    def get_title(self, session, queue):
+    def render_title(self, session, queue):
         if queue:
             return "Queue '%s'" % queue.name
         else:
@@ -226,7 +222,7 @@
         stat = self.app.model.queue.get_stat("byteDepth")
         return fmt_rate(stat.rate(queue), "byte", "sec")
 
-class QueueView(Widget):
+class QueueView(CuminView):
     def __init__(self, app, name):
         super(QueueView, self).__init__(app, name)
 
@@ -250,7 +246,7 @@
     def show_bindings(self, session):
         self.tabs.show_mode(session, self.bindings);
 
-    def get_title(self, session, queue):
+    def render_title(self, session, queue):
         return "Queue '%s'" % queue.name
 
     def render_data_url(self, session, queue):
@@ -275,10 +271,13 @@
         return branch.marshal()
 
 class QueueBindingSet(BindingSet):
-    def get_title(self, session, queue):
-        return "Exchange Bindings %s" % \
-            fmt_count(self.get_item_count(session, queue))
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
+    def render_title(self, session, queue):
+        count = fmt_count(self.get_item_count(session, queue))
+        return "Exchange Bindings %s" % count
+
     def get_item_count(self, session, queue):
         return queue.bindings.count()
 
@@ -309,20 +308,20 @@
         self.add_field(self.durable)
 
 class QueueAdd(QueueForm):
-    def process_cancel(self, session, object):
+    def process_cancel(self, session):
         branch = session.branch()
         self.page().pop_current_frame(branch)
         self.page().pop_current_frame(branch)
         self.page().get_current_frame(branch).show_view(branch)
         self.page().set_redirect_url(session, branch.marshal())
 
-    def process_submit(self, session, object):
+    def process_submit(self, session):
         errors = self.validate(session)
 
         if errors:
             pass
         else:
-            reg = self.frame().frame().get_object(session, None)
+            reg = self.frame().frame().get_object(session)
             vhost = reg.getDefaultVhost()
 
             name = self.namef.get(session)
@@ -330,14 +329,17 @@
 
             print "XXX add queue", name, self.durable.get(session)
             
-            self.process_cancel(session, object)
+            self.process_cancel(session)
 
-    def get_title(self, session, object):
-        reg = self.frame().frame().get_object(session, None)
+    def render_title(self, session):
+        reg = self.frame().frame().get_object(session)
         return "Add Queue to Broker '%s'" % reg.name
 
 class QueuePurge(CuminConfirmForm):
-    def get_title(self, session, queue):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
+    def render_title(self, session, queue):
         return "Purge Queue '%s'" % queue.name
 
     def process_cancel(self, session, queue):
@@ -358,10 +360,7 @@
         return "No, Cancel"
 
 class QueueSetPurge(CuminBulkActionForm):
-    def get_title(self, session, object):
-        return "Purge Queues"
-
-    def process_return(self, session, object):
+    def process_return(self, session):
         branch = session.branch()
         frame = self.frame()
         frame.show_view(branch)
@@ -373,6 +372,9 @@
         action = self.app.model.queue.purge
         action.invoke(queue)
 
+    def render_title(self, session):
+        return "Purge Queues"
+
     def render_item_content(self, session, id):
         return "Purge Queue '%s'" % Queue.get(id).name
 
@@ -385,10 +387,10 @@
 
         self.binding_key = TextInput(app, "binding_key", self)
         self.add_child(self.binding_key)
+
+    def get_args(self, session):
+        return self.frame().get_args(session)
     
-    def get_title(self, session, queue):
-        return "Add Binding to Queue '%s'" % queue.name
-
     def process_cancel(self, session, queue):
         branch = session.branch()
         self.page().show_queue(branch, queue).show_view(branch)
@@ -423,22 +425,28 @@
 
             self.process_cancel(session, queue)
 
+    def render_title(self, session, queue):
+        return "Add Binding to Queue '%s'" % queue.name
+
     class Exchanges(ExchangeInputSet):
         def do_get_items(self, session, queue):
             return sorted_by(queue.virtual_host.exchange_items())
 
 class QueueBindingRemove(CuminConfirmForm):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
     def process_cancel(self, session, binding):
         branch = session.branch()
         self.page().show_queue(branch, binding.get_queue()).show_view(branch)
         self.page().set_redirect_url(session, branch.marshal())
     
     def process_submit(self, session, binding):
-        print binding
+        print "processing", binding
         
         self.process_cancel(session, binding)
 
-    def get_title(self, session, binding):
+    def render_title(self, session, binding):
         return "Remove Binding"
 
     def render_submit_content(self, session, binding):
@@ -454,7 +462,7 @@
         self.add_tab(self.StatisticsCurrent(app, "current"))
         self.add_tab(self.StatisticsHistory(app, "history"))
 
-    def get_title(self, session, queue):
+    def render_title(self, session):
         return "Statistics"
 
     class StatisticsCurrent(Widget):
@@ -467,7 +475,7 @@
             self.add_child(StatSet(app, "persistent", "persistent"))
             self.add_child(StatSet(app, "transaction", "transaction"))
 
-        def get_title(self, session, queue):
+        def render_title(self, session):
             return "Current"
 
     class StatisticsHistory(Widget):
@@ -486,13 +494,17 @@
             chart.stats = ("consumers",)
             self.add_child(chart)
 
-        def get_title(self, session, queue):
+        def render_title(self, session):
             return "History"
 
 class QueueConsumerSet(PaginatedItemSet):
-    def get_title(self, session, queue):
-        return "Consumers %s" % fmt_count(self.get_item_count(session, queue))
+    def get_args(self, session):
+        return self.frame().get_args(session)
 
+    def render_title(self, session, queue):
+        count = fmt_count(self.get_item_count(session, queue))
+        return "Consumers %s" % count
+
     def get_item_count(self, session, queue):
         return queue.consumers.count()
 

Modified: mgmt/cumin/python/cumin/realm.py
===================================================================
--- mgmt/cumin/python/cumin/realm.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/realm.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -10,7 +10,7 @@
 strings = StringCatalog(__file__)
 
 class RealmSet(ItemSet):
-    def get_title(self, session, vhost):
+    def render_title(self, session, vhost):
         return "Realms %s" % fmt_count(len(vhost.realm_items()))
 
     def do_get_items(self, session, vhost):
@@ -30,16 +30,6 @@
     def do_get_items(self, session, vhost):
         return sorted_by(vhost.realm_items())
 
-    # just parked here
-    def do_process(self, session, queue):
-        for realm in self.get(session):
-            if realm not in queue.realm_items():
-                queue.add_realm(realm)
-
-        for realm in list(queue.realm_items()):
-            if realm not in self.get(session):
-                queue.remove_realm(realm)
-
     def render_item_value(self, session, realm):
         return realm.id
 

Modified: mgmt/cumin/python/cumin/stat.py
===================================================================
--- mgmt/cumin/python/cumin/stat.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/stat.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -23,6 +23,9 @@
         self.object = Attribute(app, "object");
         self.add_attribute(self.object);
 
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
     def do_get_items(self, session, object):
         stats = list()
         cls = self.app.model.get_class_by_object(object)
@@ -80,6 +83,9 @@
         self.duration = DurationSwitch(app, "duration")
         self.add_child(self.duration)
 
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
     def render_href(self, session, object):
         params = list()
 
@@ -103,25 +109,23 @@
 
         return "stats.png?" + ";".join(params)
 
-    def render_mode(self, session, object):
-        return self.mode
-
     def render_stats(self, session, object):
         writer = Writer()
 
         for name in self.stats:
             cls = self.app.model.get_class_by_object(object)
             stat = cls.get_stat(name)
-            self.stats_tmpl.render(session, (stat, object), writer)
+            self.stats_tmpl.render(writer, session, stat, object)
 
         return writer.to_string()
 
-    def render_stat_color(self, session, args):
+    def render_stat_mode(self, session, stat, object):
+        return self.mode
+
+    def render_stat_color(self, session, stat, object):
         return "rgb(255,0,0)"
 
-    def render_stat_value(self, session, args):
-        stat, object = args
-
+    def render_stat_value(self, session, stat, object):
         if self.mode == "rate":
             html = stat.rate_html(object)
         else:
@@ -129,8 +133,7 @@
 
         return html
 
-    def render_stat_name(self, session, args):
-        stat, object = args
+    def render_stat_name(self, session, stat, object):
         return stat.name
 
 class StatChartPage(Page):
@@ -157,17 +160,17 @@
         self.duration.default = 600
         self.add_parameter(self.duration)
 
-    def get_object(self, session, object):
-        cls = self.class_.get(session).mint_class
-        id = self.id.get(session)
-        return cls.get(id)
-
     def get_content_type(self, session):
         return "image/png"
 
     def get_cache_control(self, session):
         return "no-cache"
 
+    def get_args(self, session):
+        cls = self.class_.get(session).mint_class
+        id = self.id.get(session)
+        return (cls.get(id),)
+
     def do_render(self, session, object):
         chart = LineChart(480, 120)
 

Modified: mgmt/cumin/python/cumin/system.py
===================================================================
--- mgmt/cumin/python/cumin/system.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/system.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -25,12 +25,12 @@
         self.add_parameter(self.submit)
         self.add_form_parameter(self.submit)
 
-    def get_title(self, session, model):
+    def render_title(self, session, *args):
         count = System.select().count()
         return "Systems %s" % fmt_count(count)
 
     class NameColumn(SqlTableColumn):
-        def get_title(self, session, model):
+        def render_title(self, session, data):
             return "Name"
 
         def render_content(self, session, data):
@@ -51,7 +51,7 @@
         self.add_mode(self.view)
         self.set_view_mode(self.view)
 
-    def get_title(self, session, system):
+    def render_title(self, session, system):
         return "System '%s'" % system.sysId
 
 class SystemStatus(CuminStatus):
@@ -69,7 +69,7 @@
 
         self.tabs.add_tab(self.SystemStatsTab(app, "stats"))
 
-    def get_title(self, session, system):
+    def render_title(self, session, system):
         return "System '%s'" % system.sysId
 
     def render_created_deleted(self, session, system):
@@ -79,9 +79,9 @@
     def render_updated(self, session, system):
         return fmt_datetime(system.recTime)
 
-    def render_data_url(self, session, model):
+    def render_data_url(self, session, system):
         return "model.xml"
 
     class SystemStatsTab(Widget):
-        def get_title(self, session, broker):
+        def render_title(self, session, *args):
             return "Statistics"

Modified: mgmt/cumin/python/cumin/virtualhost.py
===================================================================
--- mgmt/cumin/python/cumin/virtualhost.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/virtualhost.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -12,11 +12,11 @@
 strings = StringCatalog(__file__)
 
 class VirtualHostSet(ItemSet):
-    def get_title(self, session, model):
+    def render_title(self, session, *args):
         return "Functional Hosts %s" % \
                fmt_count(len(model.get_virtual_hosts()))
 
-    def do_get_items(self, session, model):
+    def do_get_items(self, session, *args):
         return sorted_by(model.get_virtual_hosts())
 
     def render_item_link(self, session, vhost):
@@ -57,10 +57,10 @@
         self.client.set_object(session, client)
         return self.show_mode(session, self.client)
 
-    def get_title(self, session, vhost):
+    def render_title(self, session, vhost):
         return "Functional Host '%s'" % vhost.name
 
-class VirtualHostView(Widget):
+class VirtualHostView(CuminView):
     def __init__(self, app, name):
         super(VirtualHostView, self).__init__(app, name)
 
@@ -71,7 +71,7 @@
         self.tabs.add_tab(ExchangeSet(app, "exchanges"))
         self.tabs.add_tab(ClientSet(app, "clients"))
 
-    def get_title(self, session, vhost):
+    def render_title(self, session, vhost):
         return "Functional Host '%s'" % vhost.name
 
     def render_name(self, session, vhost):

Modified: mgmt/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/cumin/python/cumin/widgets.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/cumin/widgets.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -24,10 +24,16 @@
         self.__edit = None
         self.__remove = None
 
+    def get_args(self, session):
+        if self.__param:
+            return (self.get_object(session),)
+        else:
+            return ()
+
     def set_object_parameter(self, param):
         self.__param = param
 
-    def get_object(self, session, object):
+    def get_object(self, session):
         if self.__param:
             return self.__param.get(session)
 
@@ -66,27 +72,30 @@
 
         return mode
 
-    def do_process(self, session, object):
+    def do_process(self, session, *args):
         self.page().get_frames(session).append(self)
 
-        if self.__param:
-            self.set(session, "object", self.__param.get(session))
+        super(CuminFrame, self).do_process(session, *args)
 
-        super(CuminFrame, self).do_process(session, object)
-
-    def render_href(self, session, object):
+    def render_href(self, session, *args):
         branch = session.branch()
         self.page().set_current_frame(branch, self)
         self.show_view(branch)
         return branch.marshal()
 
 class CuminView(Widget):
-    def render_edit_href(self, session, object):
+    def get_args(self, session):
+        return (self.frame().get_object(session),)
+
+    def render_title(self, session, *args):
+        return self.frame().render_title(session, *args)
+
+    def render_edit_href(self, session, *args):
         branch = session.branch()
         self.parent.show_edit(branch)
         return branch.marshal()
 
-    def render_remove_href(self, session, object):
+    def render_remove_href(self, session, *args):
         branch = session.branch()
         self.parent.show_remove(branch)
         return branch.marshal()
@@ -103,51 +112,53 @@
         self.submit.set_tab_index(200)
         self.add_child(self.submit)
 
-    def do_process(self, session, object):
+    def do_process(self, session, *args):
         self.page().set_modal(session, True)
             
         if self.cancel.get(session):
             self.cancel.set(session, False)
 
-            self.process_cancel(session, object)
+            self.process_cancel(session, *args)
         elif self.submit.get(session):
             self.submit.set(session, False)
 
-            self.process_submit(session, object)
+            self.process_submit(session, *args)
         else:
-            self.process_display(session, object)
+            self.process_display(session, *args)
 
-    def process_cancel(self, session, object):
+    def process_cancel(self, session, *args):
         pass
 
-    def process_submit(self, session, object):
+    def process_submit(self, session, *args):
         pass
 
-    def process_display(self, session, object):
+    def process_display(self, session, *args):
         pass
 
-    def render_help_href(self, session, object):
-        return self.render_href(self, session, object)
+    def render_help_href(self, session, *args):
+        return self.render_href(self, session, *args)
 
-    def render_cancel_content(self, session, object):
+    def render_cancel_content(self, session, *args):
         return "Cancel"
 
-    def render_submit_content(self, session, object):
+    def render_submit_content(self, session, *args):
         return "Submit"
 
     class Cancel(FormButton):
-        def render_class(self, session, object):
+        def render_class(self, session, *args):
             return "cancel"
 
-        def render_content(self, session, object):
-            return self.parent.render_cancel_content(session, object)
+        def render_content(self, session, *args):
+            cargs = self.parent.get_args(session)
+            return self.parent.render_cancel_content(session, *cargs)
 
     class Submit(FormButton):
-        def render_class(self, session, object):
+        def render_class(self, session, *args):
             return "submit"
 
-        def render_content(self, session, object):
-            return self.parent.render_submit_content(session, object)
+        def render_content(self, session, *args):
+            cargs = self.parent.get_args(session)
+            return self.parent.render_submit_content(session, *cargs)
 
 class CuminFieldForm(CuminForm, FieldForm, Frame):
     pass
@@ -170,30 +181,33 @@
         self.ids = ListParameter(app, "id", param)
         self.add_parameter(self.ids)
 
-    def get_items(self, session, object):
+    def get_items(self, session, *args):
         return self.ids.get(session)
 
-    def process_submit(self, session, object):
-        items = self.get_items(session, object)
+    def process_submit(self, session, *args):
+        items = self.get_items(session, *args)
 
         for item in items:
             self.process_item(session, item)
 
-        self.process_return(session, object)
+        self.process_return(session, *args)
 
     def process_item(self, session, item):
         print "processing item", item
 
-    def process_return(self, session, object):
+    def process_return(self, session, *args):
         pass
 
-    def process_cancel(self, session, object):
-        self.process_return(session, object)
+    def process_cancel(self, session, *args):
+        self.process_return(session, *args)
 
     def render_item_content(self, session, id):
         return "Act on object %i" % id
 
 class CuminStatus(Widget):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
     def render_class(self, session, object):
         if hasattr(object, "errors"):
             if object.errors:
@@ -236,7 +250,7 @@
     def set(self, session, value):
         return self.param.set(session, value)
 
-    def get_items(self, session, object):
+    def get_items(self, session):
         return self.states
 
     def render_item_link(self, session, state):
@@ -272,7 +286,7 @@
         self.add_state("i", "Idle")
         self.add_state("d", "Deleted")
 
-    def get_sql_constraint(self, session, object):
+    def get_sql_constraint(self, session, *args):
         phase = self.get(session)
 
         if phase == "a":
@@ -325,7 +339,7 @@
         page_count = self.get_page_count(session)
         return int(ceil(page_count / float(self.pageset_size)))
 
-    def render_prev_page_link(self, session, object):
+    def render_prev_page_link(self, session, *args):
         page = self.__page.get(session)
         
         if page < 1:
@@ -342,7 +356,7 @@
 
         return html
 
-    def render_next_page_link(self, session, object):
+    def render_next_page_link(self, session, *args):
         page = self.__page.get(session)
 
         if page >= self.get_page_count(session) - 1:
@@ -359,7 +373,7 @@
 
         return html
 
-    def render_prev_pageset_link(self, session, object):
+    def render_prev_pageset_link(self, session, *args):
         pageset = self.__pageset.get(session)
 
         if pageset < 1:
@@ -371,7 +385,7 @@
 
         return html
 
-    def render_next_pageset_link(self, session, object):
+    def render_next_pageset_link(self, session, *args):
         pageset = self.__pageset.get(session)
 
         if pageset >= self.get_pageset_count(session) - 1:
@@ -383,7 +397,7 @@
 
         return html
 
-    def do_get_items(self, session, object):
+    def do_get_items(self, session, *args):
         count = self.__count.get(session)
 
         start, end = self.get_pageset_bounds(session)
@@ -413,12 +427,12 @@
     def get_connection(self, session):
         return sqlhub.getConnection().getConnection()
 
-    def do_process(self, session, object):
-        super(CuminTable, self).do_process(session, object)
+    def do_process(self, session, *args):
+        super(CuminTable, self).do_process(session, *args)
 
-        self.paginator.set_count(session, self.get_item_count(session, object))
+        self.paginator.set_count(session, self.get_item_count(session, *args))
 
-    def render_sql_limit(self, session, object):
+    def render_sql_limit(self, session, *args):
         start, end = self.paginator.get_bounds(session)
         return "limit %i offset %i" % (end - start, start)
 
@@ -437,23 +451,23 @@
         self.paginator = Paginator(app, "page")
         self.add_child(self.paginator)
 
-    def do_process(self, session, object):
-        super(PaginatedItemSet, self).do_process(session, object)
+    def do_process(self, session, *args):
+        super(PaginatedItemSet, self).do_process(session, *args)
 
-        self.paginator.set_count(session, self.get_item_count(session, object))
+        self.paginator.set_count(session, self.get_item_count(session, *args))
 
     def get_bounds(self, session):
         return self.paginator.get_bounds(session)
 
 class SQLObjectItemSet(ItemSet):
-    def get_item_count(self, session, object):
-        items = self.get_items(session, object)
+    def get_item_count(self, session, *args):
+        items = self.get_items(session, *args)
 
         if isinstance(items, SelectResults):
             return items.count()
         else:
             return super(SQLObjectItemSet, self).get_item_count \
-                (session, object)
+                (session, *args)
 
 class BrokerGroupInput(OptionInputSet):
     def __init__(self, app, name, form):
@@ -462,7 +476,7 @@
         self.set_parameter(BrokerGroupParameter(app, "param"))
         self.add_parameter(self.get_parameter())
 
-    def do_get_items(self, session, model):
+    def do_get_items(self, session):
         return list(BrokerGroup.select()) #XXX avoid list()ing this?
 
     def render_item_value(self, session, group):
@@ -475,13 +489,13 @@
     def __init__(self, app, name):
         super(BindingSet, self).__init__(app, name)
 
-    def get_title(self, session, queue):
+    def render_title(self, session, *args):
         return "Bindings"
 
-    def get_item_count(self, session, object):
+    def get_item_count(self, session, *args):
         return Binding.select().count()
 
-    def do_get_items(self, session, object):
+    def do_get_items(self, session, *args):
         start, end = self.get_bounds(session)
         return Binding.select()[start:end]
 
@@ -524,10 +538,10 @@
         return t % (name, id, attr)
 
 class CheckboxIdColumnHeader(ItemTableColumnHeader):
-    def render_form_id(self, session, object):
+    def render_form_id(self, session, *args):
         return self.column.form.path()
 
-    def render_elem_name(self, session, object):
+    def render_elem_name(self, session, *args):
         return self.column.ids.path()
 
 class NameField(StringField):
@@ -538,7 +552,7 @@
         self.illegal_chars = ""
         self.legal_chars_desc = None
 
-    def get_title(self, session, object):
+    def render_title(self, session):
         return "Name"
 
     def do_validate(self, session, errors):
@@ -569,19 +583,19 @@
         self.add_option(self.Durable(app, "durable", form))
         self.add_option(self.Transient(app, "transient", form))
 
-    def get_title(self, session, object):
+    def render_title(self, session):
         return "Durable?"
 
     class Durable(RadioFieldOption):
-        def get_value(self, session, object):
+        def render_value(self, session):
             return "durable"
 
-        def get_title(self, session, object):
+        def render_title(self, session):
             return "Durable"
 
     class Transient(RadioFieldOption):
-        def get_value(self, session, object):
+        def render_value(self, session):
             return "transient"
 
-        def get_title(self, session, object):
+        def render_title(self, session):
             return "Transient"

Modified: mgmt/cumin/python/wooly/__init__.py
===================================================================
--- mgmt/cumin/python/wooly/__init__.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/wooly/__init__.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -102,9 +102,6 @@
         
         self.__main_tmpl = Template(self, "html")
 
-        self.args = self.ArgsAttribute(app, "args")
-        self.add_attribute(self.args)
-
         self.__ancestors = None
         self.__path = None
         self.__page = None
@@ -118,11 +115,6 @@
             if cls is Widget:
                 break
 
-    class ArgsAttribute(Attribute):
-        def get_default(self, session):
-            if self.widget.parent:
-                return ArgsDict(self.widget.parent.args)
-
     def ancestors(self):
         if self.__ancestors is None:
             if self.parent is None:
@@ -210,13 +202,6 @@
             if str:
                 return str
 
-    def get(self, session, name):
-        return self.args.get(session).get(name)
-
-    def set(self, session, name, value):
-        self.args.get(session)[name] = value
-        return value
-
     def get_saved_parameters(self, session):
         params = list()
         params.extend(self.parameters)
@@ -228,66 +213,61 @@
 
         return params
 
-    def get_object(self, session, object):
-        return object
+    def get_args(self, session):
+        return ()
 
-    def process(self, session, object):
+    def process(self, session):
         if session.debug:
             call = WidgetCall(session.debug.process_stack,
-                              self, session, object)
+                              self, session, None)
             call.open()
 
-        object = self.get_object(session, object)
-        self.do_process(session, object)
+        args = self.get_args(session)
+        self.do_process(session, *args)
 
         if session.debug:
             call.close()
 
-    def do_process(self, session, object):
+    def do_process(self, session, *args):
         for child in self.children:
-            child.process(session, object)
+            child.process(session)
 
-    def render(self, session, object):
+    def render(self, session):
         if session.debug:
             call = WidgetCall(session.debug.render_stack,
-                              self, session, object)
+                              self, session, None)
             call.open()
 
-        object = self.get_object(session, object)
-        string = self.do_render(session, object)
+        args = self.get_args(session)
+        string = self.do_render(session, *args)
 
         if session.debug:
             call.close()
 
         return string
 
-    def do_render(self, session, object):
+    def do_render(self, session, *args):
         writer = Writer()
-
-        self.__main_tmpl.render(session, object, writer)
-
+        self.__main_tmpl.render(writer, session, *args)
         return writer.to_string()
 
-    def get_title(self, session, object):
-        return None
-
-    def render_id(self, session, object):
+    def render_id(self, session, *args):
         return self.path()
 
-    def render_class(self, session, object):
+    def render_class(self, session, *args):
         return self.html_class
 
-    def render_href(self, session, object):
+    def render_href(self, session, *args):
         return session.marshal()
 
-    def render_title(self, session, object):
-        return self.get_title(session, object)
+    def render_title(self, session, *args):
+        return None
 
-    def render_content(self, session, object):
+    def render_content(self, session, *args):
         writer = Writer()
 
         for child in self.children:
-           writer.write(child.render(session, object))
+           writer.write(child.render(session))
 
         return writer.to_string()
 
@@ -747,7 +727,7 @@
             if method and callable(method):
                 return method
 
-    def render(self, session, object, writer):
+    def render(self, writer, session, *args):
         if not self.fragments:
             self.fragments = self.compile()
 
@@ -755,12 +735,14 @@
             if type(elem) is str:
                 writer.write(elem)
             elif callable(elem):
-                result = elem(self.widget, session, object)
+                #print "tc", elem, args
 
+                result = elem(self.widget, session, *args)
+
                 if result is not None:
                     writer.write(str(result))
             else:
-                result = elem.render(session, object)
+                result = elem.render(session)
 
                 if result is not None:
                     writer.write(str(result))

Modified: mgmt/cumin/python/wooly/devel.py
===================================================================
--- mgmt/cumin/python/wooly/devel.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/wooly/devel.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -25,9 +25,9 @@
             session.unmarshal(url)
 
             page = session.get_page()
-            page.process(session, None)
+            page.process(session)
 
-            html = page.render(session, None)
+            html = page.render(session)
 
             bytes = len(html)
             millis = (clock() - start) * 1000
@@ -56,7 +56,7 @@
         self.add_child(self.render_trace)
 
     class RenderTrace(Widget):
-        def do_render(self, session, object):
+        def do_render(self, session):
             writer = Writer()
 
             writer.write("<ul>")

Modified: mgmt/cumin/python/wooly/forms.py
===================================================================
--- mgmt/cumin/python/wooly/forms.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/wooly/forms.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -14,7 +14,7 @@
     def add_form_parameter(self, param):
         self.form_params.add(param)
 
-    def render_hidden_inputs(self, session, object):
+    def render_hidden_inputs(self, session, *args):
         writer = Writer()
 
         params = set(session.get_page().get_saved_parameters(session))
@@ -82,16 +82,16 @@
     def set_disabled(self, disabled):
         self.disabled = disabled
 
-    def render_name(self, session, object):
+    def render_name(self, session, *args):
         return self.param.path()
 
-    def render_value(self, session, object):
+    def render_value(self, session, *args):
         return self.param.marshal(self.param.get(session))
 
-    def render_tab_index(self, session, object):
+    def render_tab_index(self, session, *args):
         return self.tab_index
 
-    def render_disabled_attr(self, session, object):
+    def render_disabled_attr(self, session, *args):
         return self.disabled and "disabled=\"disabled\"" or None
 
 class MissingValueError(Error):
@@ -119,7 +119,7 @@
     def set_size(self, size):
         self.size = size
 
-    def render_size(self, session, object):
+    def render_size(self, session, *args):
         return self.size
 
 class StringInput(TextInput):
@@ -147,7 +147,7 @@
         self.set_parameter(VoidBooleanParameter(app, "param"))
         self.add_parameter(self.get_parameter())
 
-    def render_checked_attr(self, session, object):
+    def render_checked_attr(self, session, *args):
         return self.get(session) and "checked=\"checked\""
 
 class RadioInput(FormInput):
@@ -159,16 +159,17 @@
     def xxx_set_value(self, value):
         self.value = value
 
-    def get_value(self, session, object):
+    # XXX get rid of this
+    def get_value(self, session, *args):
         pass
 
-    def render_value(self, session, object):
-        return self.get_value(session, object)
+    def render_value(self, session, *args):
+        return self.get_value(session, *args)
 
-    def render_checked_attr(self, session, object):
+    def render_checked_attr(self, session, *args):
         value = self.get(session)
 
-        if value and value == self.get_value(session, object):
+        if value and value == self.get_value(session, *args):
             return "checked=\"checked\""
 
 class FormButton(FormInput):
@@ -178,41 +179,41 @@
         self.set_parameter(BooleanParameter(app, "param"))
         self.add_parameter(self.get_parameter())
 
-    def do_process(self, session, object):
+    def do_process(self, session, *args):
         if self.get(session):
             self.set(session, False)
 
-            self.process_submit(session, object)
+            self.process_submit(session, *args)
 
-    def process_submit(self, session, object):
+    def process_submit(self, session, *args):
         pass
 
-    def render_value(self, session, object):
+    def render_value(self, session, *args):
         branch = session.branch()
 
         self.set(branch, True)
 
-        return super(FormButton, self).render_value(branch, object)
+        return super(FormButton, self).render_value(branch, *args)
 
 class CheckboxInputSet(FormInput, ItemSet):
-    def render_item_value(self, session, object):
+    def render_item_value(self, session, *args):
         return None
 
-    def render_item_checked_attr(self, session, object):
+    def render_item_checked_attr(self, session, *args):
         return None
 
 class RadioInputSet(FormInput, ItemSet):
-    def render_item_value(self, session, object):
+    def render_item_value(self, session, *args):
         return None
 
-    def render_item_checked_attr(self, session, object):
+    def render_item_checked_attr(self, session, *args):
         return None
 
 class OptionInputSet(FormInput, ItemSet):
-    def render_item_value(self, session, object):
+    def render_item_value(self, session, item):
         return None
 
-    def render_item_selected_attr(self, session, object):
+    def render_item_selected_attr(self, session, item):
         return None
 
 class FieldSet(Widget):
@@ -227,11 +228,11 @@
         self.fields.append(field)
         self.add_child(field)
 
-    def render_fields(self, session, object):
+    def render_fields(self, session, *args):
         writer = Writer()
 
         for field in self.fields:
-            writer.write(field.render(session, object))
+            writer.write(field.render(session))
 
         return writer.to_string()
 
@@ -270,9 +271,9 @@
     def do_validate(self, session, errors):
         pass
 
-    def render_errors(self, session, object):
+    def render_errors(self, session, *args):
         if self.__errors.attr.get(session):
-            return self.__errors.render(session, object)
+            return self.__errors.render(session)
 
 class FormFieldErrors(ItemSet):
     def __init__(self, app, name):
@@ -281,7 +282,7 @@
         self.attr = self.Errors(app, "attr")
         self.add_attribute(self.attr)
 
-    def get_items(self, session, object):
+    def get_items(self, session, *args):
         return self.attr.get(session)
 
     def render_item_content(self, session, item):
@@ -307,8 +308,8 @@
         self.__input = input
         return input
 
-    def render_inputs(self, session, object):
-        return self.__input.render(session, object)
+    def render_inputs(self, session, *args):
+        return self.__input.render(session)
 
 class StringField(ScalarField):
     def __init__(self, app, name, form):
@@ -339,11 +340,11 @@
         self.options.append(option)
         self.add_child(option)
 
-    def render_inputs(self, session, object):
+    def render_inputs(self, session, *args):
         writer = Writer()
 
         for option in self.options:
-            writer.write(option.render(session, object))
+            writer.write(option.render(session))
 
         return writer.to_string()
 
@@ -362,11 +363,11 @@
         self.buttons.append(button)
         self.add_child(button)
 
-    def render_buttons(self, session, object):
+    def render_buttons(self, session, *args):
         writer = Writer()
 
         for button in self.buttons:
-            writer.write(button.render(session, object))
+            writer.write(button.render(session))
 
         return writer.to_string()
 

Modified: mgmt/cumin/python/wooly/pages.py
===================================================================
--- mgmt/cumin/python/wooly/pages.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/wooly/pages.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -33,7 +33,7 @@
 
         return self.__css
 
-    def do_render(self, session, object):
+    def do_render(self, session, *args):
         return self.get_css()
 
 class JavascriptPage(Page):
@@ -67,7 +67,7 @@
 
         return self.__javascript
 
-    def do_render(self, session, object):
+    def do_render(self, session, *args):
         return self.get_javascript()
 
 class ResourcePage(Page):
@@ -97,7 +97,7 @@
 
             return type
 
-    def do_render(self, session, object):
+    def do_render(self, session, *args):
         name = self.rname.get(session)
 
         if name:

Modified: mgmt/cumin/python/wooly/server.py
===================================================================
--- mgmt/cumin/python/wooly/server.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/wooly/server.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -61,7 +61,7 @@
         page = session.get_page()
 
         try:
-            page.process(session, None)
+            page.process(session)
         except:
             return self.error(session, respond)
 
@@ -84,7 +84,7 @@
 #                 return
 
         try:
-            response = page.render(session, None)
+            response = page.render(session)
         except:
             return self.error(session, respond)
 

Modified: mgmt/cumin/python/wooly/tables.py
===================================================================
--- mgmt/cumin/python/wooly/tables.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/wooly/tables.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -47,21 +47,21 @@
     def is_reversed(self, session):
         return self.reversed.get(session)
 
-    def do_get_items(self, session, object):
+    def do_get_items(self, session, *args):
         """Gets the rows"""
 
         return None
 
-    def render_count(self, session, object):
-        count = self.get_item_count(session, object)
+    def render_count(self, session, *args):
+        count = self.get_item_count(session, *args)
         return "%i %s" % (count, count == 1 and "item" or "items")
 
-    def render_headers(self, session, object):
+    def render_headers(self, session, *args):
         writer = Writer()
 
         for column in self.columns:
             header = self.headers_by_column[column]
-            writer.write(header.render(session, object))
+            writer.write(header.render(session))
 
         return writer.to_string()
 
@@ -69,11 +69,12 @@
         writer = Writer()
 
         for col in self.columns:
-            writer.write(col.render(session, item))
+            col.set_item(session, item)
+            writer.write(col.render(session))
 
         return writer.to_string()
 
-    def render_none(self, session, object):
+    def render_none(self, session, *args):
         """For producing a message when the table is empty"""
         
         return None
@@ -85,6 +86,15 @@
         self.header_class = ItemTableColumnHeader
         self.alignment = None
 
+        self.__item = Attribute(app, "item")
+        self.add_attribute(self.__item)
+
+    def set_item(self, session, item):
+        return self.__item.set(session, item)
+
+    def get_args(self, session):
+        return (self.__item.get(session),)
+
     def get_column_key(self, session):
         return self.name
 
@@ -108,7 +118,7 @@
 
         self.column = column
 
-    def render_href(self, session, object):
+    def render_href(self, session, *args):
         branch = session.branch()
 
         sel = self.parent.get_selected_column(session)
@@ -121,13 +131,14 @@
 
         return branch.marshal()
 
-    def render_content(self, session, object):
-        return self.column.get_title(session, object)
+    def render_content(self, session, *args):
+        cargs = self.column.get_args(session)
+        return self.column.render_title(session, *cargs)
 
-    def render_class_attr(self, session, object):
+    def render_class_attr(self, session, *args):
         return self.column.get_class_attr(session)
 
-    def render_sort_arrow(self, session, object):
+    def render_sort_arrow(self, session, *args):
         sel = self.parent.get_selected_column(session)
 
         if sel is self.column:
@@ -143,9 +154,9 @@
         self.__sql_tmpl = Template(self, "sql")
         self.__count_sql_tmpl = Template(self, "count_sql")
 
-    def render_sql(self, session, object):
+    def render_sql(self, session, *args):
         writer = Writer()
-        self.__sql_tmpl.render(session, object, writer)
+        self.__sql_tmpl.render(writer, session, *args)
         sql = writer.to_string()
 
         #print "sql -----------------------"
@@ -153,20 +164,20 @@
 
         return sql
 
-    def render_sql_where(self, session, object):
+    def render_sql_where(self, session, *args):
         pass
 
-    def render_sql_orderby(self, session, object):
+    def render_sql_orderby(self, session, *args):
         scol = self.get_selected_column(session)
 
         return scol.get_orderby_sql(session)
 
-    def render_sql_limit(self, session, object):
+    def render_sql_limit(self, session, *args):
         return None
 
-    def render_count_sql(self, session, object):
+    def render_count_sql(self, session, *args):
         writer = Writer()
-        self.__count_sql_tmpl.render(session, object, writer)
+        self.__count_sql_tmpl.render(writer, session, *args)
         sql = writer.to_string()
 
         #print "sql -----------------------"
@@ -184,32 +195,32 @@
 
         return writer.to_string()
 
-    def get_sql_values(self, session, object):
+    def get_sql_values(self, session, *args):
         return None
 
     def get_connection(self, session):
         pass
 
-    def get_item_count(self, session, object):
+    def get_item_count(self, session, *args):
         conn = self.get_connection(session)
 
         if conn:
             cursor = conn.cursor()
-            sql = self.render_count_sql(session, object)
-            sql_values = self.get_sql_values(session, object)
+            sql = self.render_count_sql(session, *args)
+            sql_values = self.get_sql_values(session, *args)
 
             cursor.execute(sql, sql_values)
             data = cursor.fetchone()
 
             return data[0]
 
-    def do_get_items(self, session, object):
+    def do_get_items(self, session, *args):
         conn = self.get_connection(session)
 
         if conn:
             cursor = conn.cursor()
-            sql = self.render_sql(session, object)
-            sql_values = self.get_sql_values(session, object)
+            sql = self.render_sql(session, *args)
+            sql_values = self.get_sql_values(session, *args)
 
             #print "SQL TEXT", sql
             #print "SQL VALS", sql_values
@@ -218,8 +229,8 @@
 
             return cursor
 
-    def render_items(self, session, object):
-        cursor = self.get_items(session, object)
+    def render_items(self, session, *args):
+        cursor = self.get_items(session, *args)
         cols = [spec[0] for spec in cursor.description]
         data = dict()
 
@@ -229,7 +240,7 @@
             for col, datum in zip(cols, tuple):
                 data[col] = datum
 
-            self.item_tmpl.render(session, data, writer)
+            self.item_tmpl.render(writer, session, data)
 
         return writer.to_string()
 
@@ -237,7 +248,8 @@
         writer = Writer()
 
         for col in self.columns:
-            writer.write(col.render(session, data))
+            col.set_item(session, data)
+            writer.write(col.render(session))
 
         return writer.to_string()
 

Modified: mgmt/cumin/python/wooly/widgets.py
===================================================================
--- mgmt/cumin/python/wooly/widgets.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/cumin/python/wooly/widgets.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -32,17 +32,17 @@
 
         return mode
 
-    def do_process(self, session, object):
+    def do_process(self, session, *args):
         mode = self.get_selected_mode(session)
 
         if mode:
-            mode.process(session, object)
+            mode.process(session)
 
-    def render_mode(self, session, object):
+    def render_mode(self, session, *args):
         mode = self.get_selected_mode(session)
 
         if mode:
-            return mode.render(session, object)
+            return mode.render(session)
 
 class TabbedModeSet(ModeSet):
     def __init__(self, app, name):
@@ -51,34 +51,30 @@
         self.__tabs = list()
         self.__tab_tmpl = Template(self, "tab_html")
 
-        self.object = Attribute(app, "object")
-        self.add_attribute(self.object)
-
     def add_tab(self, tab):
         self.__tabs.append(tab)
-
         self.add_mode(tab)
 
-    def render_tabs(self, session, object):
-        self.object.set(session, object)
+    def render_tabs(self, session, *args):
         writer = Writer()
 
         for tab in self.__tabs:
-            self.__tab_tmpl.render(session, tab, writer)
+            self.__tab_tmpl.render(writer, session, tab)
 
         return writer.to_string()
 
-    def render_tab_href(self, session, mode):
+    def render_tab_href(self, session, tab):
         branch = session.branch()
-        self.set_selected_mode(branch, mode)
+        self.set_selected_mode(branch, tab)
         return branch.marshal()
 
-    def render_tab_class(self, session, mode):
-        smode = self.get_selected_mode(session)
-        return smode == mode and "selected" or ""
+    def render_tab_class(self, session, tab):
+        stab = self.get_selected_mode(session)
+        return stab is tab and "selected" or ""
 
-    def render_tab_content(self, session, mode):
-        return mode.get_title(session, self.object.get(session))
+    def render_tab_content(self, session, tab):
+        args = tab.get_args(session)
+        return tab.render_title(session, *args)
 
 class LinkSet(Widget):
     def __init__(self, app, name):
@@ -91,33 +87,32 @@
         self.__links.append(link)
         self.add_child(link)
 
-    def get_links(self, session, object):
+    def get_links(self, session):
         return self.__links
 
-    def render_links(self, session, object):
+    def render_links(self, session, *args):
         writer = Writer()
 
-        for link in self.get_links(session, object):
-            self.__link_tmpl.render(session, (link, object), writer)
+        for link in self.get_links(session):
+            self.__link_tmpl.render(writer, session, link)
 
         return writer.to_string()
 
-    def render_link(self, session, args):
-        link, object = args
-        return link.render(session, object)
+    def render_link(self, session, link):
+        return link.render(session)
 
 class Link(Widget):
-    def render_class(self, session, object):
+    def render_class(self, session, *args):
+        print "args", self.get_args(session)
+
         return self.html_class
 
-    def edit_session(self, session, object):
+    def edit_session(self, session, *args):
         pass
 
-    def render_href(self, session, object):
+    def render_href(self, session, *args):
         branch = session.branch()
-
-        self.edit_session(branch, object)
-        
+        self.edit_session(branch, *args)
         return branch.marshal()
 
 class Toggle(Link):
@@ -133,19 +128,19 @@
     def set(self, session, toggled):
         self.toggled.set(session, toggled)
 
-    def do_process(self, session, object):
+    def do_process(self, session, *args):
         if self.get(session):
-            self.on_click(session, object)
+            self.on_click(session, *args)
 
-    def on_click(self, session, object):
+    def on_click(self, session, *args):
         pass
 
-    def render_href(self, session, object):
+    def render_href(self, session, *args):
         branch = session.branch()
         self.set(branch, not self.get(session))
         return branch.marshal()
 
-    def render_state(self, session, object):
+    def render_state(self, session, *args):
         return self.toggled.get(session) and "on" or "off"
 
 class ItemSet(Widget):
@@ -157,52 +152,52 @@
 
         self.item_tmpl = Template(self, "item_html")
 
-    def get_item_count(self, session, object):
-        return len(self.get_items(session, object))
+    def get_item_count(self, session, *args):
+        return len(self.get_items(session, *args))
 
-    def get_items(self, session, object):
+    def get_items(self, session, *args):
         items = self.items.get(session)
 
         if items is None:
-            items = self.do_get_items(session, object)
+            items = self.do_get_items(session, *args)
             
             if items is None:
                 items = ()
 
         return items
 
-    def do_get_items(self, session, object):
+    def do_get_items(self, session, *args):
         return ()
 
-    def render_items(self, session, object):
-        items = self.get_items(session, object)
+    def render_items(self, session, *args):
+        items = self.get_items(session, *args)
         writer = Writer()
 
         for item in items:
-            self.item_tmpl.render(session, item, writer)
+            self.item_tmpl.render(writer, session, item)
 
         return writer.to_string()
 
     def render_item_content(self, session, item):
         return None
 
-    def render_none(self, session, object):
+    def render_none(self, session, *args):
         """For producing a message when the set is empty"""
         
         return None
 
 class ItemTree(ItemSet):
-    def get_items(self, session, object):
+    def get_items(self, session, *args):
         """Get the root items"""
         pass
     
-    def get_child_items(self, session, object):
+    def get_child_items(self, session, *args):
         pass
 
-    def render_child_items(self, session, object):
+    def render_child_items(self, session, *args):
         writer = Writer()
         
-        for child in self.get_child_items(session, object):
-            self.item_tmpl.render(session, child, writer)
+        for child in self.get_child_items(session, *args):
+            self.item_tmpl.render(writer, session, child)
 
         return writer.to_string()

Modified: mgmt/misc/boneyard.py
===================================================================
--- mgmt/misc/boneyard.py	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/misc/boneyard.py	2008-03-19 12:59:51 UTC (rev 1773)
@@ -11,13 +11,16 @@
         self.servers = self.BrowserServers(app, "servers")
         self.add_child(self.servers)
 
-    def get_object(self, session, object):
+    def get_args(self, session):
+        return self.frame().get_args(session)
+
+    def get_object(self, session):
         return self.param.get(session)
 
     def set_object(self, session, group):
         return self.param.set(session, group)
 
-    def get_title(self, session, group):
+    def render_title(self, session, group):
         return "Servers %s" % fmt_count(len(self.app.model.get_servers()))
 
     def render_all_servers_link(self, session, group):
@@ -60,7 +63,7 @@
             writer = Writer()
 
             for type in self.get_items(session, model):
-                self.type_tmpl.render(session, type, writer)
+                self.type_tmpl.render(writer, session, type)
 
             return writer.to_string()
 
@@ -71,7 +74,7 @@
             writer = Writer()
             
             for group in sorted_by(type.server_group_items()):
-                self.group_tmpl.render(session, group, writer)
+                self.group_tmpl.render(writer, session, group)
 
             return writer.to_string()
 
@@ -126,13 +129,13 @@
             branch = session.branch()
             return branch.marshal()
 
-    def render_view(self, session, model):
+    def render_view(self, session, *args):
         object = self.param.get(session)
 
         if object:
-            html = self.view.render(session, object)
+            html = self.view.render(session)
         else:
-            html = self.render_none(session, model)
+            html = self.render_none(session, *args)
 
         return html
 
@@ -176,10 +179,10 @@
         self.lvalue = TextInput(app, "local_value", self)
         self.add_child(self.lvalue)
 
-    def get_title(self, session, prop):
+    def render_title(self, session, prop):
         return "Edit Property '%s'" % prop.name
 
-    def get_object(self, session, object):
+    def get_object(self, session):
         return self.param.get(session)
 
     def set_config_property(self, session, prop):
@@ -210,7 +213,7 @@
         self.lvalue.set(session, prop.value)
 
 class BrokerConfigTab(ConfigPropertySet):
-    def get_title(self, session, broker):
+    def render_title(self, session, broker):
         return "Configuration"
 
     def do_get_items(self, session, broker):

Modified: mgmt/notes/justin-todo.txt
===================================================================
--- mgmt/notes/justin-todo.txt	2008-03-18 09:00:14 UTC (rev 1772)
+++ mgmt/notes/justin-todo.txt	2008-03-19 12:59:51 UTC (rev 1773)
@@ -1,5 +1,7 @@
 Current
 
+ * Bind to localhost by default, and add config param
+
  * Tables: Make null values in tables dashes, not zeroes
 
  * Get rid of single object confirms




More information about the rhmessaging-commits mailing list