From 57c5f8ba5ea598d1e81682a52b3babc20f69f201 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Mon, 26 Nov 2018 22:08:29 -0600 Subject: [PATCH] Add support for basic web API app --- rattail_demo/web/webapi.py | 52 ++++++++++++++++++++++++++++++++++++++ setup.py | 1 + 2 files changed, 53 insertions(+) create mode 100644 rattail_demo/web/webapi.py diff --git a/rattail_demo/web/webapi.py b/rattail_demo/web/webapi.py new file mode 100644 index 0000000..591b2e6 --- /dev/null +++ b/rattail_demo/web/webapi.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8; -*- +""" +Rattail Demo web API +""" + +from __future__ import unicode_literals, absolute_import + +from pyramid.config import Configurator +from pyramid.authentication import SessionAuthenticationPolicy + +from tailbone import app +from tailbone.auth import TailboneAuthorizationPolicy + + +def main(global_config, **settings): + """ + This function returns a Pyramid WSGI application. + """ + # make config objects + rattail_config = app.make_rattail_config(settings) + pyramid_config = Configurator(settings=settings, root_factory=app.Root) + + # configure user authorization / authentication + pyramid_config.set_authorization_policy(TailboneAuthorizationPolicy()) + pyramid_config.set_authentication_policy(SessionAuthenticationPolicy()) + + # always require CSRF token protection + pyramid_config.set_default_csrf_options(require_csrf=True, token='_csrf', header='X-XSRF-TOKEN') + + # bring in some Pyramid goodies + pyramid_config.include('tailbone.beaker') + pyramid_config.include('pyramid_tm') + pyramid_config.include('cornice') + + # bring in the pyramid_retry logic, if available + # TODO: pretty soon we can require this package, hopefully.. + try: + import pyramid_retry + except ImportError: + pass + else: + pyramid_config.include('pyramid_retry') + + # add some permissions magic + pyramid_config.add_directive('add_tailbone_permission_group', 'tailbone.auth.add_permission_group') + pyramid_config.add_directive('add_tailbone_permission', 'tailbone.auth.add_permission') + + # bring in some Tailbone + pyramid_config.include('tailbone.subscribers') + pyramid_config.include('tailbone.api') + + return pyramid_config.make_wsgi_app() diff --git a/setup.py b/setup.py index 18e4bc7..3881c09 100644 --- a/setup.py +++ b/setup.py @@ -77,6 +77,7 @@ setup( entry_points = { 'paste.app_factory': [ 'main = rattail_demo.web.app:main', + 'webapi = rattail_demo.web.webapi:main', ], 'rattail.config.extensions': [ 'rattail-demo = rattail_demo.config:DemoConfigExtension',