diff options
| author | LV-426 <lv-426@taproot.org.il> | 2015-04-02 23:05:47 +0300 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2015-04-02 23:05:47 +0300 |
| commit | dc085289e7d50e729e3ce85ad6e5bb6efada70bd (patch) | |
| tree | be29ffb6d101d11b5bcbb4f7c26f149d57a15a62 /src | |
| parent | e53b90f5c0deb2d665f1bb3333e53eaaedc0bc14 (diff) | |
rz_user: improve caller error handling - use API_Exception__bad_request's caller_err_msg
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/rz_api_common.py | 6 | ||||
| -rw-r--r-- | src/server/rz_user.py | 14 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/server/rz_api_common.py b/src/server/rz_api_common.py index 5f2b66a3..7261ab2b 100644 --- a/src/server/rz_api_common.py +++ b/src/server/rz_api_common.py @@ -13,7 +13,11 @@ from rz_kernel import RZDoc_Exception__not_found log = logging.getLogger('rhizi') -class API_Exception__bad_request(Exception): pass # raised by input sanitation functions +class API_Exception__bad_request(Exception): # raised by input sanitation functions + + def __init__(self, internal_err_msg, caller_err_msg = None): + super(API_Exception__bad_request, self).__init__(internal_err_msg) + self.caller_err_msg = None # may be set to carry short string error messages which may be presented to the caller def __sanitize_input(*args, **kw_args): pass diff --git a/src/server/rz_user.py b/src/server/rz_user.py index 92fff699..9ef7abc0 100644 --- a/src/server/rz_user.py +++ b/src/server/rz_user.py @@ -17,6 +17,7 @@ import crypt_util from rz_mail import send_email_message from rz_req_handling import make_response__json, make_response__json__html from rz_user_db import User_Account +from rz_api_common import API_Exception__bad_request log = logging.getLogger('rhizi') @@ -314,10 +315,14 @@ def rest__user_signup(): for f_name, regex in field_to_regex_map.items(): f_val = req_json.get(f_name) - if None == f_val: - raise Exception('malformed signup request: missing field: %s' % (f_name)) + if None == f_val or 0 == len(f_val): + e = API_Exception__bad_request('malformed signup request: missing field: %s' % (f_name)) + e.caller_err_msg = 'Missing value: %s' % (f_name.replace('_', ' ')) + raise e if None == re.match(regex, f_val): - raise Exception('malformed signup request: regex match failure: regex: %s, input: %s' % (regex, f_val)) + e = API_Exception__bad_request('malformed signup request: regex match failure: regex: %s, input: %s' % (regex, f_val)) + e.caller_err_msg = 'Illegal value: %s' % (f_val) + raise e first_name = req_json['first_name'] last_name = req_json['last_name'] @@ -358,6 +363,9 @@ def rest__user_signup(): try: us_req = sanitize_and_validate_input(request) + except API_Exception__bad_request as e: + log.exception(e) + return make_response__json__html(status=400, html_str='<p>%s</p>' % (e.caller_err_msg)) except Exception as e: log.exception(e) return make_response__json__html(status=400, html_str=html_err__tech_difficulty) |
