1

PythonのGoogleAppEngineアプリケーションでsudを使用しようとしています。これはトレースバックです:

client = Client(url)
  File "/base/data/home/apps/sandbox/test.349741318547153856/suds/client.py",
line 109, in __init__
    options.cache = ObjectCache(days=1)
  File "/base/data/home/apps/sandbox/test.349741318547153856/suds/cache.py",
line 141, in __init__
    location = os.path.join(tmp(), 'suds')
  File "/base/python_runtime/python_dist/lib/python2.5/tempfile.py",
line 45, in PlaceHolder
    raise NotImplementedError("Only tempfile.TemporaryFile is
available for use")
NotImplementedError: Only tempfile.TemporaryFile is available for use

client.pyで109行目を変更してみました:

options.cache = ObjectCache(days=1)

に:

options.cache = None

現在は機能していますが、将来何かに影響を与える可能性があるかどうかはわかりません。

誰かがここで私を助けてくれるなら本当に感謝しています。

前もって感謝します。

4

2 に答える 2

2

appengineでローカルファイルに書き込むことはできません。そのため、処理されたWSDLのキャッシュを一時ファイルに書き込もうとするとエラーが発生します。キャッシュしたり、代替のキャッシュメカニズムを提供したりする必要はありません。非常に高価なWSDLファイルを使用してappengineでsudを使用しているため、キャッシュをハッキングして開発サーバーファイルシステムにキャッシュを書き込み、デプロイされたコードを使用してキャッシュをアップロードしました。

私はだましました-ある種。

def precache_wsdl(wsdl,principal):
    log = logging.getLogger()
    log.setLevel = logging.info
    cache_location = os.path.join(os.path.dirname(__file__),"cache")
    security = Security()
    token = UsernameToken(*principal)
    security.tokens.append(token)
    client = Client(wsdl,cache=FileCache(cache_location))
    client.set_options(wsse=security)

このコードをappengineコードで定義しました。リモートコマンドAPIをロードし、ローカルで実行して、キャッシュに事前入力しました。次に、実際のappengineコードでcach_locationが正しく設定されていることを確認します。remote_apiシェルで実行する場合、サーバーコードと同じ制限で実行していません。実際、シェルの下で実行する必要はありませんが、私はそのように多くのことを行う傾向があります。

于 2012-08-14T09:21:04.117 に答える
2

pipのjurko-sudsを使用cache=して、コンストラクターに設定します。

from suds.cache import NoCache
[...]
client = Client(url, cache=NoCache())
于 2016-10-22T18:41:16.573 に答える