AntecedentesApp Engine (Python) Precall almacén de datos API ganchos
Así que digamos que estoy haciendo aplicación para GAE, y quiero usar API Hooks.
EDITAR GRANDE: En la versión original de esta cuestión, que describe mi caso de uso, pero algunas personas correctamente señaló que no era realmente adecuado para los ganchos de la API. ¡Concedido! Considérame ayudado. Pero ahora mi problema es académico: todavía no sé cómo usar ganchos en la práctica, y me gustaría. He reescrito mi pregunta para que sea mucho más genérica.
Código
así que hago un modelo como este:
class Model(db.Model):
user = db.UserProperty(required=True)
def pre_put(self):
# Sets a value, raises an exception, whatever. Use your imagination
Y luego creo un 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')
Ser TDD de juergas, Estoy haciendo todo esto usando GAEUnit, entonces en gaeunit.py, justo arriba t El método principal, agrego:
import db_hooks
db_hooks.patch_appengine()
Y luego escribo una prueba que ejemplifica y pone un modelo.
pregunta es sin duda ser llamado
Mientras patch_appengine()
, el gancho no es nunca. ¿Qué me estoy perdiendo? ¿Cómo realizo que se llame realmente a la función pre_put?
Ah, maldición, tienes toda la razón. Entonces, ¿qué hay de hacer cumplir la singularidad por cuenta? ¿No sería mejor hacerlo al verificar antes de un put? –
Si desea imponer la exclusividad, debe verificar antes de la primera puesta que crea la entidad en el almacén de datos. Si prohíbe al usuario cambiar ese valor, lo cual es una buena idea, solo necesita verificar la creación. –
Cierto, y en ambos casos, solo voy a escribir un método que haga las comprobaciones y actualizaciones que quiero antes de poner, luego lo uso en lugar de put(). Gracias. –