Put back stuff removed by merge
bzr revid: nicolas.vanhoren@openerp.com-20130607103749-7pe6k3vgwudohnxo
This commit is contained in:
parent
956a05e0f2
commit
9b1904e892
|
@ -34,6 +34,9 @@ import openerp
|
||||||
|
|
||||||
import session
|
import session
|
||||||
|
|
||||||
|
import inspect
|
||||||
|
import functools
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
|
@ -197,10 +200,10 @@ class JsonRequest(WebRequest):
|
||||||
else:
|
else:
|
||||||
self.jsonrequest = simplejson.loads(request, object_hook=reject_nonliteral)
|
self.jsonrequest = simplejson.loads(request, object_hook=reject_nonliteral)
|
||||||
self.init(self.jsonrequest.get("params", {}))
|
self.init(self.jsonrequest.get("params", {}))
|
||||||
if _logger.isEnabledFor(logging.DEBUG):
|
#if _logger.isEnabledFor(logging.DEBUG):
|
||||||
_logger.debug("--> %s.%s\n%s", method.im_class.__name__, method.__name__, pprint.pformat(self.jsonrequest))
|
# _logger.debug("--> %s.%s\n%s", method.im_class.__name__, method.__name__, pprint.pformat(self.jsonrequest))
|
||||||
response['id'] = self.jsonrequest.get('id')
|
response['id'] = self.jsonrequest.get('id')
|
||||||
response["result"] = method(self, **self.params)
|
response["result"] = method(**self.params)
|
||||||
except session.AuthenticationError, e:
|
except session.AuthenticationError, e:
|
||||||
se = serialize_exception(e)
|
se = serialize_exception(e)
|
||||||
error = {
|
error = {
|
||||||
|
@ -292,9 +295,9 @@ class HttpRequest(WebRequest):
|
||||||
akw[key] = value
|
akw[key] = value
|
||||||
else:
|
else:
|
||||||
akw[key] = type(value)
|
akw[key] = type(value)
|
||||||
_logger.debug("%s --> %s.%s %r", self.httprequest.method, method.im_class.__name__, method.__name__, akw)
|
#_logger.debug("%s --> %s.%s %r", self.httprequest.method, method.im_class.__name__, method.__name__, akw)
|
||||||
try:
|
try:
|
||||||
r = method(self, **self.params)
|
r = method(**self.params)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
_logger.exception("An exception occured during an http request")
|
_logger.exception("An exception occured during an http request")
|
||||||
se = serialize_exception(e)
|
se = serialize_exception(e)
|
||||||
|
@ -380,6 +383,19 @@ controllers_path = {}
|
||||||
class ControllerType(type):
|
class ControllerType(type):
|
||||||
def __init__(cls, name, bases, attrs):
|
def __init__(cls, name, bases, attrs):
|
||||||
super(ControllerType, cls).__init__(name, bases, attrs)
|
super(ControllerType, cls).__init__(name, bases, attrs)
|
||||||
|
|
||||||
|
# create wrappers for old-style methods with req as first argument
|
||||||
|
cls._methods_wrapper = {}
|
||||||
|
for k, v in attrs.items():
|
||||||
|
if inspect.isfunction(v):
|
||||||
|
spec = inspect.getargspec(v)
|
||||||
|
first_arg = spec.args[1] if len(spec.args) >= 2 else None
|
||||||
|
if first_arg in ["req", "request"]:
|
||||||
|
def build_new(nv):
|
||||||
|
return lambda self, *args, **kwargs: nv(self, request, *args, **kwargs)
|
||||||
|
cls._methods_wrapper[k] = build_new(v)
|
||||||
|
|
||||||
|
# store the controller in the controllers list
|
||||||
name_class = ("%s.%s" % (cls.__module__, cls.__name__), cls)
|
name_class = ("%s.%s" % (cls.__module__, cls.__name__), cls)
|
||||||
controllers_class.append(name_class)
|
controllers_class.append(name_class)
|
||||||
path = attrs.get('_cp_path')
|
path = attrs.get('_cp_path')
|
||||||
|
@ -397,6 +413,12 @@ class Controller(object):
|
||||||
|
|
||||||
return object.__new__(cls)
|
return object.__new__(cls)
|
||||||
|
|
||||||
|
def get_wrapped_method(self, name):
|
||||||
|
if name in self.__class__._methods_wrapper:
|
||||||
|
return functools.partial(self.__class__._methods_wrapper[name], self)
|
||||||
|
else:
|
||||||
|
return getattr(self, name)
|
||||||
|
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
# Session context manager
|
# Session context manager
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
|
@ -625,6 +647,7 @@ class Root(object):
|
||||||
method = getattr(c, method_name, None)
|
method = getattr(c, method_name, None)
|
||||||
if method:
|
if method:
|
||||||
exposed = getattr(method, 'exposed', False)
|
exposed = getattr(method, 'exposed', False)
|
||||||
|
method = c.get_wrapped_method(method_name)
|
||||||
if exposed == 'json':
|
if exposed == 'json':
|
||||||
_logger.debug("Dispatch json to %s %s %s", ps, c, method_name)
|
_logger.debug("Dispatch json to %s %s %s", ps, c, method_name)
|
||||||
def fct(_request):
|
def fct(_request):
|
||||||
|
|
|
@ -21,17 +21,17 @@ class TestDataSetController(unittest2.TestCase):
|
||||||
self.read.return_value = []
|
self.read.return_value = []
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self.dataset.do_search_read(self.request, 'fake.model'),
|
self.dataset.do_search_read('fake.model'),
|
||||||
{'records': [], 'length': 0})
|
{'records': [], 'length': 0})
|
||||||
self.read.assert_called_once_with(
|
self.read.assert_called_once_with(
|
||||||
[], False, self.request.context)
|
[], False, req.context)
|
||||||
|
|
||||||
def test_regular_find(self):
|
def test_regular_find(self):
|
||||||
self.search.return_value = [1, 2, 3]
|
self.search.return_value = [1, 2, 3]
|
||||||
|
|
||||||
self.dataset.do_search_read(self.request, 'fake.model')
|
self.dataset.do_search_read('fake.model')
|
||||||
self.read.assert_called_once_with(
|
self.read.assert_called_once_with(
|
||||||
[1, 2, 3], False,self.request.context)
|
[1, 2, 3], False, req.context)
|
||||||
|
|
||||||
def test_ids_shortcut(self):
|
def test_ids_shortcut(self):
|
||||||
self.search.return_value = [1, 2, 3]
|
self.search.return_value = [1, 2, 3]
|
||||||
|
@ -42,6 +42,6 @@ class TestDataSetController(unittest2.TestCase):
|
||||||
]
|
]
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self.dataset.do_search_read(self.request, 'fake.model', ['id']),
|
self.dataset.do_search_read('fake.model', ['id']),
|
||||||
{'records': [{'id': 1}, {'id': 2}, {'id': 3}], 'length': 3})
|
{'records': [{'id': 1}, {'id': 2}, {'id': 3}], 'length': 3})
|
||||||
self.assertFalse(self.read.called)
|
self.assertFalse(self.read.called)
|
||||||
|
|
|
@ -21,7 +21,7 @@ class LoadTest(unittest2.TestCase):
|
||||||
# Have self.request.session.model() return a different mock object for
|
# Have self.request.session.model() return a different mock object for
|
||||||
# each model (but always the same mock for a given model name)
|
# each model (but always the same mock for a given model name)
|
||||||
models = collections.defaultdict(mock.Mock)
|
models = collections.defaultdict(mock.Mock)
|
||||||
model = self.request.session.model.side_effect = \
|
model = req.session.model.side_effect = \
|
||||||
lambda model_name: models[model_name]
|
lambda model_name: models[model_name]
|
||||||
|
|
||||||
self.MockMenus = model('ir.ui.menu')
|
self.MockMenus = model('ir.ui.menu')
|
||||||
|
@ -31,7 +31,7 @@ class LoadTest(unittest2.TestCase):
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
del self.request
|
self.tmp_req.__exit__()
|
||||||
del self.MockMenus
|
del self.MockMenus
|
||||||
del self.menu
|
del self.menu
|
||||||
|
|
||||||
|
@ -39,11 +39,11 @@ class LoadTest(unittest2.TestCase):
|
||||||
self.MockMenus.search.return_value = []
|
self.MockMenus.search.return_value = []
|
||||||
self.MockMenus.read.return_value = []
|
self.MockMenus.read.return_value = []
|
||||||
|
|
||||||
root = self.menu.load(self.request)
|
root = self.menu.load()
|
||||||
|
|
||||||
self.MockMenus.search.assert_called_with(
|
self.MockMenus.search.assert_called_with(
|
||||||
[('parent_id','=', False)], 0, False, False,
|
[('parent_id','=', False)], 0, False, False,
|
||||||
self.request.context)
|
req.context)
|
||||||
|
|
||||||
self.assertEqual(root['all_menu_ids'], [])
|
self.assertEqual(root['all_menu_ids'], [])
|
||||||
|
|
||||||
|
@ -59,16 +59,16 @@ class LoadTest(unittest2.TestCase):
|
||||||
{'id': 2, 'sequence': 3, 'parent_id': False},
|
{'id': 2, 'sequence': 3, 'parent_id': False},
|
||||||
]
|
]
|
||||||
|
|
||||||
root = self.menu.load(self.request)
|
root = self.menu.load()
|
||||||
|
|
||||||
self.MockMenus.search.assert_called_with(
|
self.MockMenus.search.assert_called_with(
|
||||||
[('id','child_of', [1, 2, 3])], 0, False, False,
|
[('id','child_of', [1, 2, 3])], 0, False, False,
|
||||||
self.request.context)
|
req.context)
|
||||||
|
|
||||||
self.MockMenus.read.assert_called_with(
|
self.MockMenus.read.assert_called_with(
|
||||||
[1, 2, 3], ['name', 'sequence', 'parent_id',
|
[1, 2, 3], ['name', 'sequence', 'parent_id',
|
||||||
'action'],
|
'action'],
|
||||||
self.request.context)
|
req.context)
|
||||||
|
|
||||||
self.assertEqual(root['all_menu_ids'], [1, 2, 3])
|
self.assertEqual(root['all_menu_ids'], [1, 2, 3])
|
||||||
|
|
||||||
|
@ -98,11 +98,11 @@ class LoadTest(unittest2.TestCase):
|
||||||
{'id': 4, 'sequence': 2, 'parent_id': [2, '']},
|
{'id': 4, 'sequence': 2, 'parent_id': [2, '']},
|
||||||
])
|
])
|
||||||
|
|
||||||
root = self.menu.load(self.request)
|
root = self.menu.load()
|
||||||
|
|
||||||
self.MockMenus.search.assert_called_with(
|
self.MockMenus.search.assert_called_with(
|
||||||
[('id','child_of', [1])], 0, False, False,
|
[('id','child_of', [1])], 0, False, False,
|
||||||
self.request.context)
|
req.context)
|
||||||
|
|
||||||
self.assertEqual(root['all_menu_ids'], [1, 2, 3, 4])
|
self.assertEqual(root['all_menu_ids'], [1, 2, 3, 4])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue