2011-05-06 2 views
2

Можете ли вы рассказать мне, как я применяю этот патч к движку Google, как в том месте, где его можно разместить? СпасибоКак применить monkeypatch к GAE?

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 
+0

'monkeypatch'! =' Patch'. Что он? –

+0

Это называется monkeypatch, где мы получили его как решение здесь https://groups.google.com/forum/#!topic/google-appengine-python/ClkOIalYD3s –

ответ

2

Просто используйте его как есть: поместите этот код в модуль, который импортируется, прежде чем использовать соответствующий модуль пользователя или функциональность хранилища данных. Я включил соответствующую строку для исправления кода (последней строки) с самим патчем.

+0

Спасибо, Ник. Проблема решена. –

1

Я думаю, это относится к некоторому приложению как Grep в пределах Appengine SDK, для «federated_identity» не приводит никаких подсказок. Кстати, вы должны делать то же самое. Grep (или WinGrep) для таких терминов, как «федеративный», чтобы увидеть, может ли этот частичный патч применяться к любому источнику.

Спасибо за обновленную ссылку. Патч может быть добавлен в файл google/appengine/api/users.py

Вы можете просто нужно добавить последнюю строку: users.User.__init__ = _user_init

Я мог бы понять это после проверки последнего кода в SVN.

+0

Мы получили код как патч к неизвестной проблеме здесь: https : //groups.google.com/forum/#! topic/google-appengine-python/ClkOIalYD3s –

+0

Здравствуйте, я обновил ответ как то, что вы должны делать. НТН. –

+3

Не изменяйте SDK. Весь смысл monkeypatch заключается в том, что он исправляет ошибку без изменения SDK. –

1

Переопределение конструктора, подобного этому, небезопасно. Если внутренняя реализация API-интерфейса Users изменяется в процессе производства, ваше приложение может сломаться без предупреждения.

Что вы пытаетесь достичь здесь? Я не вижу никакой логики; похоже, что вы только что скопировали конструктор из SDK дословно. Если вам нужно добавить пользовательскую логику, попробуйте подклассифицировать UserProperty и/или обернуть вызовы API пользователей вместо этого.

+0

Спасибо за ответы. Вот ссылка на фон, где Ник Джонсон отправил нам это как патч https://groups.google.com/forum/#!topic/google-appengine-python/ClkOIalYD3s –

+2

Спасибо, это важно. Вам просто нужно включить это в свой собственный код, после того, как вы импортировали пользователей, но прежде чем вы сначала создадите экземпляр объекта User. Например, в верхней части вашего main.py после импорта. –

Смежные вопросы