Skip to content

Commit ae7947a

Browse files
committed
Implement sub-path for status request
1 parent c67cd9d commit ae7947a

File tree

4 files changed

+43
-36
lines changed

4 files changed

+43
-36
lines changed

Diff for: pywps/app/Process.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ def status_filename(self):
184184
@property
185185
def status_url(self):
186186
base_url = config.get_config_value('server', 'url')
187-
return f"{base_url}?service=WPS&request=status&uuid={self.uuid}"
187+
return f"{base_url}/status?uuid={self.uuid}"
188188

189189
def _execute_process(self, async_, wps_request, wps_response):
190190
"""

Diff for: pywps/app/Service.py

+40-33
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,15 @@ def __init__(self, processes: Sequence = [], cfgfiles=None, preprocessors: Optio
6262
if not LOGGER.handlers:
6363
LOGGER.addHandler(logging.NullHandler())
6464

65-
def get_status(self, wps_request, uuid):
65+
def get_status(self, http_request):
6666
try:
67-
_, mimetype = get_response_type(wps_request.http_request.accept_mimetypes,
68-
wps_request.default_mimetype)
67+
_, mimetype = get_response_type(http_request.accept_mimetypes,
68+
"text/xml")
6969
except Exception:
7070
mimetype = get_default_response_mimetype()
71-
return StatusResponse(wps_request.version, wps_request.requested_status_uuid, mimetype)
71+
from urllib.parse import parse_qs
72+
request = parse_qs(http_request.environ["QUERY_STRING"])
73+
return StatusResponse(request.get("version", ["1.0.0"])[0], request["uuid"][0], mimetype)
7274

7375
def get_capabilities(self, wps_request, uuid):
7476
return CapabilitiesResponse(wps_request, uuid, version=wps_request.version, processes=self.processes)
@@ -168,39 +170,44 @@ def call(self, http_request):
168170
LOGGER.debug('Setting PYWPS_CFG to {}'.format(environ_cfg))
169171
os.environ['PYWPS_CFG'] = environ_cfg
170172

171-
wps_request = WPSRequest(http_request, self.preprocessors)
172-
LOGGER.info('Request: {}'.format(wps_request.operation))
173-
if wps_request.operation in ['getcapabilities',
174-
'describeprocess',
175-
'execute',
176-
'status']:
177-
log_request(request_uuid, wps_request)
173+
if http_request.environ["PATH_INFO"] == "/status":
178174
try:
179-
response = None
180-
if wps_request.operation == 'getcapabilities':
181-
response = self.get_capabilities(wps_request, request_uuid)
182-
response._update_status(WPS_STATUS.SUCCEEDED, '', 100)
183-
184-
elif wps_request.operation == 'describeprocess':
185-
response = self.describe(wps_request, request_uuid, wps_request.identifiers)
186-
response._update_status(WPS_STATUS.SUCCEEDED, '', 100)
187-
188-
elif wps_request.operation == 'execute':
189-
response = self.execute(
190-
wps_request.identifier,
191-
wps_request,
192-
request_uuid
193-
)
194-
elif wps_request.operation == 'status':
195-
response = self.get_status(wps_request, request_uuid)
196-
return response
175+
return self.get_status(http_request)
197176
except Exception as e:
198-
# This ensure that logged request get terminated in case of exception while the request is not
199-
# accepted
200-
store_status(request_uuid, WPS_STATUS.FAILED, 'Request rejected due to exception', 100)
177+
store_status(request_uuid, WPS_STATUS.FAILED,
178+
'Request rejected due to exception', 100)
201179
raise e
202180
else:
203-
raise RuntimeError("Unknown operation {}".format(wps_request.operation))
181+
wps_request = WPSRequest(http_request, self.preprocessors)
182+
LOGGER.info('Request: {}'.format(wps_request.operation))
183+
if wps_request.operation in ['getcapabilities',
184+
'describeprocess',
185+
'execute']:
186+
log_request(request_uuid, wps_request)
187+
try:
188+
response = None
189+
if wps_request.operation == 'getcapabilities':
190+
response = self.get_capabilities(wps_request, request_uuid)
191+
response._update_status(WPS_STATUS.SUCCEEDED, '', 100)
192+
193+
elif wps_request.operation == 'describeprocess':
194+
response = self.describe(wps_request, request_uuid, wps_request.identifiers)
195+
response._update_status(WPS_STATUS.SUCCEEDED, '', 100)
196+
197+
elif wps_request.operation == 'execute':
198+
response = self.execute(
199+
wps_request.identifier,
200+
wps_request,
201+
request_uuid
202+
)
203+
return response
204+
except Exception as e:
205+
# This ensure that logged request get terminated in case of exception while the request is not
206+
# accepted
207+
store_status(request_uuid, WPS_STATUS.FAILED, 'Request rejected due to exception', 100)
208+
raise e
209+
else:
210+
raise RuntimeError("Unknown operation {}".format(wps_request.operation))
204211

205212
except NoApplicableCode as e:
206213
return e

Diff for: tests/test_assync.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def test_async(self):
5454
total_time = 0
5555
sleep_time = .01
5656
while wps.status not in ["ProcessSucceeded", "ProcessFailed"]:
57-
resp = client.get(f'{url.path}?{url.query}').data
57+
resp = client.open(base_url='/wps', path='/status', method='GET', query_string=url.query).data
5858
if resp:
5959
wps.checkStatus(response=resp, sleepSecs=0.01)
6060
else:

Diff for: tests/test_wps_status.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,6 @@ def test_wps_status(self):
5252

5353
# Parse url because we do not have real server
5454
url = urlparse(url)
55-
resp = client.get(f'{url.path}?{url.query}')
55+
resp = client.open(base_url='/wps', path='/status', method='GET', query_string=url.query)
5656
assert_response_success(resp)
5757

0 commit comments

Comments
 (0)