coding-kitties / flask-swagger-generator

A simple to use flask swagger generator working with the Flask web framework.
MIT License
6 stars 6 forks source link

Generator class is not composable #9

Open Oracking opened 2 years ago

Oracking commented 2 years ago

Currently, there isn't a way to combine multiple generators to generate one swagger yaml file. This prevents users from being able to split up routes into separate modules.

To illustrate, assume I have one file (view1.py) with a route defined like so:

blueprint = Blueprint('Blueprint1', __name__)

@blueprint.route(...)
def route_1(...):
    ...

And another file (view2.py) with a route defined like so:

blueprint = Blueprint('Blueprint2', __name__)

@blueprint.route(...)
def route_2(...):
    ...

Currently, in a third file (app.py), I can add these blueprints to one app like so:

from flask import Blueprint, jsonify, Flask
from views1 import blueprint as blueprint1
from views2 import blueprint as blueprint2

app = Flask(__name__)
app.register_blueprint(blueprint1)
app.register_blueprint(blueprint2)

This does not work for the swagger generator as it does not have a way to combine different generators to generate a swagger file.

In essence, if we have the following route in (view1.py):

generator = Generator.of(SwaggerVersion.VERSION_THREE)

@generator.request_body(...)
@blueprint.route(...)
def update_object(object_id):
    ...

And this route in (view2.py):

generator = Generator.of(SwaggerVersion.VERSION_THREE)

@generator.request_body(...)
@blueprint.route(...)
def update_object(object_id):
    ...

In a third file, we should be able to do something like this:

from flask_swagger_generator.generators import Generator
from views1 import generator as generator1
from views2 import blueprint as generator2

generator = Generator.compose_from([generator1, generator2])
MDUYN commented 2 years ago

Will open a feature request for this, see linked branch

MDUYN commented 2 years ago

I will work on this branch.