При создании заглушки сервера python-flask не определены объекты модели

Обновление: я обнаружил проблему. Мое использование термина «Файл» для объекта в определениях, по-видимому, вызывает эту проблему. Я переименовал объект в «FileThing» как тест, и swagger-codegen сгенерировал ожидаемый объект модели и модуль. (Возможно, это связано с https://github.com/swagger-api/swagger-codegen/issues/3223?).

При использовании swagger-codegen для создания заглушки сервера Python Flask (Connexion) из спецификации OpenAPI v2 я не вижу никаких объектов модели в полученном исходном коде. Однако другие цели языка / API, такие как go-server, создают объекты модели. Я использую swagger-codegen-cli-2.3.1.jar. На данный момент моя спецификация очень проста и такова:

swagger: "2.0"

info:
  version: 0.0.1
  title: Blah API
  description: An API for interacting with the blah system

paths:

  /files:

    get:
      description: Retrieves information on files that match the specified criteria

      produces:
      - "application/json"

      parameters:
        - name: tags
          type: array
          description: The tags for which matching files are to be returned
          in: query
          items:
            type: string

      responses:
        '200':
          description: Successful response
          schema:
            type: array
            items:
              $ref: "#/definitions/File"

definitions:
  File:
    type: object
    properties:
      file_id:
        type: "string"
        format: "uuid"
      path:
        type: "string"
      tags:
        type: array
        items:
          type: "string"

Как видите, я ожидал увидеть объект модели, созданный для объекта File, определенного в разделе определений. Однако пакет моделей в Source / swagger_server содержит только модуль base_model.py без дополнительных определений, кроме самого класса базовой модели. Я запускаю swagger-codegen-cli следующим образом:

sknick@sknick:~/Repo/Blah/Server$ java -jar /home/sknick/Misc/swagger-codegen-cli-2.3.1.jar generate -l python-flask -o ./Source -i ./api.yaml
[main] INFO io.swagger.parser.Swagger20Parser - reading from ./api.yaml
[main] WARN io.swagger.codegen.DefaultCodegen - Empty operationId found for path: GET /files. Renamed to auto-generated operationId: filesGET
[main] INFO io.swagger.codegen.DefaultGenerator - Model File not imported due to import mapping
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/controllers/default_controller.py
[main] INFO io.swagger.codegen.DefaultGenerator - File exists. Skipped overwriting /home/sknick/Repo/Blah/Server/./Source/swagger_server/test/test_default_controller.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/README.md
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/setup.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/tox.ini
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/test-requirements.txt
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/requirements.txt
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/git_push.sh
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/.gitignore
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/.travis.yml
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/Dockerfile
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/.dockerignore
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/__init__.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/__main__.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/encoder.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/util.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/controllers/__init__.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/models/__init__.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/models/base_model_.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/test/__init__.py
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/swagger_server/swagger/swagger.yaml
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /home/sknick/Repo/Blah/Server/./Source/.swagger-codegen/VERSION

Не могли бы вы пояснить, что вы имеете в виду под «не вижу ... объекты модели, созданные в сгенерированном коде»? Я только что сгенерировал python-flask для Petstore, а модели находятся в каталоге swagger-server \ models. Можете ли вы опубликовать свою спецификацию OpenAPI, фактические результаты и ожидаемые результаты? Какую версию Swagger Codegen вы используете?

Helen 01.05.2018 22:21

Я пересмотрел свой вопрос. Спасибо за обратную связь.

ScoPi 03.05.2018 14:54

Я также заметил, что вместо импорта файла из модуля Python, который он делал, import java.io.File, поэтому в инструменте есть какая-то ошибка.

ScoPi 03.05.2018 17:24

Сообщил о возможной новой ошибке: github.com/swagger-api/swagger-codegen/issues/8134

ScoPi 03.05.2018 17:29

Re: update - да, проблема №3223 выглядит так же. Вероятно, это было исправлено для некоторых генераторов, но не для python-flask.

Helen 03.05.2018 18:29
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
1 161
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже на ошибку в генераторе python-flask, когда он не генерирует модели, соответствующие определенным именам классов Java, например File, Date, Set и т. д. Поведение «игнорировать модель» настраивается в классе DefaultCodegen через importMapping здесь:
https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java#L835

Некоторые генераторы, такие как C#, очищают importMapping, потому что они не используют сопоставления классов Java:
https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java#L56

importMapping.clear();

но генератор python-flask этого не делает. Вероятно, он также должен очистить importMapping, но я не разработчик Python / Flask, поэтому я не уверен.

Я предлагаю вам открыть вопрос в репозитории Swagger Codegen и / или отправить PR.

А пока существуют некоторые возможные обходные пути:

Другие вопросы по теме