Механизм приложения (Python) предварительный вызов хранилища данных рычаги API

Фон

Так скажем, я делаю приложение для GAE, и я хочу использовать Рычаги API.

БОЛЬШОЕ РЕДАКТИРОВАНИЕ: В исходной версии этого вопроса я описал свой вариант использования, но некоторые люди правильно указали, что это действительно не подошло для Рычагов API. Предоставленный! Рассмотрите меня, помог. Но теперь моя проблема является академической: Я все еще не знаю, как использовать рычаги на практике, и я хотел бы. Я переписал свой вопрос сделать его намного более универсальным.


Код

Таким образом, я делаю модель как это:

class Model(db.Model):
    user = db.UserProperty(required=True)
    def pre_put(self):
        # Sets a value, raises an exception, whatever.  Use your imagination

И затем я создаю db_hooks.py:

from google.appengine.api import apiproxy_stub_map

def patch_appengine(): 
    def hook(service, call, request, response):
        assert service == 'datastore_v3'
        if call == 'Put':
            for entity in request.entity_list():
                entity.pre_put()

    apiproxy_stub_map.apiproxy.GetPreCallHooks().Append('preput',
                                                        hook,
                                                        'datastore_v3')

Быть испорченным TDD, я делаю все это использование GAEUnit, таким образом, в gaeunit.py, чуть выше основного метода, я добавляю:

import db_hooks
db_hooks.patch_appengine()

И затем я пишу тест, который инстанцирует и помещает Модель.


Вопрос

В то время как patch_appengine() определенно называется, рычаг никогда не. Что я пропускаю? Как я заставляю функцию pre_put на самом деле называться?

5
задан David Underhill 21 July 2010 в 21:05
поделиться

2 ответа

Я не думаю, что хуки действительно решат эту проблему. Хуки будут работать только в контексте вашего приложения AppEngine, но пользователь может изменить свой псевдоним вне вашего приложения, используя настройки учетной записи Google. Если они это сделают, это не приведет к запуску какой-либо логической реализации в ваших хуках.

Я думаю, что реальное решение вашей проблемы состоит в том, чтобы ваше приложение управляло своим собственным псевдонимом, независимым от того, который предоставляется сущностью Users.

1
ответ дан 14 December 2019 в 19:11
поделиться

Хуки - это немного низкий уровень для текущей задачи. Вероятно, вам нужен пользовательский класс свойств. DerivedProperty, от aetycoon , - это просто билет.

Однако имейте в виду, что поле 'псевдонима' объекта пользователя, вероятно, не то, что вы хотите - согласно документам , это просто пользовательская часть поля электронной почты, если они используют учетную запись Gmail, в противном случае это их полный адрес электронной почты. Вместо этого вы, вероятно, захотите позволить пользователям устанавливать свои собственные псевдонимы.

2
ответ дан 14 December 2019 в 19:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: