def preload_state(state: Dict[str, Any], routes: routing.RoutesConfig) -> None: components = get_preloaded_components(routes) for component in components: builder = getattr(component, 'build') pipeline = pipelines.build_pipeline(function=builder, initial_types=[App]) pipelines.run_pipeline(pipeline, state)
def func(environ: Mapping, start_response: Callable) -> Iterator: method = environ['REQUEST_METHOD'] path = environ['PATH_INFO'] lookup_key = method + ' ' + path state = { 'wsgi_environ': environ, 'method': method, 'path': path, 'exception': None, 'view': None, 'url_path_args': {}, } state.update(preloaded) try: try: (state['view'], pipeline, state['url_path_args']) = lookup_cache[lookup_key] except KeyError: (state['view'], pipeline, state['url_path_args']) = lookup_cache[lookup_key] = lookup( path, method) if len(lookup_cache) > lookup_cache_size: lookup_cache.pop(next(iter(lookup_cache))) for function, inputs, output, extra_kwargs in pipeline: # Determine the keyword arguments for each step in the pipeline. kwargs = {} for arg_name, state_key in inputs: kwargs[arg_name] = state[state_key] if extra_kwargs is not None: kwargs.update(extra_kwargs) # Call the function for each step in the pipeline. state[output] = function(**kwargs) except Exception as exc: state['exception'] = exc pipelines.run_pipeline(app.router.exception_pipeline, state) wsgi_response = state['wsgi_response'] start_response(wsgi_response.status, wsgi_response.headers) return wsgi_response.iterator