Changeset 7387 for cows_wps


Ignore:
Timestamp:
26/08/10 14:58:45 (9 years ago)
Author:
astephen
Message:

Added various additions to allow dynamic generation of arguments based
on WPS calls.

Location:
cows_wps/trunk
Files:
1 added
7 edited

Legend:

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

    r7095 r7387  
    105105            args[str(k)] = str(v)  
    106106 
    107 #        pc = ProcConfig() 
    108107        pcr = ProcConfigRenderer() 
    109108        proc_submission_form_html = pcr.renderProcSubmissionForm(proc, args) 
     109 
    110110        bbox_required = pcr.bbox_arg_found 
    111111        resp = proc_submission_form_html 
  • cows_wps/trunk/cows_wps/public/js/ui/submit_utils.js

    r7082 r7387  
    6161        });       
    6262} 
     63 
     64/*  
     65 function updateForm: 
     66   * updates the form by making an AJAX request to WPS or other service and parsing XML 
     67*/  
     68function updateForm() { 
     69        // Call WPS and return response 
     70        var resp = new WPSResponse();  
     71        var dct = resp.response_dict; 
     72 
     73        for (var key in dct) { 
     74                $("#" + key).empty(); 
     75                var elem = document.getElementById(key);  
     76 
     77                var new_values = dct[key]; 
     78alert(new_values.length); 
     79                for (var i = 0; i < new_values.length; i++) { 
     80                        var opt = document.createElement("option"); 
     81                        var value = new_values[i]; 
     82                        opt.setAttribute("value", value); 
     83                        opt.appendChild(document.createTextNode(value)); 
     84                        elem.appendChild(opt); 
     85                } 
     86/* 
     87                                for (var i = 0; i < this.option_ids.length; i++) { 
     88                        var opt_id = this.option_ids[i]; 
     89                        var opt_name = this.option_names[i] 
     90 
     91                        var opt = this._createElement(opt_id, opt_name, "option"); 
     92                        var opt = document.createElement("option"); 
     93                        opt.setAttribute("value", opt_id); 
     94                        opt.appendChild(document.createTextNode(opt_name)); 
     95 
     96                        // Now add the option to the select input 
     97                        sel.appendChild(opt); 
     98                } 
     99                 
     100                alert(key); 
     101*/ 
     102        } 
     103}        
    63104 
    64105function convertToMB(bytes) { 
  • cows_wps/trunk/cows_wps/renderer/proc_config_renderer.py

    r7095 r7387  
    11import logging 
     2import re 
    23import copy 
    34 
     
    67from cows_wps.lib.ui.proc_config import ProcConfig 
    78from cows_wps.lib.ui.proc_config_convertor import ProcConfigConvertor  
    8 #from cows_wps.utils.parse_capabilities_config import caps_config_dict 
    99 
    1010from cows_wps.renderer.form_renderer import FormRenderer 
     
    6969                 
    7070                value = dct[key] 
     71 
    7172                if key == "possible_values" and value != None: 
    72                     value = ", ".join(value) 
     73                    if len(value) == 1 and value[0][0] == "$": 
     74                        # Indicates a reference to a separate Web Service call 
     75                        value = "Call to web service: %s" % value[0] 
     76                    else: 
     77                        value = ", ".join(value) 
    7378 
    7479                if value != None:  
     
    130135                Click the 'Submit' button to submit your request.<br><br>""" 
    131136 
     137        triggers_present = [i[1] for i in inputs if i[1]["argument_trigger"] != None] 
     138        if triggers_present != []: 
     139            resp += """\n\nThis process includes arguments for which the possible values 
     140                       are dependent on calls to an external process. Please click the  
     141                       'Update form' button at any time to update the argument options 
     142                       based on the selections you have made.<br><br>""" 
     143 
    132144        resp += """\n\n <form action="/submit" onSubmit="return validateInputs();"> 
    133145                <input type="hidden" name="proc_id" id="proc_id" value="%s" /> 
     
    149161            al = input["allowed_length"] 
    150162            pv = input["possible_values"] 
     163     
     164            if pv != None and len(pv) == 1 and pv[0][0] == "$": 
     165                pv = self._resolveWebServiceCallForPossibleValues(pv[0]) 
     166 
    151167            default = input.get("default", None) 
    152168            opt = input.get("optional", False) 
     
    212228        count += 1 
    213229        row_style = ("even_row", "odd_row")[count % 2]  
    214         resp += '<tr class="%s"><td></td><td colspan="2"><input type="submit" value="Submit" /> Click this button when you are happy with your selections.</td></table>\n</form>\n' % row_style 
     230        resp += '<tr class="%s"><td></td><td colspan="2">' % row_style 
     231 
     232        if triggers_present != []: 
     233            resp += '<input type="button" id="update" name="update" value="Update form" onClick="updateForm();" />' 
     234 
     235        resp += '<input type="submit" value="Submit" /> Click this button when you are happy with your selections.</td></table>\n</form>\n'  
    215236        return  fm.htmlify(resp) 
     237 
     238    def _resolveWebServiceCallForPossibleValues(self, pv_descriptor): 
     239        """ 
     240        Calls a web service to populate possible values. 
     241        """ 
     242        pv_pattn = re.compile("^\$(\w+):((\w+)=(\w+))*/(.*)$") 
     243 
     244        match = pv_pattn.match(pv_descriptor) 
     245 
     246        if not match: 
     247            return ["ERROR - Arguments cannot be determined"] 
     248 
     249        items = match.groups() 
     250        log.warn("Items: %s" % str(items)) 
     251 
     252        process = items[0] 
     253        path = items[-1] 
     254        arg_list = items[2:-1] 
     255        args = [] 
     256 
     257        while len(arg_list) > 0: 
     258            (k, v) = arg_list[:2] 
     259            args.append((k, v)) 
     260            arg_list = arg_list[2:] 
     261 
     262        possible_values = [] 
     263        for (k, v) in args: 
     264            possible_values.append("%s = %s" % (k, v))  
     265 
     266        return possible_values 
  • cows_wps/trunk/cows_wps/templates/ui_template.html

    r7329 r7387  
    99        <script type="text/javascript" src="/js/ui/validate.js"></script> 
    1010        <script type="text/javascript" src="/js/ui/submit_utils.js"></script> 
     11        <script type="text/javascript" src="/js/ui/async_wps/wps_response.js"></script> 
     12        <script type="text/javascript" src="/js/ui/async_wps/wps_request.js"></script> 
    1113        <script type="text/javascript" src="/js/ui/jobviewer_utils.js"></script> 
    1214 
  • cows_wps/trunk/cows_wps/utils/parse_capabilities_config.py

    r6116 r7387  
    9999                    item_dict["possible_values"]=None 
    100100 
     101                if outputInputDict.has_key(param + ".argument_trigger"): 
     102                    item_dict["argument_trigger"] = outputInputDict[param + ".argument_trigger"].strip() 
     103                else: 
     104                    item_dict["argument_trigger"] = None 
     105 
    101106                if outputInputDict.has_key(param + ".default"): 
    102107                    value = fixTrueFalse(outputInputDict[param + ".default"].strip())  
     
    117122                    item_dict["allowed_length"] = None 
    118123 
     124                 
    119125                if outputInputDict.has_key(param + ".schema"): 
    120126                    item_dict["schema"] = outputInputDict[param+".schema"].strip() 
  • cows_wps/trunk/process_configs/SubsetPPFile.ini

    r7328 r7387  
    2222FilePath = filepath 
    2323FilePath.basedir = /disks/kona1/cwps-test-data/africa-lam 
     24FilePath.argument_trigger = StashCodes 
    2425StashCodes = int.list 
     26StashCodes.possible_values = $ListPPFileHeader:FilePath=FilePath/StashCodes  
    2527 
    2628[ProcessOutputs] 
  • cows_wps/trunk/process_modules/list_pp_file_header.py

    r7328 r7387  
    6969    
    7070            resp = "Number of fields: %s\n" % ppf.nfields 
     71            stashCodesFound = [] 
    7172 
    7273            for i in range(ppf.nfields): 
     
    7677                       (i, h.stashcode, h.lblev, h.getValidityTime(), h.getDataTime(), h.lbyr, h.lbyrd) 
    7778                resp += l 
     79 
     80                if h.stashcode not in stashCodesFound: 
     81                    stashCodesFound.append(h.stashcode) 
    7882 
    7983            # Write to file 
     
    8589         
    8690            # Add the output list to the XML output section: ProcessSpecificContent 
    87             context.outputs['ProcessSpecificContent'] = {"NumberOfPPRecords": ppf.nfields}  
     91            context.outputs['ProcessSpecificContent'] = { 
     92                                  "NumberOfPPRecords": ppf.nfields, 
     93                                  "StashCodes": " ".join([str(i) for i in stashCodesFound])}  
    8894 
    8995        else: 
Note: See TracChangeset for help on using the changeset viewer.