From b40a8f34eabffdbcf94331f3a869a460c6d036af Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 31 Oct 2013 00:00:43 +0100 Subject: [PATCH] [IMP] model convert for routes, to directly get the browse record example @route(['/job/detail/'], type='http', auth="user") bzr revid: al@openerp.com-20131030230043-4fohcd1wdjc10ip7 --- openerp/http.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/openerp/http.py b/openerp/http.py index f84d17cebf6..54a00df7e69 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -844,6 +844,23 @@ def session_path(): raise return path +class ModelConverter(routing.BaseConverter): + + def __init__(self, url_map, model=False): + super(ModelConverter, self).__init__(url_map) + self.model = model + # TODO add support for slug in the form [A-Za-z0-9-] bla-bla-89 -> id 89 + self.regex = '([0-9]+)' + + def to_python(self, value): + # TODO: + # - raise routing.ValidationError() if no browse record can be createdm + # - support slug + return request.registry[self.model].browse(request.cr, request.uid, int(value), context=request.context) + + def to_url(self, value): + return value.id + class Root(object): """Root WSGI application for the OpenERP Web Client. """ @@ -965,7 +982,7 @@ class Root(object): def _build_router(self, db): _logger.info("Generating routing configuration for database %s" % db) - routing_map = routing.Map(strict_slashes=False) + routing_map = routing.Map(strict_slashes=False, converters={'model': ModelConverter}) def gen(modules, nodb_only): for module in modules: @@ -1028,14 +1045,16 @@ class Root(object): """ path = request.httprequest.path urls = self.get_db_router(request.db).bind("") - func, arguments = urls.match(path) - arguments = dict([(k, v) for k, v in arguments.items() if not k.startswith("_ignored_")]) + # TODO ugly hack please fix it niv + func, _ = urls.match(path) @service_model.check def checked_call(dbname, *a, **kw): return func(*a, **kw) def nfunc(*args, **kwargs): + _, arguments = urls.match(path) + arguments = dict([(k, v) for k, v in arguments.items() if not k.startswith("_ignored_")]) kwargs.update(arguments) if getattr(func, '_first_arg_is_req', False): args = (request,) + args