[rhmessaging-commits] rhmessaging commits: r4218 - mgmt/newdata/cumin/python/cumin/grid.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Mon Aug 23 14:32:09 EDT 2010


Author: justi9
Date: 2010-08-23 14:32:08 -0400 (Mon, 23 Aug 2010)
New Revision: 4218

Modified:
   mgmt/newdata/cumin/python/cumin/grid/submission.py
Log:
 * Added two new optional fields to vm submit: memory and extra
   attributes

 * Now that we're reusing the extra attrs field, moved its parsing
   logic onto a common field class


Modified: mgmt/newdata/cumin/python/cumin/grid/submission.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/submission.py	2010-08-23 16:02:10 UTC (rev 4217)
+++ mgmt/newdata/cumin/python/cumin/grid/submission.py	2010-08-23 18:32:08 UTC (rev 4218)
@@ -108,6 +108,66 @@
     def render_title(self, session):
         return "Description"
 
+class JobAttributesField(MultilineStringField):
+    def __init__(self, app, name):
+        super(JobAttributesField, self).__init__(app, name)
+
+        self.input.columns = 50
+
+    def render_title(self, session):
+        return "Extra attributes"
+
+    def parse_attributes(self, session):
+        attrs = dict()
+
+        text = self.get(session)
+        text = text.strip()
+
+        for line in text.split("\n"):
+            line = line.strip()
+
+            if not line:
+                continue
+
+            try:
+                name, value = self.parse_attribute(line)
+            except:
+                error = FormError("Failed parsing attribute: %s" % line)
+                self.form.errors.get(session).append(error)
+
+                continue
+
+            attrs[name] = value
+
+        return attrs
+
+    def parse_attribute(self, line):
+        name, value = line.split("=", 1)
+
+        name = name.strip()
+        value = self.unmarshal_value(value.strip())
+
+        return name, value
+
+    def unmarshal_value(self, value):
+        if value.lower() == "true":
+            return True
+
+        if value.lower() == "false":
+            return False
+
+        try:
+            return int(value)
+        except ValueError:
+            pass
+
+        try:
+            return float(value)
+        except ValueError:
+            pass
+
+        return value
+
 class JobSubmit(Task):
     def __init__(self, app):
         super(JobSubmit, self).__init__(app)
@@ -222,14 +282,13 @@
         #self.options = self.OptionsField(app, "options")
         #self.add_extra_field(self.options)
 
-        self.attributes_ = self.AttributesField(app, "attributes")
-        self.attributes_.input.columns = 50
-        self.add_extra_field(self.attributes_)
+        self.attrs = JobAttributesField(app, "attrs")
+        self.add_extra_field(self.attrs)
 
     def process_submit(self, session):
         self.validate(session)
 
-        attrs = self.parse_attributes(session)
+        attrs = self.attrs.parse_attributes(session)
 
         if not self.errors.get(session):
             scheduler = self.scheduler.get(session)
@@ -264,57 +323,6 @@
 
             self.task.exit_with_redirect(session, scheduler)
 
-    def parse_attributes(self, session):
-        attrs = dict()
-
-        text = self.attributes_.get(session)
-        text = text.strip()
-
-        for line in text.split("\n"):
-            line = line.strip()
-
-            if not line:
-                continue
-
-            try:
-                name, value = self.parse_attribute(line)
-            except:
-                error = FormError("Failed parsing attribute: %s" % line)
-                self.errors.get(session).append(error)
-
-                continue
-
-            attrs[name] = value
-
-        return attrs
-
-    def parse_attribute(self, line):
-        name, value = line.split("=", 1)
-
-        name = name.strip()
-        value = self.unmarshal_value(value.strip())
-
-        return name, value
-
-    def unmarshal_value(self, value):
-        if value.lower() == "true":
-            return True
-
-        if value.lower() == "false":
-            return False
-
-        try:
-            return int(value)
-        except ValueError:
-            pass
-
-        try:
-            return float(value)
-        except ValueError:
-            pass
-
-        return value
-
     class TemplateField(FormField):
         def __init__(self, app, name):
             super(JobSubmitForm.TemplateField, self).__init__(app, name)
@@ -415,10 +423,6 @@
     #         def render_title(self, session):
     #             return "Use cloud"
 
-    class AttributesField(MultilineStringField):
-        def render_title(self, session):
-            return "Extra attributes"
-
 class VmJobSubmit(Task):
     def __init__(self, app):
         super(VmJobSubmit, self).__init__(app)
@@ -429,7 +433,7 @@
         return "Submit VM job"
 
     def do_invoke(self, session, scheduler, invoc,
-                  description, image, memory):
+                  description, image, memory, attrs={}):
         ad = dict()
 
         # General
@@ -444,6 +448,9 @@
                                "JobVMMemory, " + \
                                "ImageSize / 1024.000000))"
 
+        for name, value in attrs.items():
+            ad[name] = value
+
         # VM
 
         ad["VMPARAM_Kvm_Disk"] = "%s:vda:w" % image
@@ -499,25 +506,38 @@
         self.image.required = True
         self.add_field(self.image)
 
+        self.memory = self.MemoryField(app, "memory")
+        self.memory.help = "In megabytes"
+        self.memory.required = True
+        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.add_extra_field(self.scheduler)
 
+        self.attrs = JobAttributesField(app, "attrs")
+        self.add_extra_field(self.attrs)
+
     def process_submit(self, session):
         self.validate(session)
 
+        attrs = self.attrs.parse_attributes(session)
+
         if not self.errors.get(session):
             scheduler = self.scheduler.get(session)
             description = self.description.get(session)
             image = self.image.get(session)
+            memory = self.memory.get(session)
 
             self.task.invoke(session,
                              scheduler,
                              description,
                              image,
-                             512)
+                             memory,
+                             attrs=attrs)
 
             self.task.exit_with_redirect(session, scheduler)
 
@@ -525,6 +545,10 @@
         def render_title(self, session):
             return "Image location"
 
+    class MemoryField(IntegerField):
+        def render_title(self, session):
+            return "Memory"
+
 # class SubmissionDagAdd(SubmissionAdd):
 #     def __init__(self, app, frame):
 #         super(SubmissionDagAdd, self).__init__(app, frame)



More information about the rhmessaging-commits mailing list