Python-only replacement for the open-source swagger-codegen code generator
(https://github.com/swagger-api/swagger-codegen).
Copyright (c) 2022-2023 CINCH Enterprises, Ltd. and Rod Pullmann. All rights reserved.
The swagger-python-codegen code generator will generate a Python 3.x SDK code
package for a RESTful API for which an OpenAPI (a.k.a. Swagger) specification
has been generated. An OpenAPI specification is a JSON or YAML document --
required as a local file -- compatible with the OpenAPI Specification standard
version 2.x (see https://swagger.io/specification/v2). The full OpenAPI
specification file for the RESTful API is required as an input to the code
generator.
The heavy lifting for swagger-codegen code generation is accomplished by use
of Mustache templates (see https://mustache.github.io/mustache.5.html).
The swagger-python-codegen code generator uses the Python package pystache
to render Mustache templates. As currently packaged, swagger-python-codegen
uses the templates distributed with a given swagger-codegen release, so has
a dependency on the swagger-codegen release distribution being present
somewhere in the local filesystem. This release directory or JAR file is also
an input to the code generator.
swagger-python-codegen is offered as a replacement for a stock version of the
open-source swagger-codegen-cli code generator in order to:
a) work around various long-standing bugs, which the open-source support team
has neglected to fix or even acknowledge, causing erroneous SDK code to be
generated, and/or
b) allow for a more streamlined SDK package to be generated, omitting various
extraneous file collections not of interest to all users, and/or
c) generate the SDK code in a fraction of the time as the open-source product
takes.
The SDK code (and other files) generated by swagger-python-codegen is
functionally equivalent to what is generated by the stock swagger-codegen-cli,
except with erroneous SDK code and document misformatting having been corrected.
-
Clone this repo somewhere in your local filesystem.
-
Use pip to install the application:
$ pip3 install -e swagger-python-codegen
After successful installation, the generator will be available via the command
swagger-python-codegen -
Make sure that the desired
swagger-codegen-clirelease from the version 3.x series is downloaded to the same local filesystem; see https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli for the full release tree.For example, to install version 3.0.35, do:
$ export URL=https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli $ wget $URL/3.0.35/swagger-codegen-cli-3.0.35.jar
-
Ensure that this JAR file is "installed" somewhere accessible to
swagger-python-codegen; by default, this is in/opt/swagger-codegen. Note that the stockswagger-codegen-clicode generator can be run directly from this JAR file via:$ java -jar /opt/swagger-codegen/swagger-codegen-cli-3.0.35.jar ... options
Alternatively, as
swagger-python-codegenfunctionally replaces that stock code generator, then to save space thepythonsubdirectory contained in that JAR file can be unzipped into a filesystem directory tree somewhere, and the JAR file itself eliminated.
Run the generate.py script contained here to generate an SDK from a provided
OpenAPI specification file and set of swagger-codegen Mustache templates.
The command-line options supported by generate.py are compatible with those
defined by swagger-codegen-cli, as are the configuration settings defined;
use the --help or -h option to see a full list of options and configuration
settings available for customization.
The input OpenAPI specification file path is specified by --input-spec.
Only YAML and JSON files are supported, and if the PyYAML Python package
is not installed locally, then only JSON is supported.
The filesystem location of the Mustache templates is specified by
--template-dir; note that because options are named to be backward-compatible
with swagger-codegen-cli, this option can denote the JAR file containing
the templates (even though the option is the misnomer '...-dir').
Consult the other command-line options available to customize the SDK code generation process and naming. Options typically specified for most APIs are:
| Option | Description |
|---|---|
| --output | Output directory tree for generated SDK Python package |
| --api-package | Name of the Python subpackage containing the SDK's API modules |
| -D packageName | Overall package name for the SDK -- what is pip-installed |
| -D projectName | Project title for the enclosing Python installation tree |
Example command-line:
$ swagger-python-codegen -i my_api.yaml -o ./repo \
-D packageName=sdk projectName=my_api --api-package groupsThis will generate a Python installable package tree to the repo subdirectory
as the topmost directory tree; the Python installer script, requirements file,
and so forth reside directly in this tree, as follows:
- SDK support and configuration code is emitted to
repo/sdkdirectory - the importable API resource SDK modules are emitted to
repo/sdk/groups - any object model definitions are emitted to
repo/sdk/models - any other optional file collections generated by specifying the
--generateoption are emitted to corresponding subdirectories ofrepo/sdk
The full package installation tree is known as my_api. Once this package tree
is pip-installed, the full SDK can then be imported by Python code via:
from my_api.sdk.groups import *
By default, swagger-python-codegen will only generate the SDK code modules
for the API methods themselves and any models defined publicly. Refer to the
--generate command-line option for how to generate the full complement of other
files (e.g., documents, unit test skeletons, etc.) thet swagger-codegen-cli
does.
Refer also to the --fix option for other cleanups, fixups, and remedies to
optionally be applied during code generation.