使用OpenAPI 3生成Python客户端库



我正在尝试用openApI3生成一个python客户端库。为此,我创建了一个openapi.yml文件,在其中我定义了带有请求和响应的url和模式。

我正在尝试使用我在这里找到的openApI生成器https://github.com/OpenAPITools/openapi-generator命令:openapitools/openapi generator cli

这个生成器,根据yml文件中定义的模式生成一组目录和文件。

当我测试它的自动生成过滤器时,我得到错误

我在这里添加我的yml文件和自动生成的测试文件,错误如下:`

这是我的yml文件

opanapi.yml

openapi: 3.0.1
info:
title: Config Service
version: '2.0'
description: Project and system config microservice
contact: {}
servers:
- url: ''
paths:
/config/v1/datasources:
get:
tags:
- config/v1
responses:
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Datasource'
description: Success
'404':
description: Not Found
operationId: get_datasources
summary: GET endpoint
description: return list of sources
components:
schemas:
Datasource:
description: ''
type: object
properties:
type:
type: string
minLength: 1
properties:
type: object
properties:
_id:
type: object
properties:
type:
type: string
minLength: 1

This is the auto-generated test file for models.

test_datasource.py

# coding: utf-8
"""
Config Service
Project and system config microservice  # noqa: E501
The version of the OpenAPI document: 2.0
Generated by: https://openapi-generator.tech
"""

from __future__ import absolute_import
import unittest
import datetime
import tech.client.config
from tech.client.config.models.datasource import Datasource  # noqa: E501
from tech.client.config.rest import ApiException
class TestDatasource(unittest.TestCase):
"""Datasource unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional):
"""Test Datasource
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# model = tech.client.config.models.datasource.Datasource()  # noqa: E501
if include_optional :
return Datasource(
type = '0', 
properties = tech.client.config.models.datasource_properties.Datasource_properties(
_id = tech.client.config.models.datasource_properties__id.Datasource_properties__id(
type = '0', )
else :
return Datasource(
)
def testDatasource(self):
"""Test Datasource"""
inst_req_only = self.make_instance(include_optional=False)
inst_req_and_optional = self.make_instance(include_optional=True)

if __name__ == '__main__':
unittest.main()
When I am test the above file , I am getting the below error.**
**Error:**
File "test_datasource.py", line 76, in testDatasource
inst_req_and_optional = self.make_instance(include_optional=True)
File "test/test_datasource.py", line 41, in make_instance
_id = tech.client.config.models.datasource_properties__id.Datasource_properties__id(
AttributeError: module 'tech.client.config.models' has no attribute 'datasource_properties__id'

注意:在模型目录中,datasource_properties __id不是自动生成的。

我搜索了很多关于这个问题,我不知道为什么我会得到这个问题。opeanAPI 3不支持嵌套模式/嵌套对象吗

任何帮助/引导都是非常可观的。感谢

if include_optional :
return Datasource(
type = '0', 
properties = tech.client.config.models.datasource_properties.Datasource_properties(
_id = tech.client.config.models.datasource_properties__id.Datasource_properties__id(
type = '0', )

您的test_datasource.py文件中存在错误

我试过了:

openapi: 3.0.1
info:
title: Config Service
version: '2.0'
description: Project and system config microservice
contact: {}
servers:
- url: ''
paths:
/config/v1/datasources:
get:
tags:
- config/v1
responses:
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Datasource'
description: Success
'404':
description: Not Found
operationId: get_datasources
summary: GET endpoint
description: return list of sources
components:
schemas:
Datasource:
description: ''
type: object
properties:
Typez:
$ref: '#/components/schemas/Typez'

Typez:    
type: object
properties : 
pippo:
type: string

使用org/openapitools/openapi生成器cli/4.3.1

生成的test_datasource.py运行良好的

带有:

openapi: 3.0.1
info:
title: Config Service
version: '2.0'
description: Project and system config microservice
contact: {}
servers:
- url: ''
paths:
/config/v1/datasources:
get:
tags:
- config/v1
responses:
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Datasource'
description: Success
'404':
description: Not Found
operationId: get_datasources
summary: GET endpoint
description: return list of sources
components:
schemas:
Datasource:
description: ''
type: object
properties:
typez:
$ref: '#/components/schemas/typez'

typez:    
type: object
properties : 
pippo:
type: string

生成的test_datasourc.py失败,返回:

ERROR: testDatasource (__main__.TestDatasource)
Test Datasource
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_datasource.py", line 49, in testDatasource
inst_req_and_optional = self.make_instance(include_optional=True)
File "test_datasource.py", line 39, in make_instance
typez = openapi_client.models.typez.typez(
AttributeError: module 'openapi_client.models.typez' has no attribute 'typez'
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)

我不确定

$ref: '#/components/schemas/Typez'

但它应该是嵌套的东西?!

关于:

对此搜索了很多,我不确定为什么会出现这个问题。opeanAPI 3不支持嵌套模式/嵌套对象吗?

我想说:取决于

希望有更好的人能回答这个问题;-(

最新更新