Проблема с обработкой клиента Python, сгенерированного OpenAPI. 204 Нет ответов на контент.Python

Программы на Python
Ответить
Anonymous
 Проблема с обработкой клиента Python, сгенерированного OpenAPI. 204 Нет ответов на контент.

Сообщение Anonymous »

Я столкнулся с проблемой с клиентом Python, созданным на основе спецификации OpenAPI с помощью инструмента openapitools/openapi-generator-cli. Проблема возникает при отправке запроса GET к конечной точке, который может вернуть статус 204 «Нет контента».
У меня есть спецификация YAML Swagger/OpenAPI со следующим определением конечной точки:

Код: Выделить всё

    '/api/v1/Sensor/now/{instanceUri}':
get:
tags:
- Sensor
parameters:
- name: instanceUri
in: path
required: true
schema:
type: string
- name: x-api-version
in: header
schema:
type: string
responses:
'200':
description: Success
content:
text/plain:
schema:
$ref: '#/components/schemas/Gkkg.Bff.Api.Contracts.TagValueResponses'
application/json:
schema:
$ref: '#/components/schemas/Gkkg.Bff.Api.Contracts.TagValueResponses'
text/json:
schema:
$ref: '#/components/schemas/Gkkg.Bff.Api.Contracts.TagValueResponses'
'204':
description: No Content
'401':
description: Unauthorized
'403':
description: Forbidden
security:
- Bearer:
- sensor_read
Похоже, что генератор OpenAPI создал код, который распознает код ответа 204, но по-прежнему ожидает тип возвращаемого значения GkkgBffApiContractsTagValueResponses, что, я думаю, приводит к ошибке, когда ответ пуст и должен вернет 204.
Пример сгенерированной функции:
api_v1_sensor_now_instance_uri_get
GkkgBffApiContractsTagValueResponses api_v1_sensor_now_instance_uri_get(instance_uri)

Пример
  • Носитель (JWT) Аутентификация (носитель):

Код: Выделить всё

import time
import gkkg_api_python_proxy
from gkkg_api_python_proxy.api import sensor_api
from gkkg_api_python_proxy.model.gkkg_bff_api_contracts_tag_value_responses import GkkgBffApiContractsTagValueResponses
from pprint import pprint

configuration = gkkg_api_python_proxy.Configuration(
host = "http://localhost"
)

# Configure Bearer authorization (JWT): Bearer
configuration = gkkg_api_python_proxy.Configuration(
access_token = 'YOUR_BEARER_TOKEN'
)

with gkkg_api_python_proxy.ApiClient(configuration) as api_client:
api_instance = sensor_api.SensorApi(api_client)
instance_uri = "instanceUri_example"  # str |
x_api_version = "x-api-version_example"  # str |  (optional)

try:
api_response = api_instance.api_v1_sensor_now_instance_uri_get(instance_uri)
pprint(api_response)
except gkkg_api_python_proxy.ApiException as e:
print("Exception when calling SensorApi->api_v1_sensor_now_instance_uri_get: %s\n" % e)

try:
api_response = api_instance.api_v1_sensor_now_instance_uri_get(instance_uri, x_api_version=x_api_version)
pprint(api_response)
except gkkg_api_python_proxy.ApiException as e:
print("Exception when calling SensorApi->api_v1_sensor_now_instance_uri_get: %s\n" % e)
Параметры
Имя Тип Описание Примечания
instance_uri str
x_api_version str [необязательно]
Тип возвращаемого значения
GkkgBffApiContractsTagValueResponses
< strong>Авторизация
Носитель
Заголовки HTTP-запросов
Тип контента: не определен
Принимаются: text/plain, application/json, text/json
Подробности ответа HTTP
Код состояния Описание Заголовки ответа
200 Успех —
204 Нет контента —
401 Несанкционировано –
403 Запрещено –
Когда я использую сгенерированный клиент Python для вызова этой конечной точки, я сталкиваюсь ApiTypeError, когда статус ответа равен 204 Нет содержимого:

Код: Выделить всё

ApiTypeError: Invalid type for variable 'received_data'.  Required value type is GkkgBffApiContractsTagValueResponses and passed type was str at ['received_data']
Если я делаю прямые HTTP-запросы с запросами вместо использования сгенерированного клиента, все работает без проблем, и я получаю 204, как и ожидалось.
< Strong>Вопросы:[/b]
Почему сгенерированный клиент Python завершается с ошибкой ApiTypeError при обработке ответа 204 No Content, но отлично работает в пользовательском интерфейсе Swagger?
Как настроить спецификацию OpenAPI для правильной обработки ответов 204 в клиенте Python?
Я не хочу трогать сгенерированный код.
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/791 ... -responses
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»