https://stackoverflow.com/a/6230083/1241454に記載されているように、os.environ dict を変更して、Google App Engine にログインしているユーザーをシミュレートしようとしていました。
from google.appengine.api import users
import webapp2
import os
class TestPage(webapp2.RequestHandler):
def get(self):
os.environ['USER_EMAIL'] = 'a@b.c'
user = users.get_current_user()
self.response.out.write(user.email())
これはうまくいきません。get_current_user()
上記の例では、少なくとも開発サーバーで実行している場合は None を返します。testbed.setup_env()
os.environ を直接編集するのではなく、使用しても同じ結果が得られます。ただし、以下は機能します。
from google.appengine.api import users
import webapp2
import os
class TestPage(webapp2.RequestHandler):
def get(self):
os.environ['USER_EMAIL'] = 'a@b.c'
reload(users)
user = users.get_current_user()
self.response.out.write(user.email())
唯一の変更は、os.environ の変更後にユーザー モジュールをリロードすることでした。これは予期された動作ですか、それとも App Engine の設定に何か問題がありますか? 私の理解では、Python / App Engine は、システムにロードされた os モジュールのコピーを 2 つではなく 1 つだけロードする必要があります。
何か案は?これは私を非常に混乱させます。