Changeset 2671 for TI05-delivery/ows_framework/trunk/ows_wps
- Timestamp:
- 29/06/07 14:43:18 (14 years ago)
- Location:
- TI05-delivery/ows_framework/trunk/ows_wps/ows_wps
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/context.py
r2666 r2671 30 30 """ 31 31 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) 33 37 34 38 # Make a bi-directional association between context and process. -
TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/execute.py
r2666 r2671 61 61 self.exceptionReport = None 62 62 63 def setSerialisedInputs(self, **inputs):64 """65 Ensures the keys in inputs match self.description.inputs and66 de-serialises them using the corresponding WPSDomain object.67 68 """69 for k in inputs:70 try:71 domain = self.description.inputs[k].domain72 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 and79 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].domain92 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 D99 100 def getSerialisedOutput(self, output):101 d = self.description.outputs[output].domain102 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 D109 -
TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/process.py
r2659 r2671 52 52 """ 53 53 try: 54 self.status.percentComplete = 0 54 55 outputs = self.run(**self.status.inputs) 55 56 except OwsError, e: … … 58 59 else: 59 60 # 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) 61 66 self.status.flag = self.status.SUCCEEDED 67 self.status.percentComplete = 100 68 self.context.updateStatus() 62 69 63 70 def run(self, **inputs): … … 72 79 73 80 81 82 83 74 84 #---------------------------------------------------------------------------- 75 85 76 from ows_wps.process_description import LiteralDomain 86 from ows_wps.process_description import LiteralDomain, InputDescription, OutputDescription 87 from time import sleep 77 88 78 89 class FloatDomain(LiteralDomain): … … 91 102 abstracts = ['Take two input and return the sum, difference ' 92 103 '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())} 97 108 ) 98 109 99 110 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 100 132 return dict(sum=x+y, diff=x-y, product=x*y) 101 133 -
TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/process_description.py
r2666 r2671 93 93 94 94 self.version = version 95 self.inputs = processInputs96 self.outputs = processOutputs95 self.inputs = inputs 96 self.outputs = outputs 97 97 98 98 -
TI05-delivery/ows_framework/trunk/ows_wps/ows_wps/process_runner.py
r2666 r2671 20 20 21 21 """ 22 def __init__(self, process):23 self.process = process24 22 25 def updateStatus(self , process):23 def updateStatus(self): 26 24 print ''' 27 25 ================================================================= … … 30 28 %(status)s: %(message)s 31 29 Completed: %(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) 36 34 37 if process.status.percentComplete >= 100:35 if self.process.status.percentComplete >= 100: 38 36 print 'Outputs:' 39 for output in process.status.outputs:37 for output in self.process.status.outputs: 40 38 #!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]) 42 40 print '=================================================================' 43 41 … … 60 58 try: 61 59 processClass = self.processes[processId] 62 except KeyError:60 except KeyError: 63 61 raise OwsError('Unknown process') 64 62 65 context = ProcessContext(processClass, inputs)63 context = DemoContext(processClass, inputs) 66 64 context.executeProcess() 65 66 #-------------------------------------------------------------------------------------- 67 68 if __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.