Connexion: AttributeError: 'App'オブジェクトに属性がありません 'handle_exception'

作成日 2016年04月28日  ·  4コメント  ·  ソース: zalando/connexion

説明

フラスコレストフルを使用するフラスコバックエンドアプリケーションを作成しています。 swagger.ioのオンラインエディターを使用してswagger.yamlを作成し、swaggerUIの接続ベースのサーバー実装をエクスポートしました。 そのコードを既存のアプリケーションの上にマージし、その後、アプリケーションを実行しようとしました。

期待される動作

サーバーを起動でき、 localhost:5000 / v1 / uiがSwaggerUIをレンダリングできるはずです。

実際の動作

フラスコレストフルで接続フラスコインスタンスを使用しようとしているときに、コードがコンパイルされて失敗しません。

以下はスタックトレースです。
トレースバック(最後の最後の呼び出し):
ファイル「app.py」、17行目、
api = Api(webapp)
ファイル "C:\ stuff \ Git \ Museum_link_curation \ flask-backend \ lib \ site-packages \ flask_restful__init __。py"、96行目、 init
self.init_app(app)
ファイル "C:\ stuff \ Git \ Museum_link_curation \ flask-backend \ lib \ site-packages \ flask_restful__init __。py"、118行目、init_app
self._init_app(app)
ファイル "C:\ stuff \ Git \ Museum_link_curation \ flask-backend \ lib \ site-packages \ flask_restful__init__。py"、行195、_init_app
app.handle_exception = partial(self.error_router、app.handle_exception)
AttributeError: 'App'オブジェクトに属性がありません 'handle_exception'

以下は、接続をマージするために変更したコードです。
#webapp = Flask(__name__) # commented
webapp = connexion.App(__name__, specification_dir='swagger/') # newly added
webapp.add_api('swagger.yaml') #newly added
api = Api(webapp) #existing
...

if __name__ == '__main__': #existing
webapp.run(debug=True) #existing

再現する手順

フラスコインスタンスの代わりに、接続アプリインスタンスを使用してflask-restfulを初期化します。

追加情報:

Windows10マシンで実行しています。 主にPython2で、 http: //stackoverflow.com/questions/36416679/error-generate-swagger-server-python-flask-from-swagger-editorからハックが言及されてい

コマンドの出力:

  • python --version
  • `Python 2.7.111
  • pip show connexion | grep "^Version\:"
  • 'メタデータ-バージョン:2.0 名前:connexion バージョン:1.0.91 要約:Connexion-OpenAPI / SwaggerとFlaskを備えたAPIファーストアプリケーション ホームページ: https 作成者:Zalando SE 作成者-メール:不明 インストーラー:pip ライセンス:Apacheライセンスバージョン2.0 場所:c:\ stuff \ git \ Museum_link_curation \ flask-backend \ lib \ site-packages 必要なもの:requests、swagger-spec-validator、 six、strict-rfc3339、PyYAML、flask、pathlib、jsonschema 分類子: プログラミング言語:: Python プログラミング言語:: Python :: 2.7 プログラミング言語:: Python :: 3.4 プログラミング言語:: Python :: 3.5 開発状況:: 5-本番/安定版 対象読者::開発者 オペレーティングシステム:: OSに依存しない トピック::インターネット:: WWW / HTTP :: WSGI ::アプリケーション 'トピック::ソフトウェア開発::ライブラリ:: Appli カチオンフレームワーク '`

最も参考になるコメント

同様の問題が発生しました。その理由は、 connexion.AppFlask直接スワップではないためです。 ただし、connexionはFlaskインスタンスをapp変数にカプセル化します

元のコードが次の場合:

webapp = Flask(__name__)
api = Api(webapp)

その場合、接続に相当するものは次のとおりです。

connexion_app = connexion.App(__name__)
connexion_app.add_api('swagger.yaml')
webapp = connexion_app.app

connexionが自動的に行うため、 APIインスタンスを作成する必要はありません。

免責事項:これは予期しない副作用につながる可能性がありますが、まだ発見されていませんが、これまでのところ私にとってはうまくいきます。

全てのコメント4件

同様の問題が発生しました。その理由は、 connexion.AppFlask直接スワップではないためです。 ただし、connexionはFlaskインスタンスをapp変数にカプセル化します

元のコードが次の場合:

webapp = Flask(__name__)
api = Api(webapp)

その場合、接続に相当するものは次のとおりです。

connexion_app = connexion.App(__name__)
connexion_app.add_api('swagger.yaml')
webapp = connexion_app.app

connexionが自動的に行うため、 APIインスタンスを作成する必要はありません。

免責事項:これは予期しない副作用につながる可能性がありますが、まだ発見されていませんが、これまでのところ私にとってはうまくいきます。

@ thirty3あなたは正しいです。
@ mit2nilそれで問題が解決するかどうか、お知らせください。

@rafaelcaricio@ thirty3に感謝します。 はい、これで問題は解決しました。

私も同じ問題を見つけました、これを修正するのを手伝ってくれませんか。 私はすでに上記の方法を試しました。

このページは役に立ちましたか?
0 / 5 - 0 評価