#python #google-app-engine
#python #google-app-engine
Вопрос:
Можете ли вы сказать мне, как мне применить этот патч к 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
Комментарии:
1.
monkeypatch
!=patch
. Что это?2. Это называется monkeypatch, где мы получили его в качестве решения здесь groups.google.com/forum /#!topic/google-appengine-python /…
Ответ №1:
Просто используйте его как есть: поместите этот код в модуль, который будет импортирован, прежде чем использовать соответствующий пользовательский модуль или функциональность хранилища данных. Я включил соответствующую строку для исправления кода (последнюю строку) вместе с самим исправлением.
Ответ №2:
Переопределять конструктор подобным образом небезопасно. Если внутренняя реализация пользовательского API изменится в процессе производства, ваше приложение может прерваться без предупреждения.
Чего вы пытаетесь здесь достичь? Я не вижу никакой пользовательской логики; похоже, вы только что скопировали конструктор из SDK дословно. Если вам нужно добавить пользовательскую логику, попробуйте вместо этого создать подкласс UserProperty и / или обернуть вызовы пользовательского API.
Комментарии:
1. Спасибо за ответы. Вот ссылка на фон, где Ник Джонсон отправил нам это в качестве исправления groups.google.com/forum /#!topic/google-appengine-python /…
2. Спасибо, это актуально. По сути, вам просто нужно включить это в свой собственный код после того, как вы импортировали пользователей, но перед первым созданием экземпляра пользовательского объекта. Например, в верхней части вашего main.py после импорта.
Ответ №3:
Я думаю, это относится к какому-то приложению в качестве grep в appengine sdk, поскольку ‘federated_identity’ не дает никаких подсказок. Кстати, вы должны делать то же самое. Grep (или WinGrep) для таких терминов, как «федеративный», чтобы увидеть, можно ли применить этот частичный патч к любому источнику.
Спасибо за обновленную ссылку. Исправление может быть добавлено в файл google/appengine/api/users.py
Возможно, вам просто нужно добавить последнюю строку: users.User.__init__ = _user_init
Я смог разобраться в этом после проверки последнего кода в svn.
Комментарии:
1. Мы получили код в качестве исправления для неизвестной проблемы здесь: groups.google.com/forum /#!topic/google-appengine-python /…
2. Не изменяйте SDK. Весь смысл monkeypatch в том, что он исправляет ошибку без изменения SDK.