基本的に、「Pyramidで既存のAPIを使用するにはどうすればよいのですか」という質問があります。ピラミッドは、あなたが基本的には、あなたがそれをインポートし、そのメソッドを呼び出して、データを取得し、テンプレートに送信:)言うことにもかかわらず、この分野でのデータベースに依存しない、非常に透明であるので、これは非常に簡単です:
import pokemon_api as api
@view_config(route_name='list_pokemon', renderer='pokemon_list.mako')
def list_pokemon(request):
# To illustrate how to get data from the request to send to your API
batch_start = request.GET.get('batch_start', 0)
batch_end = batch_start + request.GET.get('batch_size', 0)
sort_order = request.GET.get('sort_by', 'name')
# Here we call our API - we don't actually care where it gets the data from, it's a black box
pokemon = api.retrieve_pokemon(from=batch_start, to=batch_end, sort=sort_order)
# send the data to the renderer/template
return {
'pokemon': pokemon
}
@view_config(route_name='add_pokemon', request_method='POST')
def add_pokemon(request):
"""
Add a new Pokemon
"""
name = request.POST.get('name', 0)
weight = request.GET.get('weight', 0)
hight = request.GET.get('hight', 0)
api.create(name=name, weight=weight, height=height)
# go back to the listing
return HTTPFound('/pokemon_list')
とあればあなたのAPIを使用すると、もちろん
import pokemon_api as api
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
config = Configurator(settings=settings)
...
api.init("MAGIC_CONNECTION_STRING")
return config.make_wsgi_app()
起動時にそれを行うことができ、いくつかの初期化を必要とする、これはあなたのAPIがすでにトランザクション、接続、プールや他の退屈なもの:)もちろんのこと
ワン最後のポイントを扱う前提として - Pythonでは一般的にはものをインポートしません内部メソッドでは、モジュールレベルのスコープでファイルの先頭にインポートします。そのルールには例外がありますが、なぜこの場合に必要なのかわかりません。また、モジュールのインポートには副作用(「views.py __init__
メソッドでラッパーをインポートする」が問題を引き起こしているように思われる)がないようにする必要があります。
ありがとうSergey。以下は、rdラッパークラスの実際のコードです。私はいくつかのPythonを学ぶための練習として書きましたので、たくさんの改訂が見られます。 – Niall
申し訳ありません、ファイルは次のとおりです: - https://www.dropbox.com/s/b7848m1r49sk4z8/beneOracleWrapper.py?dl=0 – Niall
私はあなたの解決策がまだ有効であると推測していますか? – Niall