Author: justi9
Date: 2010-08-26 15:56:41 -0400 (Thu, 26 Aug 2010)
New Revision: 4230
Modified:
mgmt/newdata/cumin/python/cumin/grid/scheduler.py
mgmt/newdata/cumin/python/cumin/grid/submission.py
Log:
To avoid a circular dependency, move the scheduler select field with the job submit code;
warn the user if there's no scheduler to submit to
Modified: mgmt/newdata/cumin/python/cumin/grid/scheduler.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/scheduler.py 2010-08-26 18:38:46 UTC (rev 4229)
+++ mgmt/newdata/cumin/python/cumin/grid/scheduler.py 2010-08-26 19:56:41 UTC (rev 4230)
@@ -69,66 +69,6 @@
self.start = DaemonSelectionStart(app, self, "SCHEDD")
self.stop = DaemonSelectionStop(app, self, "SCHEDD")
-class SchedulerSelectField(ScalarField):
- def __init__(self, app, name, pool_name):
- super(SchedulerSelectField, self).__init__(app, name, None)
-
- self.pool_name = pool_name
-
- self.param = IntegerParameter(app, "param")
- self.add_parameter(self.param)
-
- cls = self.app.model.com_redhat_grid.Scheduler
-
- self.object = ObjectAttribute(self, "object", cls, self.param)
- self.add_attribute(self.object)
-
- self.input = self.SchedulerOptions(app, "input", self.param)
- self.add_child(self.input)
-
- def get(self, session):
- return self.object.get(session)
-
- def render_title(self, session):
- return "Schedd"
-
- class SchedulerOptions(OptionInputSet):
- def do_process(self, session):
- cls = self.app.model.com_redhat_grid.Scheduler
- id = self.param.get(session)
-
- if id is None:
- items = self.get_items(session)
-
- if items:
- scheduler = choice(items)
- self.param.set(session, scheduler._id)
-
- super(SchedulerSelectField.SchedulerOptions, self).do_process \
- (session)
-
- def do_get_items(self, session):
- cls = self.app.model.com_redhat_grid.Scheduler
-
- pool_name = self.parent.pool_name.get(session)
-
- if pool_name:
- schedulers = cls.get_selection(session.cursor, Pool=pool_name)
- else:
- schedulers = cls.get_selection(session.cursor)
-
- return schedulers
-
- def render_item_value(self, session, item):
- return item._id
-
- def render_item_content(self, session, item):
- return item.Name
-
- def render_item_selected_attr(self, session, item):
- if item._id == self.param.get(session):
- return "selected=\"selected\""
-
class SchedulerGeneralStatSet(StatSet):
def __init__(self, app, name, object):
super(SchedulerGeneralStatSet, self).__init__(app, name, object)
Modified: mgmt/newdata/cumin/python/cumin/grid/submission.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/submission.py 2010-08-26 18:38:46 UTC (rev 4229)
+++ mgmt/newdata/cumin/python/cumin/grid/submission.py 2010-08-26 19:56:41 UTC (rev 4230)
@@ -112,6 +112,77 @@
def render_title(self, session):
return "Description"
+class JobSchedulerField(ScalarField):
+ def __init__(self, app, name, pool_name):
+ super(JobSchedulerField, self).__init__(app, name, None)
+
+ self.pool_name = pool_name
+
+ self.param = IntegerParameter(app, "param")
+ self.add_parameter(self.param)
+
+ cls = self.app.model.com_redhat_grid.Scheduler
+
+ self.object = ObjectAttribute(self, "object", cls, self.param)
+ self.add_attribute(self.object)
+
+ self.input = self.SchedulerOptions(app, "input", self.param)
+ self.add_child(self.input)
+
+ self.help = "Submit job to this schedd"
+
+ def get(self, session):
+ return self.object.get(session)
+
+ def validate(self, session):
+ super(JobSchedulerField, self).validate(session)
+
+ scheduler = self.get(session)
+
+ if not scheduler:
+ error = FormError("There is no schedd to submit to")
+ self.form.errors.add(session, error)
+
+ def render_title(self, session):
+ return "Schedd"
+
+ class SchedulerOptions(OptionInputSet):
+ def do_process(self, session):
+ cls = self.app.model.com_redhat_grid.Scheduler
+ id = self.param.get(session)
+
+ if id is None:
+ items = self.get_items(session)
+
+ if items:
+ scheduler = choice(items)
+ self.param.set(session, scheduler._id)
+
+ super(JobSchedulerField.SchedulerOptions, self).do_process \
+ (session)
+
+ def do_get_items(self, session):
+ cls = self.app.model.com_redhat_grid.Scheduler
+
+ pool_name = self.parent.pool_name.get(session)
+
+ if pool_name:
+ schedulers = cls.get_selection(session.cursor, Pool=pool_name)
+ else:
+ schedulers = cls.get_selection(session.cursor)
+
+ return schedulers
+
+ def render_item_value(self, session, item):
+ return item._id
+
+ def render_item_content(self, session, item):
+ return item.Name
+
+ def render_item_selected_attr(self, session, item):
+ if item._id == self.param.get(session):
+ return "selected=\"selected\""
+
class JobAttributesField(MultilineStringField):
def __init__(self, app, name):
super(JobAttributesField, self).__init__(app, name)
@@ -255,10 +326,7 @@
self.directory.help = "Run the process in this directory"
self.add_field(self.directory)
- from scheduler import SchedulerSelectField # XXX
-
- self.scheduler = SchedulerSelectField(app, "scheduler",
self.pool_name)
- self.scheduler.help = "Submit job to this schedd"
+ self.scheduler = JobSchedulerField(app, "scheduler", self.pool_name)
self.add_extra_field(self.scheduler)
self.universe = self.UniverseField(app, "universe")
@@ -290,6 +358,9 @@
self.attrs = JobAttributesField(app, "attrs")
self.add_extra_field(self.attrs)
+ def process_display(self, session):
+ self.scheduler.validate(session)
+
def process_submit(self, session):
self.validate(session)
@@ -520,15 +591,15 @@
self.memory.input.param.default = 512
self.add_extra_field(self.memory)
- from scheduler import SchedulerSelectField # XXX
-
- self.scheduler = SchedulerSelectField(app, "scheduler",
self.pool_name)
- self.scheduler.help = "Submit job to this schedd"
+ self.scheduler = JobSchedulerField(app, "scheduler", self.pool_name)
self.add_extra_field(self.scheduler)
self.attrs = JobAttributesField(app, "attrs")
self.add_extra_field(self.attrs)
+ def process_display(self, session):
+ self.scheduler.validate(session)
+
def process_submit(self, session):
self.validate(session)
@@ -633,14 +704,15 @@
self.location.input.size = 50
self.add_field(self.location)
- from scheduler import SchedulerSelectField # XXX
-
- self.scheduler = SchedulerSelectField(app, "scheduler",
self.pool_name)
+ self.scheduler = JobSchedulerField(app, "scheduler", self.pool_name)
self.add_extra_field(self.scheduler)
self.attrs = JobAttributesField(app, "attrs")
self.add_extra_field(self.attrs)
+ def process_display(self, session):
+ self.scheduler.validate(session)
+
def process_submit(self, session):
self.validate(session)