John Boyes 7084a79ede
[BUG][PYTHON] Do not set Content-Type for GET, HEAD or DELETE requests (#9852)
* [BUG][PYTHON] Do not set Content-Type for GET, HEAD or DELETE requests

The Python generator no longer sets a default `Content-Type` of
`application/json` for `GET`, `HEAD` and `DELETE` requests.

Having the `Content-Type` set for these requests was causing issues with
other tools which insist that GET, HEAD and DELETE requests do not have
a Content-Type (as per the OpenAPI 3 specification).

An example of the problem that this commit fixes is when using
[Prism][1] as a [validation proxy][2].

[Prism rejects any GET request that has a Content-Type][3].

Here is [an example of the problem manifesting itself][4].

To validate the fix in this commit:

1. Start with any OpenAPI3 spec e.g. the Petstore example at
https://editor.swagger.io/
2. Generate Python client code for the spec
3. Look at the generated `rest.py` e.g. in the [standard sample in this
repo][5] and see that the `Content-Type` defaults to `application/json`
for all HTTP methods (including `GET`, `HEAD` and `DELETE`), rather than
there being no `Content-Type` for `GET`, `HEAD` and `DELETE`.

Fixes #9831

[1]: https://github.com/stoplightio/prism
[2]: https://meta.stoplight.io/docs/prism/docs/guides/03-validation-proxy.md
[3]: https://github.com/stoplightio/prism/issues/1408#issuecomment-690948020
[4]: https://github.com/agilepathway/gauge-openapi-example/pull/28/checks?check_run_id=2888606052#step:13:18
[5]: 969cea8ce1/samples/openapi3/client/petstore/python/petstore_api/rest.py (L141)

* update samples

* Fix Python DELETE bug introduced in earlier commit

The earlier commit 9dfe1f6 introduced a bug for `DELETE` requests on the
standard Python generator.  This commit fixes that bug and also includes
the updated samples.

Co-authored-by: William Cheng <wing328hk@gmail.com>
2021-07-07 11:04:26 +08:00
..

petstore-api

This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: " \

This Python package is automatically generated by the OpenAPI Generator project:

  • API version: 1.0.0
  • Package version: 1.0.0
  • Build package: org.openapitools.codegen.languages.PythonClientCodegen

Requirements.

Python >= 3.6

Installation & Usage

pip install

If the python package is hosted on a repository, you can install directly using:

pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git

(you may need to run pip with root permission: sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git)

Then import the package:

import petstore_api

Setuptools

Install via Setuptools.

python setup.py install --user

(or sudo python setup.py install to install the package for all users)

Then import the package:

import petstore_api

Getting Started

Please follow the installation procedure and then run the following:

import datetime
import time
import petstore_api
from pprint import pprint
from petstore_api.api import another_fake_api
from petstore_api.model.client import Client
# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2
# See configuration.py for a list of all supported configuration parameters.
configuration = petstore_api.Configuration(
    host = "http://petstore.swagger.io:80/v2"
)



# Enter a context with an instance of the API client
with petstore_api.ApiClient(configuration) as api_client:
    # Create an instance of the API class
    api_instance = another_fake_api.AnotherFakeApi(api_client)
    client = Client(
        client="client_example",
    ) # Client | client model

    try:
        # To test special tags
        api_response = api_instance.call_123_test_special_tags(client)
        pprint(api_response)
    except petstore_api.ApiException as e:
        print("Exception when calling AnotherFakeApi->call_123_test_special_tags: %s\n" % e)

Documentation for API Endpoints

All URIs are relative to http://petstore.swagger.io:80/v2

Class Method HTTP request Description
AnotherFakeApi call_123_test_special_tags PATCH /another-fake/dummy To test special tags
DefaultApi foo_get GET /foo
FakeApi additional_properties_with_array_of_enums GET /fake/additional-properties-with-array-of-enums Additional Properties with Array of Enums
FakeApi array_model POST /fake/refs/arraymodel
FakeApi array_of_enums POST /fake/refs/array-of-enums Array of Enums
FakeApi boolean POST /fake/refs/boolean
FakeApi composed_one_of_number_with_validations POST /fake/refs/composed_one_of_number_with_validations
FakeApi download_attachment GET /{fileName} downloads a file using Content-Disposition
FakeApi enum_test POST /fake/refs/enum-test Object contains enum properties and array properties containing enums
FakeApi fake_health_get GET /fake/health Health check endpoint
FakeApi mammal POST /fake/refs/mammal
FakeApi number_with_validations POST /fake/refs/number
FakeApi object_model_with_ref_props POST /fake/refs/object_model_with_ref_props
FakeApi post_inline_additional_properties_payload POST /fake/postInlineAdditionalPropertiesPayload
FakeApi post_inline_additional_properties_ref_payload POST /fake/postInlineAdditionalPropertiesRefPayload
FakeApi string POST /fake/refs/string
FakeApi string_enum POST /fake/refs/enum
FakeApi test_body_with_file_schema PUT /fake/body-with-file-schema
FakeApi test_body_with_query_params PUT /fake/body-with-query-params
FakeApi test_client_model PATCH /fake To test &quot;client&quot; model
FakeApi test_endpoint_parameters POST /fake Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
FakeApi test_enum_parameters GET /fake To test enum parameters
FakeApi test_group_parameters DELETE /fake Fake endpoint to test group parameters (optional)
FakeApi test_inline_additional_properties POST /fake/inline-additionalProperties test inline additionalProperties
FakeApi test_json_form_data GET /fake/jsonFormData test json serialization of form data
FakeApi test_query_parameter_collection_format PUT /fake/test-query-paramters
FakeApi upload_download_file POST /fake/uploadDownloadFile uploads a file and downloads a file using application/octet-stream
FakeApi upload_file POST /fake/uploadFile uploads a file using multipart/form-data
FakeApi upload_files POST /fake/uploadFiles uploads files using multipart/form-data
FakeClassnameTags123Api test_classname PATCH /fake_classname_test To test class name in snake case
PetApi add_pet POST /pet Add a new pet to the store
PetApi delete_pet DELETE /pet/{petId} Deletes a pet
PetApi find_pets_by_status GET /pet/findByStatus Finds Pets by status
PetApi find_pets_by_tags GET /pet/findByTags Finds Pets by tags
PetApi get_pet_by_id GET /pet/{petId} Find pet by ID
PetApi update_pet PUT /pet Update an existing pet
PetApi update_pet_with_form POST /pet/{petId} Updates a pet in the store with form data
StoreApi delete_order DELETE /store/order/{order_id} Delete purchase order by ID
StoreApi get_inventory GET /store/inventory Returns pet inventories by status
StoreApi get_order_by_id GET /store/order/{order_id} Find purchase order by ID
StoreApi place_order POST /store/order Place an order for a pet
UserApi create_user POST /user Create user
UserApi create_users_with_array_input POST /user/createWithArray Creates list of users with given input array
UserApi create_users_with_list_input POST /user/createWithList Creates list of users with given input array
UserApi delete_user DELETE /user/{username} Delete user
UserApi get_user_by_name GET /user/{username} Get user by user name
UserApi login_user GET /user/login Logs user into the system
UserApi logout_user GET /user/logout Logs out current logged in user session
UserApi update_user PUT /user/{username} Updated user

Documentation For Models

Documentation For Authorization

api_key

  • Type: API key
  • API key parameter name: api_key
  • Location: HTTP header

api_key_query

  • Type: API key
  • API key parameter name: api_key_query
  • Location: URL query string

bearer_test

  • Type: Bearer authentication (JWT)

http_basic_test

  • Type: HTTP basic authentication

http_signature_test

  • Type: HTTP signature authentication

petstore_auth

Author

Notes for Large OpenAPI documents

If the OpenAPI document is large, imports in petstore_api.apis and petstore_api.models may fail with a RecursionError indicating the maximum recursion limit has been exceeded. In that case, there are a couple of solutions:

Solution 1: Use specific imports for apis and models like:

  • from petstore_api.api.default_api import DefaultApi
  • from petstore_api.model.pet import Pet

Solution 2: Before importing the package, adjust the maximum recursion limit as shown below:

import sys
sys.setrecursionlimit(1500)
import petstore_api
from petstore_api.apis import *
from petstore_api.models import *