Skip to main content

AutoMD is a documentation library for Flask APIs build with FlaskRESTful and Webargs.

Project description

AutoMD

AutoMD is a documentation library for Flask APIs build with FlaskRESTful and Webargs. Endpoint parameters and basic responses are automatically parsed into the OpenAPI specification, using Type Hints and introspection, and a endpoints registered to serve the specification.

Motivation

Documentation libraries tend to rely heavily on elaborate docstrings and static generation from source code. This library requires minimal changes to existing code, and most information (especially parameter specs) doesn't rely on keeping disparate strings up to date.

Usage

AutoMD registration/initialization

The first step is to initialize the AutoMD app from a FlaskRESTful Api.

app: Flask = Flask(__name__)
api: Api = Api(app)

spec: AutoMDApp = AutoMDApp(api, "AutoMD Test App", "1.0.0", "3.0.0")

After that, all that is required is adding the @automd decorator to an existing Resource endpoint.

class MinimalStatus(Resource):
    get_query_arguments = {
        "text": fields.String(required=False)
    }

    @automd()
    @use_kwargs(get_query_arguments)
    def get(self, text):
        return text

which will mark the endpoint for inclusion in the OpenAPI spec. In this example, the spec information will be pretty limited, but will still have the API url, argument, and a default value.

With more complete python annotations, more information can be gleaned:

class IntrospectionStatus(Resource):
    post_query_arguments = {
        "text": fields.String(required=False)
    }

    @automd()
    @use_kwargs(post_query_arguments, location="json")
    def post(self, text: str = "Hello AutoMD") -> str:
        ret_text: str = "status check OK"

        if text is not None:
            ret_text = f"{ret_text}: {text}"

        return ret_text

From this the APISpec also get the parameter type, default value, and API response type. It does not get the parameter location yet though, that takes more aguements to automd.

Filling in more information in the webargs fields, automd decorator, use_kwargs decorator, and using one of the AutoMD response classes for type annotation and gives even better information:

class Status(Resource):
    get_query_arguments = {
        "text": fields.String(required=False, description='Text to return', doc_default="Hello AutoMD")
    }

    @automd(parameter_schema=get_query_arguments,
             summary="Status Endpoint",
             description="Status Endpoint, responds with a message made from the input string")
    @use_kwargs(get_query_arguments, location="query")
    def get(self, text: str = None) -> ValueResponse:
        log_text: str = "status check OK"

        log_text = f"{log_text}: {text or 'Hello AutoMD'}"

        return ValueResponse(log_text)

With this information, argument types, return types, summaries, descriptions, detailed default information, and parameter location info (body, query, etc) is included. Summary and description are the only "magic strings" needed, and those will generally not change much or be onerous to keep up to date compared to the automatically grabbed information.

An example Flask API app is provided to showcase some functionality. Start it using run.py.

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

AutoMD-1.0.1.tar.gz (3.1 kB view details)

Uploaded Source

Built Distribution

AutoMD-1.0.1-py3-none-any.whl (3.4 kB view details)

Uploaded Python 3

File details

Details for the file AutoMD-1.0.1.tar.gz.

File metadata

  • Download URL: AutoMD-1.0.1.tar.gz
  • Upload date:
  • Size: 3.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3.post20200330 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.2

File hashes

Hashes for AutoMD-1.0.1.tar.gz
Algorithm Hash digest
SHA256 ffb2cb32ea249023ee7de6ed7dab5dba0a702d7d4d4228b39d10b2840d6881e2
MD5 b459eb201e015615785059f840845ee2
BLAKE2b-256 391d6805bbc38914f52b9c87a749623e8f3c524adb6692df5d72846c41bf732b

See more details on using hashes here.

Provenance

File details

Details for the file AutoMD-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: AutoMD-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 3.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3.post20200330 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.2

File hashes

Hashes for AutoMD-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 06fae305f03ae75421f78b73ec60d135b59a35bb9cb32bc2d3a1b3ed2b60322d
MD5 d37801d97f9c522ccda7632cbba5c4b9
BLAKE2b-256 fae3779b6cdaa26e38f7686698a2d5576b8009abd55640b415663b189a5ca973

See more details on using hashes here.

Provenance

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