python - 泡沫:谷歌应用引擎支持

标签 python xml google-app-engine soap suds

我正在尝试在 python Google App Engine 应用程序中使用 suds。这是 回溯:

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

现在可以使用了,但我不确定这是否会影响 future 。

如果有人能在这里帮助我,我真的很感激。

提前致谢。

最佳答案

您无法在 AppEngine 中写入本地文件。这就是为什么您会收到该错误,它试图将已处理的 WSDL 缓存写入临时文件。您将不必缓存或提供备用缓存机制。我在 appengine 上使用 suds 和一个非常昂贵的 WSDL 文件,所以我破解了缓存以将缓存写入开发服务器文件系统,然后使用部署的代码上传缓存。

我作弊 - 有点。

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)

我在我的应用引擎代码中定义了这段代码。加载远程命令 api,在本地运行, 预填充缓存。然后我确定 cach_location 在我的真实应用引擎代码中设置正确。当您在 remote_api shell 中运行时,您运行的限制与服务器代码不同。事实上,您甚至不必在 shell 下运行它,但我倾向于那样做。

关于python - 泡沫:谷歌应用引擎支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11949257/

相关文章:

python - celery - 链中的组

java - 您需要使用 Theme.AppCompat 主题错误,即使主题设置为 AppCompat

html - XPath 不选择嵌套匹配

asp.net - 使用 VB.NET 读取 XML 文件

google-app-engine - 在不同服务器上的 GAE 和数据库上托管应用程序

google-app-engine - App Engine Multi-Tenancy SSL 和计费

python - 计算游戏的高分表

python - Django Admin list_display 产品列表

python - 计算在另一列中找到的字符串(以任何顺序)的频率,并在新列中返回结果

python - 生成预测列表