Skip to content

Commit 3f1477f

Browse files
authored
Merge pull request #312 from elemoine/fix-stored
Fix execution of stored jobs
2 parents 62a809c + fe928b9 commit 3f1477f

3 files changed

Lines changed: 25 additions & 15 deletions

File tree

pywps/app/Process.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def __init__(self, handler, identifier, title, abstract='', keywords=[], profile
6666
self.workdir = None
6767
self._grass_mapset = None
6868
self.grass_location = grass_location
69+
self.service = None
6970

7071
if store_supported:
7172
self.store_supported = 'true'
@@ -290,12 +291,14 @@ def _run_process(self, wps_request, wps_response):
290291
request_json = request_json.decode('utf-8')
291292
new_wps_request = WPSRequest()
292293
new_wps_request.json = json.loads(request_json)
294+
process_identifier = new_wps_request.identifier
295+
process = self.service.prepare_process_for_execution(process_identifier)
296+
process._set_uuid(uuid)
297+
process.async = True
293298
response_cls = get_response("execute")
294-
295-
new_wps_response = response_cls(new_wps_request, process=self, uuid=uuid)
299+
new_wps_response = response_cls(new_wps_request, process=process, uuid=uuid)
296300
new_wps_response.status = STATUS.STORE_AND_UPDATE_STATUS
297-
self._set_uuid(uuid)
298-
self._run_async(new_wps_request, new_wps_response)
301+
process._run_async(new_wps_request, new_wps_response)
299302
dblog.remove_stored(uuid)
300303
except Exception as e:
301304
LOGGER.error("Could not run stored process. %s", e)

pywps/app/Service.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,25 @@ def execute(self, identifier, wps_request, uuid):
7979
:param uuid: string identifier of the request
8080
"""
8181
self._set_grass()
82+
process = self.prepare_process_for_execution(identifier)
83+
return self._parse_and_execute(process, wps_request, uuid)
84+
85+
def prepare_process_for_execution(self, identifier):
86+
"""Prepare the process identified by ``identifier`` for execution.
87+
"""
8288
try:
8389
process = self.processes[identifier]
84-
85-
# make deep copy of the process instace
86-
# so that processes are not overriding each other
87-
# just for execute
88-
process = copy.deepcopy(process)
89-
90-
workdir = os.path.abspath(config.get_config_value('server', 'workdir'))
91-
tempdir = tempfile.mkdtemp(prefix='pywps_process_', dir=workdir)
92-
process.set_workdir(tempdir)
9390
except KeyError:
9491
raise InvalidParameterValue("Unknown process '%r'" % identifier, 'Identifier')
95-
96-
return self._parse_and_execute(process, wps_request, uuid)
92+
# make deep copy of the process instace
93+
# so that processes are not overriding each other
94+
# just for execute
95+
process = copy.deepcopy(process)
96+
process.service = self
97+
workdir = os.path.abspath(config.get_config_value('server', 'workdir'))
98+
tempdir = tempfile.mkdtemp(prefix='pywps_process_', dir=workdir)
99+
process.set_workdir(tempdir)
100+
return process
97101

98102
def _parse_and_execute(self, process, wps_request, uuid):
99103
"""Parse and execute request

pywps/app/WPSRequest.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def __init__(self, http_request=None):
3636
self.operation = None
3737
self.version = None
3838
self.language = None
39+
self.identifier = None
3940
self.identifiers = None
4041
self.store_execute = None
4142
self.status = None
@@ -316,6 +317,7 @@ def default(self, obj):
316317
'operation': self.operation,
317318
'version': self.version,
318319
'language': self.language,
320+
'identifier': self.identifier,
319321
'identifiers': self.identifiers,
320322
'store_execute': self.store_execute,
321323
'status': self.status,
@@ -337,6 +339,7 @@ def json(self, value):
337339
self.operation = value['operation']
338340
self.version = value['version']
339341
self.language = value['language']
342+
self.identifier = value['identifier']
340343
self.identifiers = value['identifiers']
341344
self.store_execute = value['store_execute']
342345
self.status = value['status']

0 commit comments

Comments
 (0)