Put back stuff removed by merge

bzr revid: nicolas.vanhoren@openerp.com-20130607103749-7pe6k3vgwudohnxo
This commit is contained in:
niv-openerp 2013-06-07 12:37:49 +02:00
parent 956a05e0f2
commit 9b1904e892
3 changed files with 42 additions and 19 deletions

View File

@ -34,6 +34,9 @@ import openerp
import session
import inspect
import functools
_logger = logging.getLogger(__name__)
#----------------------------------------------------------
@ -197,10 +200,10 @@ class JsonRequest(WebRequest):
else:
self.jsonrequest = simplejson.loads(request, object_hook=reject_nonliteral)
self.init(self.jsonrequest.get("params", {}))
if _logger.isEnabledFor(logging.DEBUG):
_logger.debug("--> %s.%s\n%s", method.im_class.__name__, method.__name__, pprint.pformat(self.jsonrequest))
#if _logger.isEnabledFor(logging.DEBUG):
# _logger.debug("--> %s.%s\n%s", method.im_class.__name__, method.__name__, pprint.pformat(self.jsonrequest))
response['id'] = self.jsonrequest.get('id')
response["result"] = method(self, **self.params)
response["result"] = method(**self.params)
except session.AuthenticationError, e:
se = serialize_exception(e)
error = {
@ -292,9 +295,9 @@ class HttpRequest(WebRequest):
akw[key] = value
else:
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:
r = method(self, **self.params)
r = method(**self.params)
except Exception, e:
_logger.exception("An exception occured during an http request")
se = serialize_exception(e)
@ -380,6 +383,19 @@ controllers_path = {}
class ControllerType(type):
def __init__(cls, 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)
controllers_class.append(name_class)
path = attrs.get('_cp_path')
@ -397,6 +413,12 @@ class Controller(object):
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
#----------------------------------------------------------
@ -625,6 +647,7 @@ class Root(object):
method = getattr(c, method_name, None)
if method:
exposed = getattr(method, 'exposed', False)
method = c.get_wrapped_method(method_name)
if exposed == 'json':
_logger.debug("Dispatch json to %s %s %s", ps, c, method_name)
def fct(_request):

View File

@ -21,17 +21,17 @@ class TestDataSetController(unittest2.TestCase):
self.read.return_value = []
self.assertEqual(
self.dataset.do_search_read(self.request, 'fake.model'),
self.dataset.do_search_read('fake.model'),
{'records': [], 'length': 0})
self.read.assert_called_once_with(
[], False, self.request.context)
[], False, req.context)
def test_regular_find(self):
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(
[1, 2, 3], False,self.request.context)
[1, 2, 3], False, req.context)
def test_ids_shortcut(self):
self.search.return_value = [1, 2, 3]
@ -42,6 +42,6 @@ class TestDataSetController(unittest2.TestCase):
]
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})
self.assertFalse(self.read.called)

View File

@ -21,7 +21,7 @@ class LoadTest(unittest2.TestCase):
# Have self.request.session.model() return a different mock object for
# each model (but always the same mock for a given model name)
models = collections.defaultdict(mock.Mock)
model = self.request.session.model.side_effect = \
model = req.session.model.side_effect = \
lambda model_name: models[model_name]
self.MockMenus = model('ir.ui.menu')
@ -31,7 +31,7 @@ class LoadTest(unittest2.TestCase):
}]
def tearDown(self):
del self.request
self.tmp_req.__exit__()
del self.MockMenus
del self.menu
@ -39,11 +39,11 @@ class LoadTest(unittest2.TestCase):
self.MockMenus.search.return_value = []
self.MockMenus.read.return_value = []
root = self.menu.load(self.request)
root = self.menu.load()
self.MockMenus.search.assert_called_with(
[('parent_id','=', False)], 0, False, False,
self.request.context)
req.context)
self.assertEqual(root['all_menu_ids'], [])
@ -59,16 +59,16 @@ class LoadTest(unittest2.TestCase):
{'id': 2, 'sequence': 3, 'parent_id': False},
]
root = self.menu.load(self.request)
root = self.menu.load()
self.MockMenus.search.assert_called_with(
[('id','child_of', [1, 2, 3])], 0, False, False,
self.request.context)
req.context)
self.MockMenus.read.assert_called_with(
[1, 2, 3], ['name', 'sequence', 'parent_id',
'action'],
self.request.context)
req.context)
self.assertEqual(root['all_menu_ids'], [1, 2, 3])
@ -98,11 +98,11 @@ class LoadTest(unittest2.TestCase):
{'id': 4, 'sequence': 2, 'parent_id': [2, '']},
])
root = self.menu.load(self.request)
root = self.menu.load()
self.MockMenus.search.assert_called_with(
[('id','child_of', [1])], 0, False, False,
self.request.context)
req.context)
self.assertEqual(root['all_menu_ids'], [1, 2, 3, 4])