如何将monkeypatch应用于GAE?

时间:2011-05-06 13:56:29

标签: python google-app-engine

您能否告诉我如何将此修补程序应用于谷歌应用引擎,如何放置它?谢谢

def _user_init(self, email=None, _auth_domain=None,
             _user_id=None, federated_identity=None, federated_provider=None):
  if not _auth_domain:
    _auth_domain = os.environ.get('AUTH_DOMAIN')
  assert _auth_domain

  if email is None and federated_identity is None:
    email = os.environ.get('USER_EMAIL', email)
    _user_id = os.environ.get('USER_ID', _user_id)
    federated_identity = os.environ.get('FEDERATED_IDENTITY',
                                        federated_identity)
    federated_provider = os.environ.get('FEDERATED_PROVIDER',
                                        federated_provider)

  if not email and not federated_identity:
    raise UserNotFoundError

  self.__email = email
  self.__federated_identity = federated_identity
  self.__federated_provider = federated_provider
  self.__auth_domain = _auth_domain
  self.__user_id = _user_id or None

users.User.__init__ = _user_init

3 个答案:

答案 0 :(得分:2)

按原样使用:在使用相关用户模块或数据存储功能之前,将该代码放入导入的模块中。我在相关行中添加了补丁代码(最后一行)和补丁本身。

答案 1 :(得分:1)

我认为,这属于一些应用程序作为appengine sdk中的grep,因为'federated_identity'不会产生任何线索。顺便说一句,你应该这样做。 Grep(或WinGrep)用于“联合”之类的术语,以查看此部分补丁是否可以应用于任何源。

感谢您更新的链接。该补丁可以添加到文件google/appengine/api/users.py

您可能只需要添加最后一行:users.User.__init__ = _user_init

在检查svn中的最新代码后,我可以解决这个问题。

答案 2 :(得分:1)

像这样覆盖构造函数是不安全的。如果用户API的内部实现在生产中发生变化,您的应用程序可能会在没有警告的情况下中断。

你想在这里完成什么?我没有看到任何自定义逻辑;看起来你刚刚从SDK中逐字复制了构造函数。如果您需要添加自定义逻辑,请尝试继承UserProperty和/或包装用户API调用。