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)

Reply via email to