def _bind_args(self, url_map, resources, middlewares, render_factory): super(Route, self).bind(url_map, rebind=True) url_args = set(self.arguments) builtin_args = set(RESERVED_ARGS) resource_args = set(resources.keys()) tmp_avail_args = {'url': url_args, 'builtins': builtin_args, 'resources': resource_args} check_middlewares(middlewares, tmp_avail_args) provided = resource_args | builtin_args | url_args if callable(render_factory) and self.render_arg is not None \ and not callable(self.render_arg): _render = render_factory(self.render_arg) elif callable(self._render): _render = self._render else: _render = lambda context: context _execute = make_middleware_chain(middlewares, self.endpoint, _render, provided) self._resources.update(resources) self._middlewares = middlewares self._render_factory = render_factory self._render = _render self._execute = _execute
def __init__(self, routes=None, resources=None, render_factory=None, middlewares=None, error_handlers=None, **map_kwargs): map_kwargs.pop('rules', None) super(Application, self).__init__(**map_kwargs) routes = routes or [] self.error_handlers = dict(error_handlers or {}) self.routes = [] self.resources = dict(resources or {}) resource_conflicts = [r for r in RESERVED_ARGS if r in self.resources] if resource_conflicts: raise NameError('resource names conflict with builtins: %r', resource_conflicts) self.middlewares = list(middlewares or []) check_middlewares(self.middlewares) self.render_factory = render_factory self.endpoint_args = {} self._map_kwargs = map_kwargs for entry in routes: self.add(entry)