[IMP] search_read: use search_read from the orm instead of rewritting it

skip search_count when getting no result from search_read
remove useless test based on implementation details

bzr revid: mat@openerp.com-20140117120047-9b5emsrbtjauvegl
This commit is contained in:
Martin Trigaux 2014-01-17 13:00:47 +01:00
parent 7b2948c3bc
commit 4b7799c0c7
3 changed files with 9 additions and 56 deletions

View File

@ -1055,21 +1055,17 @@ class DataSet(http.Controller):
"""
Model = request.session.model(model)
ids = Model.search(domain, offset or 0, limit or False, sort or False,
records = Model.search_read(domain, fields, offset or 0, limit or False, sort or False,
request.context)
if limit and len(ids) == limit:
if not records:
return {
'length': 0,
'records': []
}
if limit and len(records) == limit:
length = Model.search_count(domain, request.context)
else:
length = len(ids) + (offset or 0)
if fields and fields == ['id']:
# shortcut read if we only want the ids
return {
'length': length,
'records': [{'id': id} for id in ids]
}
records = Model.read(ids, fields or False, request.context)
records.sort(key=lambda obj: ids.index(obj['id']))
length = len(records) + (offset or 0)
return {
'length': length,
'records': records

View File

@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
from . import test_dataset, test_menu, test_serving_base, test_js
from . import test_menu, test_serving_base, test_js
fast_suite = []
checks = [
test_dataset,
test_menu,
test_serving_base,
]

View File

@ -1,42 +0,0 @@
# -*- coding: utf-8 -*-
from . import common
import openerp.addons.web.controllers.main
from openerp.http import request as req
class TestDataSetController(common.MockRequestCase):
def setUp(self):
super(TestDataSetController, self).setUp()
self.dataset = openerp.addons.web.controllers.main.DataSet()
self.read = req.session.model().read
self.search = req.session.model().search
def test_empty_find(self):
self.search.return_value = []
self.read.return_value = []
self.assertEqual(
self.dataset.do_search_read('fake.model'),
{'records': [], 'length': 0})
self.read.assert_called_once_with(
[], False, req.context)
def test_regular_find(self):
self.search.return_value = [1, 2, 3]
self.dataset.do_search_read('fake.model')
self.read.assert_called_once_with(
[1, 2, 3], False, req.context)
def test_ids_shortcut(self):
self.search.return_value = [1, 2, 3]
self.read.return_value = [
{'id': 1, 'name': 'foo'},
{'id': 2, 'name': 'bar'},
{'id': 3, 'name': 'qux'}
]
self.assertEqual(
self.dataset.do_search_read('fake.model', ['id']),
{'records': [{'id': 1}, {'id': 2}, {'id': 3}], 'length': 3})
self.assertFalse(self.read.called)