Revision created by MOE tool push_codebase.
MOE_MIGRATION=918
http://code.google.com/p/appengine-afterburner/source/detail?r=28
Modified:
/trunk/python/src/afterburner/experimental/db/triggers.py
=======================================
--- /trunk/python/src/afterburner/experimental/db/triggers.py Mon Mar 14
17:50:48 2011
+++ /trunk/python/src/afterburner/experimental/db/triggers.py Thu Mar 17
12:37:06 2011
@@ -157,6 +157,7 @@
from google.appengine.api import apiproxy_stub_map
from google.appengine.api import datastore
from google.appengine.api import taskqueue
+from google.appengine.datastore import datastore_rpc
from google.appengine.ext import db
from google.appengine.ext import webapp
@@ -165,6 +166,17 @@
UPDATE_URL = "/_ab/triggers/update"
+def _allocate_ids(keypb, size=1):
+ """Version of db.allocate_ids that works inside the transaction.
+
+ Args:
+ keypb: Key as a protocol buffer.
+ size: number of keys to allocate.
+ """
+ conn = datastore_rpc.Connection(adapter=None)
+ return conn.allocate_ids(keypb, size)
+
+
class Update(db.Model):
@classmethod
def kind(cls):
@@ -192,8 +204,7 @@
if not last_path_element.id() and not last_path_element.has_name():
# assign id to the entity
last_path_element.set_id(-1)
- db_key = db.Key._FromPb(key)
- allocated_id = db.allocate_ids(db_key, 1)[0]
+ allocated_id = _allocate_ids(key)[0]
last_path_element.set_id(allocated_id)
# Populate entity group, because datastore stub is stupid.
@@ -201,9 +212,9 @@
group = entity.mutable_entity_group()
root = entity.key().path().element(0)
group.add_element().CopyFrom(root)
+ db_key = db.Key._FromPb(key)
update_entity = Update(
- key_name=str(db.Key._FromPb(key)),
- parent=db.Key._FromPb(key))._populate_entity()
+ key_name=str(db_key), parent=db_key)._populate_entity()
extra_entities.append(update_entity._ToPb())
request.entity_list().extend(extra_entities)
elif call == "Delete" and not cls.ignore_deletes: