[FIX] routing_map crossdb bug introduced in Rev: 5151 revid:fme@openerp.com-20140120153614-t8l7tfit686ehfn0
bzr revid: fme@openerp.com-20140121195348-mcdreqjo3kod0p7i
This commit is contained in:
parent
658ed76a84
commit
f8281bce0b
|
@ -483,6 +483,13 @@ class ControllerType(type):
|
||||||
class Controller(object):
|
class Controller(object):
|
||||||
__metaclass__ = ControllerType
|
__metaclass__ = ControllerType
|
||||||
|
|
||||||
|
class EndPoint(object):
|
||||||
|
def __init__(self, method, routing):
|
||||||
|
self.method = method
|
||||||
|
self.routing = routing
|
||||||
|
def __call__(self, *args, **kw):
|
||||||
|
return self.method(*args, **kw)
|
||||||
|
|
||||||
def routing_map(modules, nodb_only, converters=None):
|
def routing_map(modules, nodb_only, converters=None):
|
||||||
routing_map = werkzeug.routing.Map(strict_slashes=False, converters=converters)
|
routing_map = werkzeug.routing.Map(strict_slashes=False, converters=converters)
|
||||||
for module in modules:
|
for module in modules:
|
||||||
|
@ -500,21 +507,22 @@ def routing_map(modules, nodb_only, converters=None):
|
||||||
members = inspect.getmembers(o)
|
members = inspect.getmembers(o)
|
||||||
for mk, mv in members:
|
for mk, mv in members:
|
||||||
if inspect.ismethod(mv) and hasattr(mv, 'routing'):
|
if inspect.ismethod(mv) and hasattr(mv, 'routing'):
|
||||||
routing = dict(type='http', auth='user', methods=None)
|
routing = dict(type='http', auth='user', methods=None, routes=None)
|
||||||
for claz in reversed(mv.im_class.mro()):
|
for claz in reversed(mv.im_class.mro()):
|
||||||
fn = getattr(claz, mv.func_name, None)
|
fn = getattr(claz, mv.func_name, None)
|
||||||
if fn and hasattr(fn, 'routing'):
|
if fn and hasattr(fn, 'routing'):
|
||||||
routing.update(fn.routing)
|
routing.update(fn.routing)
|
||||||
mv.routing.update(routing)
|
if not nodb_only or nodb_only == (routing['auth'] == "none"):
|
||||||
assert 'routes' in mv.routing
|
assert routing['routes'], "Method %r has not route defined" % mv
|
||||||
if not nodb_only or nodb_only == (mv.routing['auth'] == "none"):
|
endpoint = EndPoint(mv, routing)
|
||||||
for url in mv.routing['routes']:
|
for url in routing['routes']:
|
||||||
if mv.routing.get("combine", False):
|
if routing.get("combine", False):
|
||||||
# deprecated
|
# deprecated
|
||||||
url = o._cp_path.rstrip('/') + '/' + url.lstrip('/')
|
url = o._cp_path.rstrip('/') + '/' + url.lstrip('/')
|
||||||
if url.endswith("/") and len(url) > 1:
|
if url.endswith("/") and len(url) > 1:
|
||||||
url = url[: -1]
|
url = url[: -1]
|
||||||
routing_map.add(werkzeug.routing.Rule(url, endpoint=mv, methods=mv.routing['methods']))
|
|
||||||
|
routing_map.add(werkzeug.routing.Rule(url, endpoint=endpoint, methods=routing['methods']))
|
||||||
return routing_map
|
return routing_map
|
||||||
|
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue