Python и Swagger 2 – класс импорта для вложенного объекта работает неправильно

У меня проблема с генерацией кода из Swagger-Codegen.

Я создал следующие определения объектов с помощью Swagger:

...
definitions:
  Object1:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      obj2:
        $ref: "#/definitions/Object2"
  Object2:
    type: "object"
    properties:
      id:
        type: "integer"
        format: "int64"
      name:
        type: "string"
...

Затем я экспортировал файл YAML и создал сервер-заглушку для python-flask.

Когда я пытаюсь запустить фляжный сервер, я получаю сообщение об ошибке:

NameError: name 'Object2' is not defined

Файл __init__.py был сгенерирован автоматически и содержит импорт для классов обеих моделей:

from swagger.models.object1 import Object1
from swagger.models.object2 import Object2

Если я добавлю импорт в класс Object2, вместо этого я получаю эту ошибку:

object1.py

from swagger.models import Object2
ImportError: cannot import name 'Object2' from partially initialized module 'swagger.models' (most likely due to a circular import)

Ошибка устраняется, только если я добавлю этот импорт в object1.py:

from swagger.models.object2 import Object2

Поскольку код сгенерирован и любые изменения будут потеряны, есть ли способ импортировать класс Object2?

Я попытался отредактировать шаблон model.mustache, но не смог найти способ разрешить импорт нужных мне моделей.

Спасибо всем, кто может мне помочь.


person Pozzo90    schedule 06.02.2020    source источник


Ответы (1)


Я столкнулся с аналогичной проблемой, проблема в том, что swagger создавал весь импорт как абсолютный импорт, который не работает для пакета. Что вам нужно, это относительный импорт

вместо: from swagger.models.entity import Entity

вы должны сделать: from .entity import Entity

person user1170560    schedule 12.05.2020