Add initial swagger.json endpoint for API
probably this needs more, but good enough to test with
This commit is contained in:
parent
26a6a4d991
commit
c18367739f
|
@ -50,6 +50,7 @@ install_requires =
|
||||||
colander
|
colander
|
||||||
ColanderAlchemy
|
ColanderAlchemy
|
||||||
cornice
|
cornice
|
||||||
|
cornice-swagger
|
||||||
humanize
|
humanize
|
||||||
Mako
|
Mako
|
||||||
markdown
|
markdown
|
||||||
|
|
|
@ -31,6 +31,8 @@ from rattail.db import model
|
||||||
from rattail.mail import send_email
|
from rattail.mail import send_email
|
||||||
|
|
||||||
from cornice import Service
|
from cornice import Service
|
||||||
|
from cornice.service import get_services
|
||||||
|
from cornice_swagger import CorniceSwagger
|
||||||
|
|
||||||
import tailbone
|
import tailbone
|
||||||
from tailbone import forms
|
from tailbone import forms
|
||||||
|
@ -109,12 +111,22 @@ class CommonView(APIView):
|
||||||
|
|
||||||
return {'error': "Form did not validate!"}
|
return {'error': "Form did not validate!"}
|
||||||
|
|
||||||
|
def swagger(self):
|
||||||
|
doc = CorniceSwagger(get_services())
|
||||||
|
app = self.get_rattail_app()
|
||||||
|
spec = doc.generate(f"{app.get_node_title()} API docs",
|
||||||
|
app.get_version(),
|
||||||
|
base_path='/api') # TODO
|
||||||
|
return spec
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def defaults(cls, config):
|
def defaults(cls, config):
|
||||||
cls._common_defaults(config)
|
cls._common_defaults(config)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _common_defaults(cls, config):
|
def _common_defaults(cls, config):
|
||||||
|
rattail_config = config.registry.settings.get('rattail_config')
|
||||||
|
app = rattail_config.get_app()
|
||||||
|
|
||||||
# about
|
# about
|
||||||
about = Service(name='about', path='/about')
|
about = Service(name='about', path='/about')
|
||||||
|
@ -127,6 +139,14 @@ class CommonView(APIView):
|
||||||
permission='common.feedback')
|
permission='common.feedback')
|
||||||
config.add_cornice_service(feedback)
|
config.add_cornice_service(feedback)
|
||||||
|
|
||||||
|
# swagger
|
||||||
|
swagger = Service(name='swagger',
|
||||||
|
path='/swagger.json',
|
||||||
|
description=f"OpenAPI documentation for {app.get_title()}")
|
||||||
|
swagger.add_view('GET', 'swagger', klass=cls,
|
||||||
|
permission='common.api_swagger')
|
||||||
|
config.add_cornice_service(swagger)
|
||||||
|
|
||||||
|
|
||||||
def defaults(config, **kwargs):
|
def defaults(config, **kwargs):
|
||||||
base = globals()
|
base = globals()
|
||||||
|
|
|
@ -275,6 +275,11 @@ class CommonView(View):
|
||||||
config.add_tailbone_permission('common', 'common.edit_help',
|
config.add_tailbone_permission('common', 'common.edit_help',
|
||||||
"Edit help info for *any* page")
|
"Edit help info for *any* page")
|
||||||
|
|
||||||
|
# API swagger
|
||||||
|
if rattail_config.getbool('tailbone', 'expose_api_swagger'):
|
||||||
|
config.add_tailbone_permission('common', 'common.api_swagger',
|
||||||
|
"Explore the API with Swagger tools")
|
||||||
|
|
||||||
# home
|
# home
|
||||||
config.add_route('home', '/')
|
config.add_route('home', '/')
|
||||||
config.add_view(cls, attr='home', route_name='home', renderer='/home.mako')
|
config.add_view(cls, attr='home', route_name='home', renderer='/home.mako')
|
||||||
|
|
Loading…
Reference in a new issue