Changeset 7104 for cows_wps


Ignore:
Timestamp:
27/06/10 21:54:54 (9 years ago)
Author:
astephen
Message:

more work on jobs page.

Location:
cows_wps/trunk/cows_wps
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • cows_wps/trunk/cows_wps/controllers/jobs.py

    r7102 r7104  
    7272            "sub_after": "time:after", 
    7373            "sub_before": "time:before", 
     74            "user_id": "equality", 
    7475            } 
     76 
    7577    default_args = {"start": 0, 
    7678                    "n_records": 20, 
     
    8284            "sub_after": None, 
    8385            "order_by": "sub_time"} 
     86 
    8487    arg_processers = {"start": int, 
    8588                    "n_records": int, 
     
    9598    def index(self): 
    9699        (args, bad_args) = self._parseArgs() 
    97 #        return str(args) 
     100        user_id = request.environ["REMOTE_USER"].split("/")[-1] 
     101        args["user_id"] = user_id 
     102 
     103#        return (str(args) + "----" + str(bad_args)) 
    98104        (filtered_jobs, total_matches) = apply(self._filterJobs, [], args) 
    99105 
     
    115121                arg_check = apply(self.arg_processers[key], [value]) 
    116122 
    117                 if arg_check == False or value == "": 
     123                if value == "": 
     124                    value = default 
     125                elif arg_check == False: 
    118126                    bad_args[key] = value 
    119127                    value = default 
     
    146154     
    147155     
    148     def _filterJobs(self, start, n_records, job_desc_match, job_id_match, 
     156    def _filterJobs(self, user_id, start, n_records, job_desc_match, job_id_match, 
    149157                    job_type, job_status, sub_before, sub_after, order_by): 
    150158        # Get all jobs at start 
     
    155163        jobs = [[str(i) for i in (r.job_id, r.user_id, r.job.status, r.job.type, r.job.created)] for r in requests] 
    156164          
    157         for filtr in ("job_id_match", "job_type", "job_status", "sub_before", "sub_after"): 
     165        for filtr in ("job_id_match", "job_type", "job_status", "sub_before", "sub_after", "user_id"): 
    158166            jobs = self._filterBy(jobs, filtr, filter_value = vars()[filtr]) 
    159167        
     
    187195                if not test_param: 
    188196                    test_param = filter_value 
     197 
     198                item = parseDateTime(item.replace(" ", "T").split(".")[0]) 
    189199         
    190200                when = filter_type.split(":")[1].strip() 
    191          
     201  #              raise (str(item) + "nnnnnn" + str(test_param))  
    192202                if when == "after": 
    193203                    if item > test_param: 
     
    199209             
    200210            elif filter_type == "equality": 
     211#                raise (str(filter_value) + "...." + str(item)) 
    201212                if filter_value == item: 
    202213                    filtered_jobs.append(job) 
  • cows_wps/trunk/cows_wps/renderer/form_renderer.py

    r7002 r7104  
    1919    def htmlify(self, html): return HTML(html) 
    2020 
    21     def renderRadioButton(self, name, is_boolean=True, values=None): 
     21    def renderRadioButton(self, name, is_boolean = True, values = None): 
    2222        """ 
    2323        Returns HTML of radio button. 
     
    3333        return html 
    3434 
    35     def renderTextInput(self, name, dtype, optional=False, default=None, multiple=False): 
     35    def renderTextInput(self, name, dtype, optional = False, default = None, multiple = False): 
    3636        """ 
    3737        Returns HTML for text input including onChange validator. 
     
    4343        if default == None: default = "" 
    4444 
    45         allowed_dtypes = ("float", "int", "string", "datetime") 
     45        allowed_dtypes = ("any", "float", "int", "string", "datetime") 
    4646        js_opt = str(optional).lower() 
    4747 
     
    5252                      "float": ("/^[-+]?([0-9]*\.[0-9]+|[0-9]+)$/", "The %s input must be a decimal number." % name), 
    5353                      "string": ("/[0-9a-zA-Z]+/", "The %s input must include text characters." % name), 
     54                      "any": ("/.*/", "No message."), 
    5455                      "datetime": ("/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}/", "The %s input must be a date/time entry as follows YYYY-MM-DDThh:mm:ss (e.g. 2009-01-01T12:00:00)." % name)} 
    5556 
     
    7778        return html 
    7879 
    79     def renderSelectList(self, name, values, optional=False, multiple=False): 
     80    def renderSelectList(self, name, values, optional = False, multiple = False,  
     81                         option_names = None, selected = None, size = 1): 
    8082        """ 
    8183        Returns HTML for select list. 
     
    8385        If optional is True then add an extra option called "-- Please select --". 
    8486        """ 
     87        # Do some checks 
     88        if option_names == None: 
     89            option_names = values[:] 
     90         
    8591        if optional == True: 
    86             values.insert(0, "-- Please select --") 
     92            values.insert(0, "") 
     93            option_names.insert(0, "-- Please select --") 
     94 
     95        if len(values) != len(option_names): 
     96            raise Exception("Length of 'values' and 'option_names' sent to renderSelectList() must be the same and are not.") 
    8797 
    8898        multiple_string = "" 
     
    92102        html = """<select %s name="%s" id="%s">\n""" % (multiple_string, name, name) 
    93103        
    94         selected = 'selected="selected"'  
    95         for value in values: 
    96             html += """ <option %s value="%s">%s</option>\n""" % (selected, value, value) 
    97             selected = "" 
     104        for (i, value) in enumerate(values): 
     105            option_name = option_names[i] 
    98106 
     107#            html += "%s--%s++%s.." % (i, value, selected) 
     108            # FIXME: Does not pick up submitted value here from 'selected' arg. 
     109            selected_flag = "" 
     110            if selected == value: 
     111                selected_flag = 'selected="selected"'  
     112 
     113            html += """ <option %s value="%s">%s</option>\n""" % (selected_flag, value, option_name) 
     114 
     115        html += "</select>\n" 
    99116        return html 
    100117 
  • cows_wps/trunk/cows_wps/renderer/ui_renderer.py

    r7102 r7104  
    33from pylons import config, tmpl_context as c 
    44 
    5  
    65from genshi.template import TemplateLoader  
    76from genshi.builder import *  
    87from genshi import HTML 
     8 
     9from cows_wps.renderer.form_renderer import * 
    910 
    1011#c.tester = "OOJOJ" 
     
    5051        Renders jobs page. 
    5152        """ 
    52         rjobs = self._renderJobsTable(jobs) 
     53        jobs_html = '<b>Total jobs matched: <span style="background: white; border: solid 1px; padding: 3px;">%d</span></b><br/><br/>' % total_matches 
     54        jobs_html += self._renderJobsTable(jobs) 
    5355  
    54         filter_html = "" 
     56        filter_html = "Please select the filtering options and press the 'Filter jobs' button to submit the new filter settings." 
    5557 
    5658        if len(bad_args.keys()) > 0: 
     
    6062                msg += "%s = %s<br/>" % (key, value)  
    6163 
    62             filter_html += '<center><div id="incorrect_arguments" style="width: 600px; border-width: 0px; background: orange; color: white; font-weight: bold; padding: 3px;">%s</div>' % msg  
     64            filter_html += '<center><div id="incorrect_arguments" style="width: 600px; border-width: 0px; background: orange; color: white; font-weight: bold; padding: 3px;">%s</div></center>' % msg  
    6365 
    6466        filter_html += self._renderFilterOptions(args) 
     67 
    6568  
    6669        items = [("Welcome to the Jobs Page", "The Jobs Page allows you to view current and previous jobs. Select the filter options to modify the records matched."), 
    6770                 ("Filter the Job List", filter_html), 
    68                  ("Total Matches", str(total_matches)), 
    69                  ("Jobs", rjobs)]  #["<br>%s = %s" % (job[0], str(job)) for job in jobs])]  
     71                 ("Jobs", jobs_html)]   
    7072 
    7173        return self.render("Jobs Page", items) 
     
    9698        Returns a string for the rendered HTML for filter form. 
    9799        """ 
    98         filters = [("job_id_match", {"type": "text", "text": "Job ID matches", "default": ""}), 
     100        fr = FormRenderer() 
     101 
     102        filters = [("job_id_match", {"type": "text", "regex": "any", "text": "Job ID matches", "default": ""}), 
    99103                   ("job_status", {"type": "list", "text": "Job Status", "default": "-- Please select --", 
    100                          "option_names": ("-- Please select --", "Completed", "Failed", "Running"), 
    101                          "option_values": ("", "COMPLETED", "FAILED", "STARTED|ACCEPTED")}), 
     104                         "optional": True, "multiple": False, 
     105                         "option_names": ["COMPLETED", "FAILED", "RUNNING"], 
     106                         "option_values": ["COMPLETED", "FAILED", "STARTED|ACCEPTED"]}), 
     107                   ("job_type", {"type": "list", "text": "Job Type", "default": "-- Please select --",  
     108                         "optional": True, "multiple": False, 
     109                         "option_values": ["1", "2"], "option_names": ["1", "2"]}),  
     110                   ("sub_before", {"type": "text", "regex": "datetime", "text":  
     111                         "Job submitted before (format: YYYY-MM-DDThh:mm:ss)", "default": ""}), 
     112                   ("sub_after", {"type": "text", "regex": "datetime", "text":  
     113                         "Job submitted after (format: YYYY-MM-DDThh:mm:ss)", "default": ""}), 
    102114                  ] 
    103115 
     
    114126 
    115127            if fd["type"] == "text": 
    116                 input += '<input type="text" id="%s" name="%s" value="%s" />' % (id, id, value) 
     128                input += fr.renderTextInput(id, fd["regex"], optional = True) 
    117129 
    118130            elif fd["type"] == "list": 
    119                 input += '<select id="%s" name="%s">' % (id, id) 
    120  
    121                 for (i, opt_name) in enumerate(fd["option_names"]):  
    122                     opt_value = fd["option_values"][i] 
    123  
    124                     selected = ""  
    125  
    126                     if value == opt_value: 
    127                         selected = ' selected="selected"' 
    128  
    129                     input += '\n        <option value="%s"%s>%s</option>' % (opt_value, selected, opt_name) 
    130  
    131                 input += "</select>" 
     131                selected_value = value 
     132                if type(selected_value) == type([1,2]): selected_value = value[0] 
     133                input += fr.renderSelectList(id, fd["option_values"], optional = fd["optional"],  
     134                                             multiple = fd["multiple"], option_names = fd["option_names"], 
     135                                             selected = selected_value) 
     136                input += "<br/>" 
    132137 
    133138            html += "\n%s" % input 
    134139 
    135         html += '<input type="submit" value="Filter jobs" />' 
     140        html += '<br/><br/>Click the button to re-load the page with these settings <input type="submit" value="Filter jobs" />' 
    136141        html += '</form>' 
    137 #        raise Exception(str(html)) 
    138142        return html  
Note: See TracChangeset for help on using the changeset viewer.