diff --git a/openerp/exceptions.py b/openerp/exceptions.py
index fbf52c7f3a9..387e126b8c4 100644
--- a/openerp/exceptions.py
+++ b/openerp/exceptions.py
@@ -27,9 +27,17 @@ treated as a 'Server error'.
"""
+import re
+
class Warning(Exception):
pass
+class WarningConfig(Exception):
+ """ Warning bound to a misconfiguration. """
+ def __init__(self, msg):
+ # todo: treat the msg (regex)
+ super(WarningConfig, self).__init__(msg)
+
class AccessDenied(Exception):
""" Login/password error. No message, no traceback. """
def __init__(self):
diff --git a/openerp/netsvc.py b/openerp/netsvc.py
index 533b1659191..3362b86fac7 100644
--- a/openerp/netsvc.py
+++ b/openerp/netsvc.py
@@ -107,7 +107,7 @@ class ExportService(object):
"""
_services = {}
-
+
def __init__(self, name):
ExportService._services[name] = self
self.__name = name
@@ -306,6 +306,8 @@ def dispatch_rpc(service_name, method, params):
raise
except openerp.exceptions.Warning:
raise
+ except openerp.exceptions.WarningConfig:
+ raise
except openerp.exceptions.DeferredException, e:
_logger.exception(tools.exception_to_unicode(e))
post_mortem(e.traceback)
diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py
index af89a734f28..f87274ef6e6 100644
--- a/openerp/service/netrpc_server.py
+++ b/openerp/service/netrpc_server.py
@@ -15,7 +15,7 @@
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
+# along with this program. If not, see .
#
##############################################################################
@@ -145,7 +145,7 @@ class TinySocketClientThread(threading.Thread):
break
except Exception, e:
try:
- valid_exception = Exception(netrpc_handle_exception_legacy(e))
+ valid_exception = Exception(netrpc_handle_exception_legacy(e))
valid_traceback = getattr(e, 'traceback', sys.exc_info())
formatted_traceback = "".join(traceback.format_exception(*valid_traceback))
_logger.debug("netrpc: communication-level exception", exc_info=True)
@@ -164,12 +164,14 @@ class TinySocketClientThread(threading.Thread):
def stop(self):
self.running = False
-
+
def netrpc_handle_exception_legacy(e):
if isinstance(e, openerp.osv.osv.except_osv):
return 'warning -- ' + e.name + '\n\n' + e.value
if isinstance(e, openerp.exceptions.Warning):
return 'warning -- Warning\n\n' + str(e)
+ if isinstance(e, openerp.exceptions.WarningConfig):
+ return 'warning -- Warning\n\n' + str(e)
if isinstance(e, openerp.exceptions.AccessError):
return 'warning -- AccessError\n\n' + str(e)
if isinstance(e, openerp.exceptions.AccessDenied):
diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py
index 67436a1c0bf..e83f06cc264 100644
--- a/openerp/service/wsgi_server.py
+++ b/openerp/service/wsgi_server.py
@@ -95,6 +95,8 @@ def xmlrpc_handle_exception(e):
response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
elif isinstance(e, openerp.exceptions.Warning):
fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e))
+ elif isinstance(e, openerp.exceptions.WarningConfig):
+ fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e))
response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
elif isinstance (e, openerp.exceptions.AccessError):
fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_ERROR, str(e))
@@ -311,7 +313,7 @@ def http_to_wsgi(http_dir):
handler.auth_provider.checkRequest(handler, path)
except websrv_lib.AuthRequiredExc, ae:
# Darwin 9.x.x webdav clients will report "HTTP/1.0" to us, while they support (and need) the
- # authorisation features of HTTP/1.1
+ # authorisation features of HTTP/1.1
if request_version != 'HTTP/1.1' and ('Darwin/9.' not in handler.headers.get('User-Agent', '')):
start_response("403 Forbidden", [])
return []