def create_app(settings_obj=None) -> web.Application: """App factory. Sets up routes and all plugins. :param settings_obj: Object containing optional configuration overrides. May be a Python module or class with uppercased variables. """ config = Config() config.from_object(settings) if settings_obj: # Update with overrides config.from_object(settings_obj) app = web.Application(debug=config.DEBUG) # Store uppercased configuration variables on app app.update(config) # Set up routes routes.setup(app) # Set up cache cache.setup(app) # Use content negotiation middleware to render JSON responses negotiation.setup(app) # Normalize paths: https://aiohttp-utils.readthedocs.org/en/latest/modules/path_norm.html path_norm.setup(app) # Set up Github client github_plugin.setup(app) return app
def __init__(self, *args, **kwargs): super(GameApplication, self).__init__(*args, **kwargs) negotiation.setup(self) aiohttp_jinja2.setup( self, loader=jinja2.FileSystemLoader('/vagrant/templates/')) self.setup_routes() path_norm.setup(self) self.game = Game(self)
def configure_app(app, overrides=None, setup=False): overrides = overrides or {} add_routes(app) if setup: path_norm.setup(app, **overrides) else: middleware = path_norm.normalize_path_middleware(**overrides) app.middlewares.append(middleware)
def test_configuration_through_app_key(self, app, client): add_routes(app) app[CONFIG_KEY] = { 'APPEND_SLASH': False } path_norm.setup(app) res = client.get('/articles', expect_errors=True) assert res.status_code == 404
def setup_routes(app): # test routes app.router.add_route('GET', '/hello', views.hello) app.router.add_route('GET', '/version', views.version) app.router.add_route('GET', '/user/{id:[0-9a-fA-F]{32}}', views.get_user) app.router.add_route('POST', '/validate_profile', views.profile_validation) negotiation.setup(app, renderers=OrderedDict([('application/json', JSONRender()) ])) path_norm.setup(app, merge_slashes=True)
class HelloResource(): async def get(self, request): name = request.GET.get('name', 'World') return response({'message': 'Hello' + name}) with routing.add_route_context(app) as route: route('GET', '/', index) # app.router.add_resource_object('/', HelloResource()) # Content negotiation # negotiation.setup( # app, renderers={ # 'application/json': negotiation.render_json # } # ) path_norm.setup(app) if __name__ == '__main__': # Development server run( app, # app_uri='main:app', # reload=True, port=8000, host='0.0.0.0')
@coroutine def index(request): return Response('Welcome!') class HelloResource: @coroutine def get(self, request): return Response({ 'message': 'Welcome to the API!' }) with routing.add_route_context(app) as route: route('GET', '/', index) with routing.add_resource_context(app, url_prefix='/api/') as route: route('/', HelloResource()) negotiation.setup(app) path_norm.setup(app) if __name__ == "__main__": run( app, app_uri="examples.kitchen_sink:app", reload=True, port=8000 )