def request(path, method, data): """Fakes the web request. Useful when infobase is not run as a separate process. """ web.ctx.infobase_localmode = True web.ctx.infobase_input = data or {} web.ctx.infobase_method = method def get_class(classname): if '.' in classname: modname, classname = classname.rsplit('.', 1) mod = __import__(modname, None, None, ['x']) fvars = mod.__dict__ else: fvars = globals() return fvars[classname] try: # hack to make cache work for local infobase connections cache.loadhook() for pattern, classname in web.group(app.mapping, 2): m = web.re_compile('^' + pattern + '$').match(path) if m: args = m.groups() cls = get_class(classname) tocall = getattr(cls(), method) return tocall(*args) raise web.notfound() finally: # hack to make cache work for local infobase connections cache.unloadhook()
def request(path, method, data): """Fakes the web request. Useful when infobase is not run as a separate process. """ web.ctx.infobase_localmode = True web.ctx.infobase_input = data or {} web.ctx.infobase_method = method def get_class(classname): if '.' in classname: modname, classname = classname.rsplit('.', 1) mod = __import__(modname, None, None, ['x']) fvars = mod.__dict__ else: fvars = globals() return fvars[classname] try: # hack to make cache work for local infobase connections cache.loadhook() mapping = app.mapping # Before web.py<0.36, the mapping is a list and need to be grouped. # From web.py 0.36 onwards, the mapping is already grouped. # Checking the type to see if we need to group them here. if mapping and not isinstance(mapping[0], (list, tuple)): mapping = web.group(mapping, 2) for pattern, classname in mapping: m = web.re_compile('^' + pattern + '$').match(path) if m: args = m.groups() cls = get_class(classname) tocall = getattr(cls(), method) return tocall(*args) raise web.notfound() finally: # hack to make cache work for local infobase connections cache.unloadhook()