当前位置: 首页 > 知识库问答 >
问题:

使用OpenAPI 3生成Python客户端库

佴飞驰
2023-03-14

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

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

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

当我测试它的自动生成的文件,我得到错误

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

这是我的yml文件

奥帕纳皮。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

这是模型的自动生成测试文件。

测试数据源。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'

注意:在模型目录中,数据源属性id不是自动生成的。

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

任何帮助/引导都是非常值得的。谢谢

共有1个答案

申屠健
2023-03-14
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', )

您的测试数据源中有一个错误。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
        

生成的测试数据源。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'

但它应该是嵌套的吗?!

关于:

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

我会说:看情况

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

 类似资料:
  • 对于我们的指向站点VPN,我们希望创建一个根证书。因此我们可以为所有需要登录VPN的合作伙伴创建尽可能多的客户端证书。(Azure虚拟网络) 手工完成这件事很完美。我们生成一个作为根CA的证书(自签名)。我们可以在powershell中这样做:

  • 我需要在我的项目中使用一个web服务。我使用NetBeans所以我右键单击我的项目并尝试添加一个新的“Web服务客户端”。上次我检查时,这是创建web服务客户机的方法。但它导致一个AssertionError,它说: java.lang.AssertionError:org.xml.sax.SAXParseException;systemid:jar:file:/path/to/glassfish

  • 简介 我们要访问TensorFlow serving服务,Python应用也需要实现对应的gRPC客户端。 TensorFlow serving官方文档提供了生成mnist Python客户端的例子,但由于依赖bazel编译,编译出来的Python脚本不能直接运行。 完整例子 这里提供一个Python gRPC客户端例子,手动生成proto代码,没有任何依赖可以直接运行 https://githu

  • 我的API定义如下: 我们使用生成代码。 生成的API参数:

  • 我有一个这样的歌剧API: OpenAPI生成器Maven的插件为schema对象创建了一个请求类“GenerateTokenRequest”,但在API实现类中它没有使用。它生成一个方法,将所有请求的字段作为参数列表。方法如下: 所以,在这种情况下,请求类“GenerateTokenRequest”被生成,但从未使用过。任何人都可以告诉我为什么?有一种使用我的请求类的替代方法吗?我可以在Open

  • 嗯,首先,对不起我的英语不好。 “enderecodao.java”: 和ENDERECO的WebService“servicoEnderEco.java”: