flask_star

Porting apistar features to flask


License
BSD-3-Clause
Install
pip install flask_star==0.0.1

Documentation

flask_star

Porting apistar features to flask

Project Scope:

  • API Documentation from flask endpiont function signatures
    • Native Types (functional)
    • URL Parameters (functional)
    • Query parameters (functional)
    • Endpoint groups by flask blueprint (functional)
    • APIStar typesystem support (not functional)
  • Dependency injection
    • Builtin components (not functional)
    • User defined component framework (not functional)

API Documentation

Goals for api documentation are to dynamically produce accurate documentation automatically from function signatures and type declarations. A minimal working example is below

from flask import Flask
from flask_star import Documentation

app = Flask(__name__)

@app.route('/welcome/{name}')
def welcome(name: str, title: str = ''):
    return f'Welcome {title} {name}'

if __name__ == '__main__':
    api_docs = Documentation(app,
                             title='flask_star',
                             description='Basic flask_star example',
                             version='0.0.1',
                             static_dir='static/',
                             docs_route='/docs/')
    print(api_docs)
    app.run(debug=True, port=5000)

Generates browser viewable documentation myimage And a corresponding openapi specification at /<docs_route>/openapi.json

{                                                                 
    "openapi": "3.0.0",                                           
    "info": {                                                     
        "title": "flask_star",                                    
        "description": "Basic flask_star example",                
        "version": ""                                             
    },                                                            
    "paths": {                                                    
        "/welcome/{name}": {                                      
            "get": {                                              
                "operationId": "welcome",                         
                "parameters": [                                   
                    {                                             
                        "name": "name",                           
                        "in": "path",                             
                        "required": true,                         
                        "schema": {                               
                            "type": "string"                      
                        }                                         
                    },                                            
                    {                                             
                        "name": "title",                          
                        "in": "query",                            
                        "schema": {                               
                            "type": "string"                      
                        }                                         
                    }                                             
                ]                                                 
            }                                                     
        }                                                         
    }                                                             
}