云计算ndb命名空间每请求

问题描述 投票:0回答:1

我正试图将我们的代码迁移到Cloud NDB。 我们为每个客户都有单独的命名空间。

我如何才能为每个请求安全地切换命名空间?

我已经实现了 Flask 中间件,就像网站上的例子一样。迁移文件

命名空间是客户端的一个属性。所以当一个请求进来的时候,我从accesstoken中确定电子邮件,并确定这个用户属于哪个命名空间。然后我改变客户端的命名空间。

恐怕这个client.namespace属性不是线程安全的。而且我不想让用户看到彼此的数据。

client = ndb.Client()


def ndb_wsgi_middleware(wsgi_app):
    def middleware(environ, start_response):
        with client.context():
            return wsgi_app(environ, start_response)

    return middleware

def switch_user(email):
    client = context_module.get_context().client        
    client.namespace = determine_namespace(email)

我可以将客户端的创建移到中间件内部,但我读到这将产生很多我们想要避免的开销。

google-cloud-datastore app-engine-ndb
1个回答
0
投票

此问题已在 python-ndb 库中得到解决。https:/github.comgoogleapispython-ndbpull388。

nampespace属性已经被移到了上下文级别,所以我现在可以根据请求来改变它。

© www.soinside.com 2019 - 2024. All rights reserved.