r4446 - in trunk/cumin/python/cumin: . grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-01-03 17:59:05 +0000 (Mon, 03 Jan 2011)
New Revision: 4446
Modified:
trunk/cumin/python/cumin/grid/job.py
trunk/cumin/python/cumin/grid/job.strings
trunk/cumin/python/cumin/objectselector.py
Log:
Fix exception in cumin when submission is selected.
Modified: trunk/cumin/python/cumin/grid/job.py
===================================================================
--- trunk/cumin/python/cumin/grid/job.py 2010-12-23 20:14:11 UTC (rev 4445)
+++ trunk/cumin/python/cumin/grid/job.py 2011-01-03 17:59:05 UTC (rev 4446)
@@ -216,12 +216,8 @@
self.job_id_column.visible = False
self.add_column(self.job_id_column)
- self.error_tmpl = WidgetTemplate(self, "error_html")
- self.qmf_response = Attribute(app, "qmf_response")
- self.add_attribute(self.qmf_response)
+ #self.add_search_filter(cls.GlobalJobId)
- self.add_search_filter(cls.GlobalJobId)
-
JobSelectionHold(app, self, "held")
JobSelectionRelease(app, self, "released")
JobSelectionRemove(app, self, "removed")
@@ -236,16 +232,67 @@
(app, "id", cls.JobId, self.ids)
self.add_column(self.checkbox_column)
+ def create_table(self, app, name, cls):
+ return JobSelectorTable(app, name, cls)
+
def render_dynamic_header(self, session):
values = self.get_data_values(session)
- count = self.adapter.get_count(values)
- max_sort = self.adapter.max_sortable_records
+ count = self.table.adapter.get_count(values)
+ max_sort = self.table.adapter.max_sortable_records
return count <= max_sort
+ def do_render(self, session):
+ if self.table.is_exception(session):
+ return self.table.render(session)
+
+ return super(JobSelector, self).do_render(session)
+
def render_title(self, session):
return "Jobs"
+ class JobIdColumn(DynamicSortableObjectLinkColumn):
+ def render_cell_href(self, session, record):
+ if len(record) == 0:
+ return ""
+ job_id = record[self.parent.parent.job_id_column.field.index]
+ #frame = self.page.page_widgets_by_path[self.frame_path]
+ frame = self.table.parent.frame.job
+
+ submission = self.parent.parent.submission.get(session)
+ return frame.get_href(session, submission._id, job_id)
+
+class JobSelectorTable(ObjectSelectorTable):
+ def __init__(self, app, name, cls):
+ super(JobSelectorTable, self).__init__(app, name, cls)
+
+ self.error_tmpl = WidgetTemplate(self, "error_html")
+ self.qmf_response = Attribute(app, "qmf_response")
+ self.add_attribute(self.qmf_response)
+
+ def get_data_values(self, session):
+ values = super(JobSelectorTable, self).get_data_values(session)
+
+ submission = self.parent.submission.get(session)
+
+ if submission:
+ values['obj'] = submission
+ values['args'] = ()
+ return values
+
+ def get_data(self, session):
+ values = self.get_data_values(session)
+ options = self.get_data_options(session)
+
+ results, qmf_response = self.adapter.get_data(values, options)
+ self.qmf_response.set(session, qmf_response)
+ return results
+
+ def is_exception(self, session):
+ self.get_data(session)
+ qmf_response = self.qmf_response.get(session)
+ return qmf_response.exception and True or False
+
def do_render(self, session):
# determine if there is an error getting the data
# and show an error message
@@ -257,38 +304,11 @@
self.error_tmpl.render(writer, session, msg)
return writer.to_string()
- return super(JobSelector, self).do_render(session)
+ return super(JobSelectorTable, self).do_render(session)
- def get_data(self, session):
- values = self.get_data_values(session)
- options = self.get_data_options(session)
-
- results, qmf_response = self.adapter.get_data(values, options)
- self.qmf_response.set(session, qmf_response)
- return results
-
def render_error_msg(self, session, msg):
return msg
- def get_data_values(self, session):
- values = super(JobSelector, self).get_data_values(session)
-
- submission = self.submission.get(session)
-
- if submission:
- values['obj'] = submission
- values['args'] = ()
- return values
-
- class JobIdColumn(DynamicSortableObjectLinkColumn):
- def render_cell_href(self, session, record):
- job_id = record[self.parent.job_id_column.field.index]
- #frame = self.page.page_widgets_by_path[self.frame_path]
- frame = self.table.frame.job
-
- submission = self.parent.submission.get(session)
- return frame.get_href(session, submission._id, job_id)
-
class JobObjectSelectorTask(ObjectSelectorTask):
def __init__(self, app, selector, verb):
super(JobObjectSelectorTask, self).__init__(app, selector)
Modified: trunk/cumin/python/cumin/grid/job.strings
===================================================================
--- trunk/cumin/python/cumin/grid/job.strings 2010-12-23 20:14:11 UTC (rev 4445)
+++ trunk/cumin/python/cumin/grid/job.strings 2011-01-03 17:59:05 UTC (rev 4446)
@@ -173,7 +173,7 @@
{loading}
</textarea>
-[JobSelector.error_html]
+[JobSelectorTable.error_html]
<div id="{id}">
<div class="TaskInvocationSet">
<ul>
Modified: trunk/cumin/python/cumin/objectselector.py
===================================================================
--- trunk/cumin/python/cumin/objectselector.py 2010-12-23 20:14:11 UTC (rev 4445)
+++ trunk/cumin/python/cumin/objectselector.py 2011-01-03 17:59:05 UTC (rev 4446)
@@ -144,7 +144,7 @@
self.links = ObjectSelectorLinks(app, "links")
self.add_child(self.links)
- self.table = ObjectSelectorTable(app, "table", cls)
+ self.table = self.create_table(app, "table", cls)
self.add_child(self.table)
self.tasks = list()
@@ -160,6 +160,9 @@
self.buttons.add_child(button)
button.init()
+ def create_table(self, app, name, cls):
+ return ObjectSelectorTable(app, name, cls)
+
def add_search_filter(self, this):
search = StringInput(self.app, "search")
search.param.default = ""
@@ -185,6 +188,12 @@
def render_title(self, session):
return self.table.render_title(session)
+ def get_data_values(self, session):
+ return self.table.get_data_values(session)
+
+ def get_data_options(self, session):
+ return self.table.get_data_options(session)
+
class ObjectSelectorTable(ObjectTable):
def __init__(self, app, name, cls):
super(ObjectSelectorTable, self).__init__(app, name, cls)
@@ -221,7 +230,10 @@
self.width = "1%"
def render_cell_value(self, session, record):
- return record[self.field.index]
+ try:
+ return record[self.field.index]
+ except IndexError:
+ return 0
class ObjectCheckboxColumnInput(CheckboxColumnInput):
def render_onclick_attr(self, session, record):
@@ -231,6 +243,8 @@
return "onclick=\"%s\"" % value
def render_checked_attr(self, session, record):
+ if len(record) == 0:
+ return ""
checks = self.get(session)
return record[self.parent.parent.field.index] in checks \
and "checked=\"checked\"" or ""
@@ -263,7 +277,7 @@
return frame.get_href(session, Identifiable(id)) # XXX
def render_cell_content(self, session, record):
- return record[self.field.index]
+ return len(record) > 0 and record[self.field.index] or ""
class ObjectSelectorControl(WidgetSet):
def do_render(self, session):
@@ -304,7 +318,7 @@
pass
def enter(self, session):
- ids = self.selector.ids.get(session)
+ ids = self.selector.table.ids.get(session)
nsession = wooly.Session(self.app.form_page)
13 years, 4 months