Changeset 2671


Ignore:
Timestamp:
29/06/07 14:43:18 (12 years ago)
Author:
spascoe
Message:

process_runner.py will give a very basic demonstration of running a process.
The next thing to do is to get input/output as WPS XML documents.

Location:
TI05-delivery/ows_framework/trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_common/ows_common/domain.py

    r2570 r2671  
    3333                 meaning=None, dataType=None, valuesUnit=None): 
    3434        if possibleValues is None: 
    35             possibleValues = PossibleValues.anyValue() 
     35            possibleValues = PossibleValues.fromAnyValue() 
    3636        self.possibleValues = possibleValues 
    3737        self.defaultValue = defaultValue 
  • TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/context.py

    r2666 r2671  
    3030        """ 
    3131        status = ExecuteStatus() 
    32         status.setSerialisedInputs(**inputs) 
     32        inputDescriptions = processClass.description.inputs 
     33 
     34        # de-serialise all inputs 
     35        for k, v in serialisedInputs.items(): 
     36            status.inputs[k] = inputDescriptions[k].domain.load(v) 
    3337 
    3438        # Make a bi-directional association between context and process. 
  • TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/execute.py

    r2666 r2671  
    6161        self.exceptionReport = None 
    6262 
    63     def setSerialisedInputs(self, **inputs): 
    64         """ 
    65         Ensures the keys in inputs match self.description.inputs and 
    66         de-serialises them using the corresponding WPSDomain object. 
    67  
    68         """ 
    69         for k in inputs: 
    70             try: 
    71                 domain = self.description.inputs[k].domain 
    72             except KeyError: 
    73                 raise ValueError("Input %s not in description" % k) 
    74             self.inputs[k] = domain.load(inputs[k]) 
    75  
    76     def setOutputs(self, **outputs): 
    77         """ 
    78         Ensure the keys in outputs match self.description.outputs and 
    79         set self.outputs accordingly. 
    80  
    81         @note: Takes outputs in python-object form. 
    82          
    83         """ 
    84         for k in outputs: 
    85             if k in self.description.outputs: 
    86                 self.outputs[k] = outputs[k] 
    87             else: 
    88                 raise ValueError("Output %s not in description" % k) 
    89  
    90     def getSerialisedInput(self, input): 
    91         d = self.description.inputs[input].domain 
    92         return d.dump(self.inputs[input]) 
    93  
    94     def getSerialisedInputs(self): 
    95         D = {} 
    96         for input in self.inputs: 
    97             D[input] = self.getSerialisedInput(self, input) 
    98         return D 
    99  
    100     def getSerialisedOutput(self, output): 
    101         d = self.description.outputs[output].domain 
    102         return d.dump(self.outputs[output]) 
    103  
    104     def getSerialisedOutputs(self, output): 
    105         D = {} 
    106         for output inself.outputs: 
    107             D[output] = self.getSerialisedOutput(self, output) 
    108         return D 
    109      
  • TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/process.py

    r2659 r2671  
    5252        """ 
    5353        try: 
     54            self.status.percentComplete = 0 
    5455            outputs = self.run(**self.status.inputs) 
    5556        except OwsError, e: 
     
    5859        else: 
    5960            # Set the status outputs 
    60             self.status.setOutputs(**outputs) 
     61            for k, v in outputs.items(): 
     62                if k in self.description.outputs: 
     63                    self.status.outputs[k] = outputs[k] 
     64                else: 
     65                    raise ValueError("Output %s not in description" % k) 
    6166            self.status.flag = self.status.SUCCEEDED 
     67            self.status.percentComplete = 100 
     68            self.context.updateStatus() 
    6269 
    6370    def run(self, **inputs): 
     
    7279 
    7380 
     81 
     82 
     83 
    7484#---------------------------------------------------------------------------- 
    7585 
    76 from ows_wps.process_description import LiteralDomain 
     86from ows_wps.process_description import LiteralDomain, InputDescription, OutputDescription 
     87from time import sleep 
    7788 
    7889class FloatDomain(LiteralDomain): 
     
    91102        abstracts = ['Take two input and return the sum, difference ' 
    92103                     'and product'], 
    93         inputs = {'x': FloatDomain('1.2'), 
    94                   'y': FloatDomain('6.5')}, 
    95         outputs = {'sum': FloatDomain(), 'diff': FloatDomain(), 
    96                    'product': FloatDomain()} 
     104        inputs = {'x': InputDescription(FloatDomain('1.2')), 
     105                  'y': InputDescription(FloatDomain('6.5'))}, 
     106        outputs = {'sum': OutputDescription(FloatDomain()), 'diff': OutputDescription(FloatDomain()), 
     107                   'product': OutputDescription(FloatDomain())} 
    97108        ) 
    98109 
    99110    def run(self, x, y): 
     111        """ 
     112        Simulate a 3 stage process. 
     113 
     114        """ 
     115        self.status.message = 'Calculating sum' 
     116        self.context.updateStatus() 
     117        sleep(2) 
     118        sum = x+y 
     119 
     120        self.status.percentComplete = 33 
     121        self.status.message = 'Calculating difference' 
     122        self.context.updateStatus() 
     123        sleep(2) 
     124        diff = x-y 
     125 
     126        self.status.percentComplete = 66 
     127        self.status.message = 'Calculating product' 
     128        self.context.updateStatus() 
     129        product = x*y 
     130        sleep(2) 
     131         
    100132        return dict(sum=x+y, diff=x-y, product=x*y) 
    101133     
  • TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/process_description.py

    r2666 r2671  
    9393 
    9494        self.version = version 
    95         self.inputs = processInputs 
    96         self.outputs = processOutputs 
     95        self.inputs = inputs 
     96        self.outputs = outputs 
    9797 
    9898 
  • TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/process_runner.py

    r2666 r2671  
    2020 
    2121    """ 
    22     def __init__(self, process): 
    23         self.process = process 
    2422 
    25     def updateStatus(self, process): 
     23    def updateStatus(self): 
    2624        print ''' 
    2725================================================================= 
     
    3028%(status)s: %(message)s 
    3129Completed: %(pc).2f%% 
    32 ''' % dict(id=process.description.identifier, 
    33            obj=process, status=process.status.flag, 
    34            message=process.status.message, 
    35            pc=process.status.percentComplete) 
     30''' % dict(id=self.process.description.identifier, 
     31           obj=self.process, status=self.process.status.flag, 
     32           message=self.process.status.message, 
     33           pc=self.process.status.percentComplete) 
    3634 
    37         if process.status.percentComplete >= 100: 
     35        if self.process.status.percentComplete >= 100: 
    3836            print 'Outputs:' 
    39             for output in process.status.outputs: 
     37            for output in self.process.status.outputs: 
    4038                #!TODO: the output object should be passed to it's WPSDomain for serialisation. 
    41                 print '  %s: %s' % (output, process.status.outputs[output]) 
     39                print '  %s: %s' % (output, self.process.status.outputs[output]) 
    4240        print '=================================================================' 
    4341 
     
    6058        try: 
    6159            processClass = self.processes[processId] 
    62         exceptKeyError: 
     60        except KeyError: 
    6361            raise OwsError('Unknown process') 
    6462 
    65         context = ProcessContext(processClass, inputs) 
     63        context = DemoContext(processClass, inputs) 
    6664        context.executeProcess() 
     65 
     66#-------------------------------------------------------------------------------------- 
     67 
     68if __name__ == '__main__': 
     69    import sys 
     70    from ows_wps.process import ExampleProcess 
     71 
     72    runner = DemoProcessRunner(dict(ExampleProcess=ExampleProcess)) 
     73 
     74    process = sys.argv[1] 
     75    inputs = {} 
     76    for arg in sys.argv[2:]: 
     77        key, value = arg.split('=') 
     78        inputs[key] = value 
     79 
     80    runner.run(process, inputs) 
Note: See TracChangeset for help on using the changeset viewer.