pywps.app.exceptions 源代码
##################################################################
# Copyright 2018 Open Source Geospatial Foundation and others #
# licensed under MIT, Please consult LICENSE.txt for details #
##################################################################
"""
Process exceptions raised intentionally in processes to provide information for users.
"""
import re
DEFAULT_ALLOWED_CHARS = ".:!?=,;-_/"
import logging
LOGGER = logging.getLogger('PYWPS')
def format_message(text, min_length=3, max_length=300, allowed_chars=None):
allowed_chars = allowed_chars or DEFAULT_ALLOWED_CHARS
special = re.escape(allowed_chars)
pattern = rf'[\w{special}]+'
msg = ' '.join(re.findall(pattern, text))
msg.strip()
if len(msg) >= min_length:
msg = msg[:max_length]
else:
msg = ''
return msg
[文档]class ProcessError(Exception):
""":class:`pywps.app.exceptions.ProcessError` is an :class:`Exception`
you can intentionally raise in a process
to provide a user-friendly error message.
The error message gets formatted (3<= message length <=300) and only
alpha numeric characters and a few special characters are allowed.
"""
default_msg = 'Sorry, process failed. Please check server error log.'
def __init__(self, msg=None, min_length=3, max_length=300, allowed_chars=None):
self.msg = msg
self.min_length = min_length
self.max_length = max_length
self.allowed_chars = allowed_chars or DEFAULT_ALLOWED_CHARS
def __str__(self):
return self.message
@property
def message(self):
try:
msg = format_message(
self.msg,
min_length=self.min_length,
max_length=self.max_length,
allowed_chars=self.allowed_chars)
except Exception as e:
LOGGER.warning(f"process error formatting failed: {e}")
msg = None
if not msg:
msg = self.default_msg
return msg