Skip to content

Generator class is not composable #9

Description

@Oracking

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])

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions