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)
cumin-developers@lists.fedorahosted.org