Ignore:
Timestamp:
29/06/07 12:27:47 (12 years ago)
Author:
spascoe
Message:

Close to having a trivial example process (without XML serialisation).

Location:
TI05-delivery/ows_framework/trunk/ows_wps/ows_wps
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/context.py

    r2659 r2666  
    1212""" 
    1313 
     14from ows_wps.process import Process 
     15from ows_wps.execute import ExecuteStatus 
     16 
    1417class ProcessContext(object): 
    1518    """ 
     
    1720    This class defines the interface. 
    1821 
     22    @ivar process: The process being controlled by this context 
     23    @type process: Process 
     24 
    1925    """ 
    20     def updateStatus(self, process): 
     26    def __init__(self, processClass, serialisedInputs): 
    2127        """ 
    22         Called to notify the framework that a proces' execution status has 
    23         changed.  This might trigger serialising the ExecuteResponse document. 
     28        Initialise the context from a process class and a dictionary of inputs. 
     29 
     30        """ 
     31        status = ExecuteStatus() 
     32        status.setSerialisedInputs(**inputs) 
     33 
     34        # Make a bi-directional association between context and process. 
     35        self.process = processClass(status=status, context=self) 
     36 
     37    def executeProcess(self): 
     38        self.process.execute() 
     39 
     40    def updateStatus(self): 
     41        """ 
     42        Called by self.process to notify the framework that a process' 
     43        execution status has changed.  This might trigger serialising 
     44        the ExecuteResponse document. 
    2445 
    2546        """ 
  • TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/execute.py

    r2659 r2666  
    5353    FAILED = 'FAILED' 
    5454     
    55     def __init__(self, inputs=[], outputs=[], message=''): 
     55    def __init__(self): 
    5656        self.flag = self.PENDING 
    57         self.message = message 
     57        self.message = '' 
    5858        self.percentComplete = None 
    59         self.inputs = inputs 
    60         self.outputs = outputs 
     59        self.inputs = {} 
     60        self.outputs = {} 
    6161        self.exceptionReport = None 
     62 
     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]) 
    6275 
    6376    def setOutputs(self, **outputs): 
     
    6679        set self.outputs accordingly. 
    6780 
     81        @note: Takes outputs in python-object form. 
     82         
    6883        """ 
    6984        for k in outputs: 
     
    7388                raise ValueError("Output %s not in description" % k) 
    7489 
     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_description.py

    r2656 r2666  
    103103    @ivar maxOccurs 
    104104    @type maxOccurs: int or None 
    105     @ivar inputFormChoice: specifies the valid values for this option. 
    106     @type inputFormChoice: WPSDomain 
     105    @ivar domain: specifies the valid values for this option. 
     106    @type domain: WPSDomain 
    107107 
    108108    """ 
    109     def __init__(self, inputFormChoice, minOccurs=None, maxOccurs=None, 
     109    def __init__(self, domain, minOccurs=None, maxOccurs=None, 
    110110                 **kwargs): 
    111111        super(InputDescription, self).__init__(**kwargs) 
    112112 
    113         self.inputFormChoice = inputFormChoice 
     113        self.domain = domain 
    114114        self.minOccurs = minOccurs 
    115115        self.maxOccurs = maxOccurs 
     
    118118class OutputDescription(BasicIdentification): 
    119119    """ 
    120     @ivar outputFormChoice: specifies the valid format for this option. 
    121     @type outputFormChoice: WPSDomain 
     120    @ivar domain: specifies the valid format for this option. 
     121    @type domain: WPSDomain 
    122122 
    123123    """ 
    124     def __init__(self, outputFormChoice, **kwargs): 
     124    def __init__(self, domain, **kwargs): 
    125125        super(OutputDescription, self).__init__(**kwargs) 
    126126 
    127         self.outputFormChoice = outputFormChoice 
     127        self.domain = domain 
    128128 
  • TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/process_runner.py

    r2659 r2666  
    1111 
    1212from ows_wps.context import ProcessContext 
     13from ows_wps.execute import ExecuteStatus 
     14from ows_common.exceptions import OwsError 
    1315 
    1416 
     
    1820 
    1921    """ 
     22    def __init__(self, process): 
     23        self.process = process 
     24 
    2025    def updateStatus(self, process): 
    2126        print ''' 
     
    2530%(status)s: %(message)s 
    2631Completed: %(pc).2f%% 
    27 ================================================================= 
    2832''' % dict(id=process.description.identifier, 
    2933           obj=process, status=process.status.flag, 
     
    3135           pc=process.status.percentComplete) 
    3236 
     37        if process.status.percentComplete >= 100: 
     38            print 'Outputs:' 
     39            for output in process.status.outputs: 
     40                #!TODO: the output object should be passed to it's WPSDomain for serialisation. 
     41                print '  %s: %s' % (output, process.status.outputs[output]) 
     42        print '=================================================================' 
    3343 
    34 class ProcessRunner(object): 
     44class DemoProcessRunner(object): 
    3545    """ 
    36     Each ProcessRunner instance can execute one process at a time. 
     46    Setup a context for a process and start it running. 
     47 
     48    @ivar processes: The processes supported by this runner 
     49    @type processes: Dictionary mapping proces identifiers to Process classes. 
    3750 
    3851    """ 
    39     NotImplemented 
    40      
     52    def __init__(self, processes): 
     53        self.processes = processes 
     54 
     55    def run(self, processId, inputs): 
     56        """ 
     57        Run a process with given inputs. 
     58 
     59        """ 
     60        try: 
     61            processClass = self.processes[processId] 
     62        exceptKeyError: 
     63            raise OwsError('Unknown process') 
     64 
     65        context = ProcessContext(processClass, inputs) 
     66        context.executeProcess() 
Note: See TracChangeset for help on using the changeset viewer.