Author: tmckay
Date: 2012-02-10 16:17:35 +0000 (Fri, 10 Feb 2012)
New Revision: 5212
Modified:
trunk/cumin/python/cumin/account/widgets.py
trunk/cumin/python/cumin/grid/job.py
trunk/cumin/python/cumin/grid/job.strings
trunk/cumin/python/cumin/grid/pool.strings
trunk/cumin/python/cumin/objectselector.strings
trunk/cumin/python/cumin/task.py
trunk/cumin/python/cumin/task.strings
trunk/cumin/python/cumin/widgets.py
trunk/cumin/python/cumin/widgets.strings
trunk/wooly/python/wooly/__init__.py
trunk/wooly/python/wooly/__init__.strings
Log:
Refactoring after the extension of the TaskInvocationSet mechanism to
allow general notices.
* Change names "TaskInvocationXXX" to "NotificationXXX" to reflect
generality
* Change related method names
* Move classes out of task.py into cumin/widgets.py.
Modified: trunk/cumin/python/cumin/account/widgets.py
===================================================================
--- trunk/cumin/python/cumin/account/widgets.py 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/cumin/python/cumin/account/widgets.py 2012-02-10 16:17:35 UTC (rev 5212)
@@ -216,8 +216,9 @@
if not self.errors.get(session):
# Just use a notice here to spoof a task completion.
- session.add_notice(preamble="Password changed",
message="OK",
- capitalize=False)
+ session.add_notice(Notice(preamble="Password changed",
+ message="OK",
+ capitalize=False))
url = self.return_url.get(session)
self.page.redirect.set(session, url)
Modified: trunk/cumin/python/cumin/grid/job.py
===================================================================
--- trunk/cumin/python/cumin/grid/job.py 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/cumin/python/cumin/grid/job.py 2012-02-10 16:17:35 UTC (rev 5212)
@@ -16,7 +16,7 @@
from wooly import Widget, Parameter, Attribute
from wooly.util import StringCatalog, Writer, escape_amp, escape_entity
from wooly.forms import Form, FormButton, StringField
-from wooly.widgets import ModeSet, PropertySet, TemplateRenderer
+from wooly.widgets import ModeSet, PropertySet, TemplateRenderer, Notice
from wooly.template import WidgetTemplate
from wooly.parameters import ListParameter, IntegerParameter, DictParameter
@@ -304,7 +304,7 @@
frame.view.show(nsession)
submission_list_url = nsession.marshal()
self.page.redirect.set(session, submission_list_url)
- session.add_notice("The submission being displayed became
unavailable")
+ session.add_notice(Notice("The submission being displayed became
unavailable"))
else:
return super(JobSelectorTable, self).do_render(session)
@@ -647,7 +647,7 @@
frame.view.show(nsession)
submission_list_url = nsession.marshal()
self.page.redirect.set(session, submission_list_url)
- session.add_notice("The submission being displayed became
unavailable")
+ session.add_notice(Notice("The submission being displayed became
unavailable"))
else:
return super(JobAdsViewer, self).do_render(session)
Modified: trunk/cumin/python/cumin/grid/job.strings
===================================================================
--- trunk/cumin/python/cumin/grid/job.strings 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/cumin/python/cumin/grid/job.strings 2012-02-10 16:17:35 UTC (rev 5212)
@@ -55,7 +55,7 @@
</table>
[JobAdsGroups.error_html]
-<div class="TaskInvocationSet">
+<div class="NotificationSet">
<ul>
<li>{error_msg}</li>
</ul>
@@ -171,7 +171,7 @@
[JobSelectorTable.error_html]
<div id="{id}">
- <div class="TaskInvocationSet">
+ <div class="NotificationSet">
<ul>
<li>{error_msg}</li>
</ul>
Modified: trunk/cumin/python/cumin/grid/pool.strings
===================================================================
--- trunk/cumin/python/cumin/grid/pool.strings 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/cumin/python/cumin/grid/pool.strings 2012-02-10 16:17:35 UTC (rev 5212)
@@ -1,7 +1,7 @@
[PoolView.error_html]
<div id="{id}" class="{class}">
{heading}
- <div class="TaskInvocationSet">
+ <div class="NotificationSet">
<ul>
<li>
<b>Collector not found.</b>
Modified: trunk/cumin/python/cumin/objectselector.strings
===================================================================
--- trunk/cumin/python/cumin/objectselector.strings 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/cumin/python/cumin/objectselector.strings 2012-02-10 16:17:35 UTC (rev 5212)
@@ -151,7 +151,7 @@
<div class="{class}"><span>Save to CSV file</span> <a
href="{href}"><img src="resource?name=save.png" alt="save
as csv" title="Save table as CSV file" valign="middle"
border="0"/></a></div>
[ObjectQmfSelector.css]
-div.TaskInvocationSet ul {
+div.NotificationSet ul {
list-style-type: none;
}
@@ -178,7 +178,7 @@
[ObjectQmfSelector.error_html]
<div id="{id}">
- <div class="TaskInvocationSet">
+ <div class="NotificationSet">
<ul>
<li>{error_msg} {details}</li>
</ul>
Modified: trunk/cumin/python/cumin/task.py
===================================================================
--- trunk/cumin/python/cumin/task.py 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/cumin/python/cumin/task.py 2012-02-10 16:17:35 UTC (rev 5212)
@@ -121,7 +121,7 @@
def __init__(self, task, session):
self.task = task
- session.add_task(self)
+ session.add_notice(self)
self.user = session.get_user()
@@ -226,81 +226,6 @@
self.end()
return completion
-class TaskInvocationSet(Widget):
- def __init__(self, app, name):
- super(TaskInvocationSet, self).__init__(app, name)
-
- self.update_enabled = True
-
- self.dismiss = IntegerParameter(app, "dismiss")
- self.add_parameter(self.dismiss)
-
- self.dismiss_all = BooleanParameter(app, "dismiss_all")
- self.add_parameter(self.dismiss_all)
-
- self.item_widget = TaskInvocationItem(app, "item")
- self.add_child(self.item_widget)
-
- def get_items(self, session):
- items = [x for x in session.get_task_invocations() if not x.dismissed]
- return items
-
- def do_process(self, session):
- super(TaskInvocationSet, self).do_process(session)
-
- dismiss = self.dismiss.get(session)
- dismiss_all = self.dismiss_all.get(session)
-
- if dismiss_all:
- for invoc in self.get_items(session):
- invoc.dismissed = True
-# We're leaking task invocations during the login session.
-# Replace the loop with the following at a later date
-# items[:] = []
- self.dismiss_all.set(session, self.dismiss_all.default)
-
- if dismiss:
- for invoc in self.get_items(session):
- if id(invoc) == dismiss:
- invoc.dismissed = True
- break
-# We're leaking task invocations during the login session.
-# Replace the loop with the following at a later date
-# items[:] = [x for x in items if id(x) != dismiss]
- self.dismiss.set(session, self.dismiss.default)
-
-
- def do_render(self, session):
- items = self.get_items(session)
-
- if items:
- return super(TaskInvocationSet, self).do_render(session)
-
- def render_items(self, session):
- writer = Writer()
-
- for item in self.get_items(session):
- writer.write(self.item_widget.render(session, item))
-
- return writer.to_string()
-
- def render_dismiss_all_href(self, session):
- branch = session.branch()
- self.dismiss_all.set(branch, True)
- return branch.marshal()
-
-class TaskInvocationItem(Widget):
- def render_icon_href(self, session, item):
- return "resource?name=add-20.png"
-
- def render_message(self, session, item):
- return item.get_message(session)
-
- def render_dismiss_href(self, session, item):
- branch = session.branch()
- self.parent.dismiss.set(branch, id(item))
- return branch.marshal()
-
class TaskLink(Link):
def __init__(self, app, name, task, object=None):
super(TaskLink, self).__init__(app, name)
Modified: trunk/cumin/python/cumin/task.strings
===================================================================
--- trunk/cumin/python/cumin/task.strings 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/cumin/python/cumin/task.strings 2012-02-10 16:17:35 UTC (rev 5212)
@@ -1,35 +1,3 @@
-[TaskInvocationSet.css]
-div.TaskInvocationSet {
- background-color: #fe0;
- padding: 1em 2em;
- -moz-border-radius: 0.5em;
- -webkit-border-radius: 0.5em;
- margin: 0.5em auto 1em auto;
- width: 80%;
-}
-
-div.TaskInvocationSet ul {
- margin: 0;
- padding: 0 0 0 1em;
-}
-
-div.TaskInvocationSet a.dismiss {
- float: right;
- font-size: 0.9em;
-}
-
-[TaskInvocationSet.html]
-<div id="{id}" class="{class}">
- <a class="dismiss" href="{dismiss_all_href}">Dismiss all
notifications</a><br/>
- <ul>{items}</ul>
-</div>
-
-[TaskInvocationItem.html]
-<li>
- <a class="dismiss" href="{dismiss_href}">Dismiss</a>
- {message}
-</li>
-
[SelectionList.css]
ul.SelectionList {
list-style: none;
Modified: trunk/cumin/python/cumin/widgets.py
===================================================================
--- trunk/cumin/python/cumin/widgets.py 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/cumin/python/cumin/widgets.py 2012-02-10 16:17:35 UTC (rev 5212)
@@ -37,8 +37,8 @@
def __init__(self, app, name):
super(CuminMainView, self).__init__(app, name)
- self.tasks = TaskInvocationSet(app, "tasks")
- self.add_child(self.tasks)
+ self.notifications = NotificationSet(app, "notifications")
+ self.add_child(self.notifications)
self.heartbeat = CuminHeartBeat(app, "heartbeat")
self.add_child(self.heartbeat)
@@ -47,7 +47,7 @@
self.add_child(self.links)
def do_process(self, session, *args):
- self.tasks.process(session)
+ self.notifications.process(session)
self.heartbeat.process(session)
self.links.process(session)
@@ -1200,8 +1200,83 @@
self.created = datetime.now()
- self.task_invocations = list()
+ self.notifications = list()
+class NotificationSet(Widget):
+ def __init__(self, app, name):
+ super(NotificationSet, self).__init__(app, name)
+
+ self.update_enabled = True
+
+ self.dismiss = IntegerParameter(app, "dismiss")
+ self.add_parameter(self.dismiss)
+
+ self.dismiss_all = BooleanParameter(app, "dismiss_all")
+ self.add_parameter(self.dismiss_all)
+
+ self.item_widget = NotificationItem(app, "item")
+ self.add_child(self.item_widget)
+
+ def get_items(self, session):
+ items = [x for x in session.get_notifications() if not x.dismissed]
+ return items
+
+ def do_process(self, session):
+ super(NotificationSet, self).do_process(session)
+
+ dismiss = self.dismiss.get(session)
+ dismiss_all = self.dismiss_all.get(session)
+
+ if dismiss_all:
+ for invoc in self.get_items(session):
+ invoc.dismissed = True
+# We're leaking task invocations during the login session.
+# Replace the loop with the following at a later date
+# items[:] = []
+ self.dismiss_all.set(session, self.dismiss_all.default)
+
+ if dismiss:
+ for invoc in self.get_items(session):
+ if id(invoc) == dismiss:
+ invoc.dismissed = True
+ break
+# We're leaking task invocations during the login session.
+# Replace the loop with the following at a later date
+# items[:] = [x for x in items if id(x) != dismiss]
+ self.dismiss.set(session, self.dismiss.default)
+
+
+ def do_render(self, session):
+ items = self.get_items(session)
+
+ if items:
+ return super(NotificationSet, self).do_render(session)
+
+ def render_items(self, session):
+ writer = Writer()
+
+ for item in self.get_items(session):
+ writer.write(self.item_widget.render(session, item))
+
+ return writer.to_string()
+
+ def render_dismiss_all_href(self, session):
+ branch = session.branch()
+ self.dismiss_all.set(branch, True)
+ return branch.marshal()
+
+class NotificationItem(Widget):
+ def render_icon_href(self, session, item):
+ return "resource?name=add-20.png"
+
+ def render_message(self, session, item):
+ return item.get_message(session)
+
+ def render_dismiss_href(self, session, item):
+ branch = session.branch()
+ self.parent.dismiss.set(branch, id(item))
+ return branch.marshal()
+
class CuminPage(HtmlPage):
def __init__(self, app, name):
super(CuminPage, self).__init__(app, name)
@@ -1258,7 +1333,7 @@
# If we have an exception from a missing object, redirect to the
# main page with a notice instead of using the not_found_tmpl below
if type(e) is RosemaryNotFound:
- session.add_notice("An object being displayed became unavailable")
+ session.add_notice(Notice("An object being displayed became
unavailable"))
return "index.html"
def render_error(self, session):
Modified: trunk/cumin/python/cumin/widgets.strings
===================================================================
--- trunk/cumin/python/cumin/widgets.strings 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/cumin/python/cumin/widgets.strings 2012-02-10 16:17:35 UTC (rev 5212)
@@ -180,7 +180,7 @@
</div>
<div id="body">
- {tasks}
+ {notifications}
{heartbeat}
@@ -329,7 +329,7 @@
width: 100%;
border-collapse: collapse;
}
-
+
table.CuminDetails > tbody > tr > td {
width: 50%;
padding: 0.5em;
@@ -953,3 +953,34 @@
</td>
</tr>
+[NotificationSet.css]
+div.NotificationSet {
+ background-color: #fe0;
+ padding: 1em 2em;
+ -moz-border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ margin: 0.5em auto 1em auto;
+ width: 80%;
+}
+
+div.NotificationSet ul {
+ margin: 0;
+ padding: 0 0 0 1em;
+}
+
+div.NotificationSet a.dismiss {
+ float: right;
+ font-size: 0.9em;
+}
+
+[NotificationSet.html]
+<div id="{id}" class="{class}">
+ <a class="dismiss" href="{dismiss_all_href}">Dismiss all
notifications</a><br/>
+ <ul>{items}</ul>
+</div>
+
+[NotificationItem.html]
+<li>
+ <a class="dismiss" href="{dismiss_href}">Dismiss</a>
+ {message}
+</li>
\ No newline at end of file
Modified: trunk/wooly/python/wooly/__init__.py
===================================================================
--- trunk/wooly/python/wooly/__init__.py 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/wooly/python/wooly/__init__.py 2012-02-10 16:17:35 UTC (rev 5212)
@@ -825,24 +825,17 @@
name, value = crumb.split("=", 1)
self.cookies_by_name[name.strip()] = (False, value.strip(), None)
- def add_notice(self, message, preamble="Notice", capitalize=True):
+ def add_notice(self, notice):
try:
- t =
self.client_session.attributes["login_session"].task_invocations
- t.append(Notice(preamble, message, capitalize))
+ n = self.client_session.attributes["login_session"].notifications
+ n.append(notice)
except:
pass
- def add_task(self, task):
+ def get_notifications(self):
try:
- t =
self.client_session.attributes["login_session"].task_invocations
- t.append(task)
+ return
self.client_session.attributes["login_session"].notifications
except:
- pass
-
- def get_task_invocations(self):
- try:
- return
self.client_session.attributes["login_session"].task_invocations
- except:
return []
def get_user(self):
@@ -853,7 +846,7 @@
(self.__class__.__name__, self.trunk, self.app, id(self))
class Notice(object):
- def __init__(self, preamble, message, capitalize):
+ def __init__(self, message, preamble="Notice", capitalize=True):
self.dismissed = False
if capitalize:
message = message.capitalize()
Modified: trunk/wooly/python/wooly/__init__.strings
===================================================================
--- trunk/wooly/python/wooly/__init__.strings 2012-02-09 21:04:31 UTC (rev 5211)
+++ trunk/wooly/python/wooly/__init__.strings 2012-02-10 16:17:35 UTC (rev 5212)
@@ -6,7 +6,7 @@
[Widget.nocontent]
<div id="{id}">
- <div class="TaskInvocationSet">
+ <div class="NotificationSet">
<ul>
<li>{error_msg}</li>
</ul>