diff options
author | CoprDistGit <infra@openeuler.org> | 2023-04-11 19:17:05 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-04-11 19:17:05 +0000 |
commit | 53951a52157d5c886bdd3b458d3ac25479250361 (patch) | |
tree | 6e5bccb84e330e50d06f747c72e70c21ca8b9c85 | |
parent | d9943ba118c9ce4531deccdb7db6ef3e550956bb (diff) |
automatic import of python-openapi-python-client
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-openapi-python-client.spec | 602 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 604 insertions, 0 deletions
@@ -0,0 +1 @@ +/openapi_python_client-0.13.3.tar.gz diff --git a/python-openapi-python-client.spec b/python-openapi-python-client.spec new file mode 100644 index 0000000..0c2ac69 --- /dev/null +++ b/python-openapi-python-client.spec @@ -0,0 +1,602 @@ +%global _empty_manifest_terminate_build 0 +Name: python-openapi-python-client +Version: 0.13.3 +Release: 1 +Summary: Generate modern Python clients from OpenAPI +License: MIT +URL: https://github.com/triaxtec/openapi-python-client +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/bd/56/021f0c6220027b397b7f0c043f4cd0767885872d3f09df309fbd298c954c/openapi_python_client-0.13.3.tar.gz +BuildArch: noarch + +Requires: python3-jinja2 +Requires: python3-typer +Requires: python3-colorama +Requires: python3-shellingham +Requires: python3-black +Requires: python3-isort +Requires: python3-importlib_metadata +Requires: python3-pydantic +Requires: python3-attrs +Requires: python3-dateutil +Requires: python3-httpx +Requires: python3-autoflake +Requires: python3-typing-extensions +Requires: python3-PyYAML + +%description + +[](https://codecov.io/gh/triaxtec/openapi-python-client) +[](https://lbesson.mit-license.org/) +[](https://mypy.readthedocs.io/en/stable/introduction.html) +[](https://github.com/ambv/black) +[](https://pypi.python.org/pypi/openapi-python-client/) +[](https://pepy.tech/project/openapi-python-client) + +# openapi-python-client + +Generate modern Python clients from OpenAPI 3.x documents. + +_This generator does not support OpenAPI 2.x FKA Swagger. If you need to use an older document, try upgrading it to +version 3 first with one of many available converters._ + +**This project is still in development and does not support all OpenAPI features** + +## Why This? + +This tool focuses on creating the best developer experience for Python developers by: + +1. Using all the latest and greatest Python features like type annotations and dataclasses. +2. Having documentation and usage instructions specific to this one generator. +1. Being written in Python with Jinja2 templates, making it easier to improve and extend for Python developers. It's also much easier to install and use if you already have Python. + +## Installation + +I recommend you install with [pipx](https://pipxproject.github.io/pipx/) so you don't conflict with any other packages you might have: `pipx install openapi-python-client --include-deps`. + +> Note the `--include-deps` option which will also make `black`, `isort`, and `autoflake` available in your path so that `openapi-python-client` can use them to clean up the generated code. + +**If you use `pipx run` then the post-generation hooks will not be available unless you install them manually.** + +You can also install with normal pip: `pip install openapi-python-client` + +Then, if you want tab completion: `openapi-python-client --install-completion` + +## Usage + +### Create a new client + +`openapi-python-client generate --url https://my.api.com/openapi.json` + +This will generate a new client library named based on the title in your OpenAPI spec. For example, if the title +of your API is "My API", the expected output will be "my-api-client". If a folder already exists by that name, you'll +get an error. + +If you have an `openapi.json` file available on disk, in any CLI invocation you can build off that instead by replacing `--url` with a `--path`: + +`openapi-python-client generate --path location/on/disk/openapi.json` + +### Update an existing client + +`openapi-python-client update --url https://my.api.com/openapi.json` + +> For more usage details run `openapi-python-client --help` or read [usage](usage.md) + +### Using custom templates + +This feature leverages Jinja2's [ChoiceLoader](https://jinja.palletsprojects.com/en/2.11.x/api/#jinja2.ChoiceLoader) and [FileSystemLoader](https://jinja.palletsprojects.com/en/2.11.x/api/#jinja2.FileSystemLoader). This means you do _not_ need to customize every template. Simply copy the template(s) you want to customize from [the default template directory](openapi_python_client/templates) to your own custom template directory (file names _must_ match exactly) and pass the template directory through the `custom-template-path` flag to the `generate` and `update` commands. For instance, + +``` +openapi-python-client update \ + --url https://my.api.com/openapi.json \ + --custom-template-path=relative/path/to/mytemplates +``` + +_Be forewarned, this is a beta-level feature in the sense that the API exposed in the templates is undocumented and unstable._ + +## What You Get + +1. A `pyproject.toml` file with some basic metadata intended to be used with [Poetry]. +1. A `README.md` you'll most definitely need to update with your project's details +1. A Python module named just like the auto-generated project name (e.g. "my_api_client") which contains: + 1. A `client` module which will have both a `Client` class and an `AuthenticatedClient` class. You'll need these + for calling the functions in the `api` module. + 1. An `api` module which will contain one module for each tag in your OpenAPI spec, as well as a `default` module + for endpoints without a tag. Each of these modules in turn contains one function for calling each endpoint. + 1. A `models` module which has all the classes defined by the various schemas in your OpenAPI spec + +For a full example you can look at the `end_to_end_tests` directory which has an `openapi.json` file. +"golden-record" in that same directory is the generated client from that OpenAPI document. + +## OpenAPI features supported + +1. All HTTP Methods +1. JSON and form bodies, path and query parameters +1. File uploads with multipart/form-data bodies +1. float, string, int, date, datetime, string enums, and custom schemas or lists containing any of those +1. html/text or application/json responses containing any of the previous types +1. Bearer token security + +## Configuration + +You can pass a YAML (or JSON) file to openapi-python-client with the `--config` option in order to change some behavior. +The following parameters are supported: + +### class_overrides + +Used to change the name of generated model classes. This param should be a mapping of existing class name +(usually a key in the "schemas" section of your OpenAPI document) to class_name and module_name. As an example, if the +name of the a model in OpenAPI (and therefore the generated class name) was something like "\_PrivateInternalLongName" +and you want the generated client's model to be called "ShortName" in a module called "short_name" you could do this: + +Example: + +```yaml +class_overrides: + _PrivateInternalLongName: + class_name: ShortName + module_name: short_name +``` + +The easiest way to find what needs to be overridden is probably to generate your client and go look at everything in the models folder. + +### project_name_override and package_name_override + +Used to change the name of generated client library project/package. If the project name is changed but an override for the package name +isn't provided, the package name will be converted from the project name using the standard convention (replacing `-`'s with `_`'s). + +Example: + +```yaml +project_name_override: my-special-project-name +package_name_override: my_extra_special_package_name +``` + +### field_prefix + +When generating properties, the `name` attribute of the OpenAPI schema will be used. When the `name` is not a valid Python identifier (e.g. begins with a number) this string will be prepended. Defaults to "field\_". It will also be used to prefix fields in schema starting with "_" in order to avoid ambiguous semantics. + +Example: + +```yaml +field_prefix: attr_ +``` + +### package_version_override + +Specify the package version of the generated client. If unset, the client will use the version of the OpenAPI spec. + +Example: + +```yaml +package_version_override: 1.2.3 +``` + +### post_hooks + +In the config file, there's an easy way to tell `openapi-python-client` to run additional commands after generation. Here's an example showing the default commands that will run if you don't override them in config: + +```yaml +post_hooks: + - "autoflake -i -r --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports ." + - "isort ." + - "black ." +``` + +### use_path_prefixes_for_title_model_names + +By default, `openapi-python-client` generates class names which include the full path to the schema, including any parent-types. This can result in very long class names like `MyRouteSomeClassAnotherClassResponse`—which is very unique and unlikely to cause conflicts with future API additions, but also super verbose. + +If you are carefully curating your `title` properties already to ensure no duplicate class names, you can turn off this prefixing feature by setting `use_path_prefixes_for_title_model_names` to `false` in your config file. This will use the `title` property of any object that has it set _without_ prefixing. + +If this option results in conflicts, you will need to manually override class names instead via the `class_overrides` option. + +### http_timeout + +By default, the timeout for retrieving the schema file via HTTP is 5 seconds. In case there is an error when retrieving the schema, you might try and increase this setting to a higher value. + +[changelog.md]: CHANGELOG.md +[poetry]: https://python-poetry.org/ + + +%package -n python3-openapi-python-client +Summary: Generate modern Python clients from OpenAPI +Provides: python-openapi-python-client +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-openapi-python-client + +[](https://codecov.io/gh/triaxtec/openapi-python-client) +[](https://lbesson.mit-license.org/) +[](https://mypy.readthedocs.io/en/stable/introduction.html) +[](https://github.com/ambv/black) +[](https://pypi.python.org/pypi/openapi-python-client/) +[](https://pepy.tech/project/openapi-python-client) + +# openapi-python-client + +Generate modern Python clients from OpenAPI 3.x documents. + +_This generator does not support OpenAPI 2.x FKA Swagger. If you need to use an older document, try upgrading it to +version 3 first with one of many available converters._ + +**This project is still in development and does not support all OpenAPI features** + +## Why This? + +This tool focuses on creating the best developer experience for Python developers by: + +1. Using all the latest and greatest Python features like type annotations and dataclasses. +2. Having documentation and usage instructions specific to this one generator. +1. Being written in Python with Jinja2 templates, making it easier to improve and extend for Python developers. It's also much easier to install and use if you already have Python. + +## Installation + +I recommend you install with [pipx](https://pipxproject.github.io/pipx/) so you don't conflict with any other packages you might have: `pipx install openapi-python-client --include-deps`. + +> Note the `--include-deps` option which will also make `black`, `isort`, and `autoflake` available in your path so that `openapi-python-client` can use them to clean up the generated code. + +**If you use `pipx run` then the post-generation hooks will not be available unless you install them manually.** + +You can also install with normal pip: `pip install openapi-python-client` + +Then, if you want tab completion: `openapi-python-client --install-completion` + +## Usage + +### Create a new client + +`openapi-python-client generate --url https://my.api.com/openapi.json` + +This will generate a new client library named based on the title in your OpenAPI spec. For example, if the title +of your API is "My API", the expected output will be "my-api-client". If a folder already exists by that name, you'll +get an error. + +If you have an `openapi.json` file available on disk, in any CLI invocation you can build off that instead by replacing `--url` with a `--path`: + +`openapi-python-client generate --path location/on/disk/openapi.json` + +### Update an existing client + +`openapi-python-client update --url https://my.api.com/openapi.json` + +> For more usage details run `openapi-python-client --help` or read [usage](usage.md) + +### Using custom templates + +This feature leverages Jinja2's [ChoiceLoader](https://jinja.palletsprojects.com/en/2.11.x/api/#jinja2.ChoiceLoader) and [FileSystemLoader](https://jinja.palletsprojects.com/en/2.11.x/api/#jinja2.FileSystemLoader). This means you do _not_ need to customize every template. Simply copy the template(s) you want to customize from [the default template directory](openapi_python_client/templates) to your own custom template directory (file names _must_ match exactly) and pass the template directory through the `custom-template-path` flag to the `generate` and `update` commands. For instance, + +``` +openapi-python-client update \ + --url https://my.api.com/openapi.json \ + --custom-template-path=relative/path/to/mytemplates +``` + +_Be forewarned, this is a beta-level feature in the sense that the API exposed in the templates is undocumented and unstable._ + +## What You Get + +1. A `pyproject.toml` file with some basic metadata intended to be used with [Poetry]. +1. A `README.md` you'll most definitely need to update with your project's details +1. A Python module named just like the auto-generated project name (e.g. "my_api_client") which contains: + 1. A `client` module which will have both a `Client` class and an `AuthenticatedClient` class. You'll need these + for calling the functions in the `api` module. + 1. An `api` module which will contain one module for each tag in your OpenAPI spec, as well as a `default` module + for endpoints without a tag. Each of these modules in turn contains one function for calling each endpoint. + 1. A `models` module which has all the classes defined by the various schemas in your OpenAPI spec + +For a full example you can look at the `end_to_end_tests` directory which has an `openapi.json` file. +"golden-record" in that same directory is the generated client from that OpenAPI document. + +## OpenAPI features supported + +1. All HTTP Methods +1. JSON and form bodies, path and query parameters +1. File uploads with multipart/form-data bodies +1. float, string, int, date, datetime, string enums, and custom schemas or lists containing any of those +1. html/text or application/json responses containing any of the previous types +1. Bearer token security + +## Configuration + +You can pass a YAML (or JSON) file to openapi-python-client with the `--config` option in order to change some behavior. +The following parameters are supported: + +### class_overrides + +Used to change the name of generated model classes. This param should be a mapping of existing class name +(usually a key in the "schemas" section of your OpenAPI document) to class_name and module_name. As an example, if the +name of the a model in OpenAPI (and therefore the generated class name) was something like "\_PrivateInternalLongName" +and you want the generated client's model to be called "ShortName" in a module called "short_name" you could do this: + +Example: + +```yaml +class_overrides: + _PrivateInternalLongName: + class_name: ShortName + module_name: short_name +``` + +The easiest way to find what needs to be overridden is probably to generate your client and go look at everything in the models folder. + +### project_name_override and package_name_override + +Used to change the name of generated client library project/package. If the project name is changed but an override for the package name +isn't provided, the package name will be converted from the project name using the standard convention (replacing `-`'s with `_`'s). + +Example: + +```yaml +project_name_override: my-special-project-name +package_name_override: my_extra_special_package_name +``` + +### field_prefix + +When generating properties, the `name` attribute of the OpenAPI schema will be used. When the `name` is not a valid Python identifier (e.g. begins with a number) this string will be prepended. Defaults to "field\_". It will also be used to prefix fields in schema starting with "_" in order to avoid ambiguous semantics. + +Example: + +```yaml +field_prefix: attr_ +``` + +### package_version_override + +Specify the package version of the generated client. If unset, the client will use the version of the OpenAPI spec. + +Example: + +```yaml +package_version_override: 1.2.3 +``` + +### post_hooks + +In the config file, there's an easy way to tell `openapi-python-client` to run additional commands after generation. Here's an example showing the default commands that will run if you don't override them in config: + +```yaml +post_hooks: + - "autoflake -i -r --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports ." + - "isort ." + - "black ." +``` + +### use_path_prefixes_for_title_model_names + +By default, `openapi-python-client` generates class names which include the full path to the schema, including any parent-types. This can result in very long class names like `MyRouteSomeClassAnotherClassResponse`—which is very unique and unlikely to cause conflicts with future API additions, but also super verbose. + +If you are carefully curating your `title` properties already to ensure no duplicate class names, you can turn off this prefixing feature by setting `use_path_prefixes_for_title_model_names` to `false` in your config file. This will use the `title` property of any object that has it set _without_ prefixing. + +If this option results in conflicts, you will need to manually override class names instead via the `class_overrides` option. + +### http_timeout + +By default, the timeout for retrieving the schema file via HTTP is 5 seconds. In case there is an error when retrieving the schema, you might try and increase this setting to a higher value. + +[changelog.md]: CHANGELOG.md +[poetry]: https://python-poetry.org/ + + +%package help +Summary: Development documents and examples for openapi-python-client +Provides: python3-openapi-python-client-doc +%description help + +[](https://codecov.io/gh/triaxtec/openapi-python-client) +[](https://lbesson.mit-license.org/) +[](https://mypy.readthedocs.io/en/stable/introduction.html) +[](https://github.com/ambv/black) +[](https://pypi.python.org/pypi/openapi-python-client/) +[](https://pepy.tech/project/openapi-python-client) + +# openapi-python-client + +Generate modern Python clients from OpenAPI 3.x documents. + +_This generator does not support OpenAPI 2.x FKA Swagger. If you need to use an older document, try upgrading it to +version 3 first with one of many available converters._ + +**This project is still in development and does not support all OpenAPI features** + +## Why This? + +This tool focuses on creating the best developer experience for Python developers by: + +1. Using all the latest and greatest Python features like type annotations and dataclasses. +2. Having documentation and usage instructions specific to this one generator. +1. Being written in Python with Jinja2 templates, making it easier to improve and extend for Python developers. It's also much easier to install and use if you already have Python. + +## Installation + +I recommend you install with [pipx](https://pipxproject.github.io/pipx/) so you don't conflict with any other packages you might have: `pipx install openapi-python-client --include-deps`. + +> Note the `--include-deps` option which will also make `black`, `isort`, and `autoflake` available in your path so that `openapi-python-client` can use them to clean up the generated code. + +**If you use `pipx run` then the post-generation hooks will not be available unless you install them manually.** + +You can also install with normal pip: `pip install openapi-python-client` + +Then, if you want tab completion: `openapi-python-client --install-completion` + +## Usage + +### Create a new client + +`openapi-python-client generate --url https://my.api.com/openapi.json` + +This will generate a new client library named based on the title in your OpenAPI spec. For example, if the title +of your API is "My API", the expected output will be "my-api-client". If a folder already exists by that name, you'll +get an error. + +If you have an `openapi.json` file available on disk, in any CLI invocation you can build off that instead by replacing `--url` with a `--path`: + +`openapi-python-client generate --path location/on/disk/openapi.json` + +### Update an existing client + +`openapi-python-client update --url https://my.api.com/openapi.json` + +> For more usage details run `openapi-python-client --help` or read [usage](usage.md) + +### Using custom templates + +This feature leverages Jinja2's [ChoiceLoader](https://jinja.palletsprojects.com/en/2.11.x/api/#jinja2.ChoiceLoader) and [FileSystemLoader](https://jinja.palletsprojects.com/en/2.11.x/api/#jinja2.FileSystemLoader). This means you do _not_ need to customize every template. Simply copy the template(s) you want to customize from [the default template directory](openapi_python_client/templates) to your own custom template directory (file names _must_ match exactly) and pass the template directory through the `custom-template-path` flag to the `generate` and `update` commands. For instance, + +``` +openapi-python-client update \ + --url https://my.api.com/openapi.json \ + --custom-template-path=relative/path/to/mytemplates +``` + +_Be forewarned, this is a beta-level feature in the sense that the API exposed in the templates is undocumented and unstable._ + +## What You Get + +1. A `pyproject.toml` file with some basic metadata intended to be used with [Poetry]. +1. A `README.md` you'll most definitely need to update with your project's details +1. A Python module named just like the auto-generated project name (e.g. "my_api_client") which contains: + 1. A `client` module which will have both a `Client` class and an `AuthenticatedClient` class. You'll need these + for calling the functions in the `api` module. + 1. An `api` module which will contain one module for each tag in your OpenAPI spec, as well as a `default` module + for endpoints without a tag. Each of these modules in turn contains one function for calling each endpoint. + 1. A `models` module which has all the classes defined by the various schemas in your OpenAPI spec + +For a full example you can look at the `end_to_end_tests` directory which has an `openapi.json` file. +"golden-record" in that same directory is the generated client from that OpenAPI document. + +## OpenAPI features supported + +1. All HTTP Methods +1. JSON and form bodies, path and query parameters +1. File uploads with multipart/form-data bodies +1. float, string, int, date, datetime, string enums, and custom schemas or lists containing any of those +1. html/text or application/json responses containing any of the previous types +1. Bearer token security + +## Configuration + +You can pass a YAML (or JSON) file to openapi-python-client with the `--config` option in order to change some behavior. +The following parameters are supported: + +### class_overrides + +Used to change the name of generated model classes. This param should be a mapping of existing class name +(usually a key in the "schemas" section of your OpenAPI document) to class_name and module_name. As an example, if the +name of the a model in OpenAPI (and therefore the generated class name) was something like "\_PrivateInternalLongName" +and you want the generated client's model to be called "ShortName" in a module called "short_name" you could do this: + +Example: + +```yaml +class_overrides: + _PrivateInternalLongName: + class_name: ShortName + module_name: short_name +``` + +The easiest way to find what needs to be overridden is probably to generate your client and go look at everything in the models folder. + +### project_name_override and package_name_override + +Used to change the name of generated client library project/package. If the project name is changed but an override for the package name +isn't provided, the package name will be converted from the project name using the standard convention (replacing `-`'s with `_`'s). + +Example: + +```yaml +project_name_override: my-special-project-name +package_name_override: my_extra_special_package_name +``` + +### field_prefix + +When generating properties, the `name` attribute of the OpenAPI schema will be used. When the `name` is not a valid Python identifier (e.g. begins with a number) this string will be prepended. Defaults to "field\_". It will also be used to prefix fields in schema starting with "_" in order to avoid ambiguous semantics. + +Example: + +```yaml +field_prefix: attr_ +``` + +### package_version_override + +Specify the package version of the generated client. If unset, the client will use the version of the OpenAPI spec. + +Example: + +```yaml +package_version_override: 1.2.3 +``` + +### post_hooks + +In the config file, there's an easy way to tell `openapi-python-client` to run additional commands after generation. Here's an example showing the default commands that will run if you don't override them in config: + +```yaml +post_hooks: + - "autoflake -i -r --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports ." + - "isort ." + - "black ." +``` + +### use_path_prefixes_for_title_model_names + +By default, `openapi-python-client` generates class names which include the full path to the schema, including any parent-types. This can result in very long class names like `MyRouteSomeClassAnotherClassResponse`—which is very unique and unlikely to cause conflicts with future API additions, but also super verbose. + +If you are carefully curating your `title` properties already to ensure no duplicate class names, you can turn off this prefixing feature by setting `use_path_prefixes_for_title_model_names` to `false` in your config file. This will use the `title` property of any object that has it set _without_ prefixing. + +If this option results in conflicts, you will need to manually override class names instead via the `class_overrides` option. + +### http_timeout + +By default, the timeout for retrieving the schema file via HTTP is 5 seconds. In case there is an error when retrieving the schema, you might try and increase this setting to a higher value. + +[changelog.md]: CHANGELOG.md +[poetry]: https://python-poetry.org/ + + +%prep +%autosetup -n openapi-python-client-0.13.3 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-openapi-python-client -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 0.13.3-1 +- Package Spec generated @@ -0,0 +1 @@ +a368f4a51c8bbb81be9220e24f7bf275 openapi_python_client-0.13.3.tar.gz |