Skip to main content

Swagger API Documentation builder for tornado server

Project description

tornado-rest-swagger

FOSSA Status GitHub

PyPI
PyPI
Linux Windows
TravisCI AppVeyor

tornado-rest-swagger: Swagger API Documentation builder for tornado server. Inspired by aiohttp-swagger package (based on this package sources).

Documentation https://github.com/Cluas/tornado-rest-swagger/wiki
Code https://github.com/Cluas/tornado-rest-swagger
Issues https://github.com/Cluas/tornado-rest-swagger/issues
Python version python2.7 and Python 3.4 and above
Swagger Language Specification https://swagger.io/specification

Installation

pip install -U tornado-rest-swagger

What's tornado-rest-swagger

tornado-rest-swagger is a plugin for tornado server that allow to document APIs using Swagger show the Swagger-ui console.

Example

import tornado.ioloop
import tornado.options
import tornado.web

from tornado_swagger.components import components
from tornado_swagger.setup import setup_swagger


class BaseHandler(tornado.web.RequestHandler):
    def data_received(self, chunk):
        pass


class PostsHandler(BaseHandler):
    def get(self):
        """
        ---
        tags:
          - Posts
        summary: List posts
        description: List all posts in feed
        operationId: getPost
        responses:
            '200':
              description: A list of users
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/ArrayOfPostModel'
                application/xml:
                  schema:
                    $ref: '#/components/schemas/ArrayOfPostModel'
                text/plain:
                  schema:
                    type: string
        """

    def post(self):
        """
        ---
        tags:
          - Posts
        summary: Add a new Post to the blog
        operationId: addPost
        requestBody:
          description: Post object that needs to be added to the blog
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostModel'
            application/xml:
              schema:
                $ref: '#/components/schemas/PostModel'
          required: true
        responses:
          '405':
            description: Invalid input
            content: {}
        security:
          - petstore_auth:
              - 'write:pets'
              - 'read:pets'
        """


class PostsDetailsHandler(BaseHandler):
    def get(self, posts_id):
        """
        ---
        tags:
          - Posts
        summary: Find Post by ID
        description: Returns a single post
        operationId: getPostById
        parameters:
          - name: post_id
            in: path
            description: ID of post to return
            required: true
            schema:
              type: integer
              format: int64
        responses:
          '200':
            description: successful operation
            content:
              application/xml:
                schema:
                  $ref: '#/components/schemas/PostModel'
              application/json:
                schema:
                  $ref: '#/components/schemas/PostModel'
          '400':
            description: Invalid ID supplied
            content: {}
          '404':
            description: Pet not found
            content: {}
        security:
          - api_key: []
        """

    def patch(self, posts_id):
        """
        ---
        tags:
          - Posts
        summary: Find Post by ID
        description: Returns a single post
        operationId: getPostById
        parameters:
          - name: post_id
            in: path
            description: ID of post to return
            required: true
            schema:
              type: integer
              format: int64
        requestBody:
          description: Post object that needs to be added to the blog
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostModel'
            application/xml:
              schema:
                $ref: '#/components/schemas/PostModel'
          required: true
        responses:
          '400':
            description: Invalid ID supplied
            content: {}
          '404':
            description: Pet not found
            content: {}
        security:
          - api_key: []
        """

    def delete(self, posts_id):
        """
        ---
        tags:
          - Posts
        summary: Delete Post by ID
        description: Returns a single post
        operationId: getPostById
        parameters:
          - name: post_id
            in: path
            description: ID of post to return
            required: true
            schema:
              type: integer
              format: int64
        responses:
          '200':
            description: successful operation
            content:
              application/json:
                schema:
                  type: object
                  description: Post model representation
                  properties:
                    id:
                      type: integer
                      format: int64
                    title:
                      type: string
                    text:
                      type: string
                    is_visible:
                      type: boolean
                      default: true
          '400':
            description: Invalid ID supplied
            content: {}
          '404':
            description: Pet not found
            content: {}
        """


@components.schemas.register
class PostModel(object):
    """
    ---
    type: object
    description: Post model representation
    properties:
        id:
            type: integer
            format: int64
        title:
            type: string
        text:
            type: string
        is_visible:
            type: boolean
            default: true
    """


@components.schemas.register
class ArrayOfPostModel(object):
    """
    ---
    type: array
    description: Array of Post model representation
    items:
        $ref: '#/components/schemas/PostModel'
    """


@components.security_schemes.register
class JWTToken(object):
    """
    ---
    type: http
    scheme: bearer
    bearerFormat: JWT
    """


class Application(tornado.web.Application):
    _routes = [tornado.web.url(r"/api/posts", PostsHandler), tornado.web.url(r"/api/posts/(\w+)", PostsDetailsHandler)]

    def __init__(self):
        settings = {"debug": True}

        setup_swagger(
            self._routes,
            swagger_url="/doc",
            description="",
            api_version="1.0.0",
            title="Journal API",
            contact=dict(name="test", email="test@domain.com", url="https://www.cluas.me"),
        )
        super(Application, self).__init__(self._routes, **settings)


if __name__ == "__main__":
    tornado.options.define("port", default="8080", help="Port to listen on")
    tornado.options.parse_command_line()

    app = Application()
    app.listen(port=8080)

    tornado.ioloop.IOLoop.current().start()

Version 1.1.3

  • Fully support OpenAPI3.0

Version 1.1.2

  • Support OpenAPI 3.0 Authentication

Version 1.1.1

  • First version released

License

FOSSA Status

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tornado-rest-swagger-1.2.1.tar.gz (8.6 kB view details)

Uploaded Source

Built Distributions

tornado_rest_swagger-1.2.1-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

tornado_rest_swagger-1.2.1-py2-none-any.whl (9.2 kB view details)

Uploaded Python 2

File details

Details for the file tornado-rest-swagger-1.2.1.tar.gz.

File metadata

  • Download URL: tornado-rest-swagger-1.2.1.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/44.1.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/2.7.15

File hashes

Hashes for tornado-rest-swagger-1.2.1.tar.gz
Algorithm Hash digest
SHA256 07cac7b230ff2a829729b5992d3f93345a357568f23761f20f2f3f355caf4311
MD5 e2e399e63d784a443c5f8ad4684cf10a
BLAKE2b-256 a4d08d92a93ec3dbc7f32583ca76e06ee09e22c5f5e16f1fa06b195c03018f47

See more details on using hashes here.

File details

Details for the file tornado_rest_swagger-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: tornado_rest_swagger-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.7

File hashes

Hashes for tornado_rest_swagger-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a7ed0df24d2d4493da5a07234df6b3a8a094eb11de07c7cfe4046cf46085dd82
MD5 b6651782d17dab8a4bd80e92d95af8dd
BLAKE2b-256 4725bdea782eb8679a2eab2ed63af58e3cf1a0ab545977eb77ec959babb8736f

See more details on using hashes here.

File details

Details for the file tornado_rest_swagger-1.2.1-py2-none-any.whl.

File metadata

  • Download URL: tornado_rest_swagger-1.2.1-py2-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/44.1.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/2.7.15

File hashes

Hashes for tornado_rest_swagger-1.2.1-py2-none-any.whl
Algorithm Hash digest
SHA256 5b27f530a44b87a98f1351732afcd8978feb07e1488366cd8c90bb28a0353247
MD5 52e2c0d09a742889568b3ffff6a0e1d8
BLAKE2b-256 ed2b2efd9b1e1955cbd94ce65c3bdb03d88ace9723e02f650392651de58b88c2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page