changeset bb6009606dde in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset;node=bb6009606dde
description:
Use more appropriate HTTP status for Tryton exceptions
issue8929
review252781002
diffstat:
trytond/protocols/jsonrpc.py | 20 +++++++++++++++++---
trytond/protocols/xmlrpc.py | 20 +++++++++++++++++---
2 files changed, 34 insertions(+), 6 deletions(-)
diffs (78 lines):
diff -r b4662dcd0a71 -r bb6009606dde trytond/protocols/jsonrpc.py
--- a/trytond/protocols/jsonrpc.py Mon Jan 20 22:18:27 2020 +0100
+++ b/trytond/protocols/jsonrpc.py Mon Jan 20 22:25:12 2020 +0100
@@ -7,10 +7,14 @@
from werkzeug.wrappers import Response
from werkzeug.utils import cached_property
-from werkzeug.exceptions import BadRequest, InternalServerError
+from werkzeug.exceptions import (
+ BadRequest, InternalServerError, Conflict, Forbidden, Locked,
+ TooManyRequests)
from trytond.protocols.wrappers import Request
-from trytond.exceptions import TrytonException
+from trytond.exceptions import (
+ TrytonException, UserWarning, LoginException, ConcurrencyException,
+ RateLimitException, MissingDependenciesException)
class JSONDecoder(object):
@@ -153,7 +157,17 @@
else:
response['result'] = data
else:
- if isinstance(data, TrytonException):
+ if isinstance(data, UserWarning):
+ return Conflict(data)
+ elif isinstance(data, LoginException):
+ return Forbidden(data)
+ elif isinstance(data, ConcurrencyException):
+ return Locked(data)
+ elif isinstance(data, RateLimitException):
+ return TooManyRequests(data)
+ elif isinstance(data, MissingDependenciesException):
+ return InternalServerError(data)
+ elif isinstance(data, TrytonException):
return BadRequest(data)
elif isinstance(data, Exception):
return InternalServerError(data)
diff -r b4662dcd0a71 -r bb6009606dde trytond/protocols/xmlrpc.py
--- a/trytond/protocols/xmlrpc.py Mon Jan 20 22:18:27 2020 +0100
+++ b/trytond/protocols/xmlrpc.py Mon Jan 20 22:25:12 2020 +0100
@@ -9,10 +9,14 @@
from werkzeug.wrappers import Response
from werkzeug.utils import cached_property
-from werkzeug.exceptions import BadRequest, InternalServerError
+from werkzeug.exceptions import (
+ BadRequest, InternalServerError, Conflict, Forbidden, Locked,
+ TooManyRequests)
from trytond.protocols.wrappers import Request
-from trytond.exceptions import TrytonException
+from trytond.exceptions import (
+ TrytonException, UserWarning, LoginException, ConcurrencyException,
+ RateLimitException, MissingDependenciesException)
logger = logging.getLogger(__name__)
@@ -153,7 +157,17 @@
data, methodresponse=True, allow_none=True),
content_type='text/xml')
else:
- if isinstance(data, TrytonException):
+ if isinstance(data, UserWarning):
+ return Conflict(data)
+ elif isinstance(data, LoginException):
+ return Forbidden(data)
+ elif isinstance(data, ConcurrencyException):
+ return Locked(data)
+ elif isinstance(data, RateLimitException):
+ return TooManyRequests(data)
+ elif isinstance(data, MissingDependenciesException):
+ return InternalServerError(data)
+ elif isinstance(data, TrytonException):
return BadRequest(data)
elif isinstance(data, Exception):
return InternalServerError(data)