diff -r c61d96e72e6f -r d0b7dac5325c thirdparty/google_appengine/google/appengine/api/datastore_file_stub.py --- a/thirdparty/google_appengine/google/appengine/api/datastore_file_stub.py Mon Jun 08 22:34:05 2009 +0200 +++ b/thirdparty/google_appengine/google/appengine/api/datastore_file_stub.py Fri Jun 19 16:13:32 2009 +0200 @@ -508,13 +508,18 @@ def _Dynamic_Get(self, get_request, get_response): + if get_request.has_transaction(): + entities = self.__tx_snapshot + else: + entities = self.__entities + for key in get_request.key_list(): self.__ValidateAppId(key.app()) app_kind = self._AppKindForKey(key) group = get_response.add_entity() try: - entity = self.__entities[app_kind][key].protobuf + entity = entities[app_kind][key].protobuf except KeyError: entity = None @@ -545,9 +550,13 @@ def _Dynamic_RunQuery(self, query, query_result): if not self.__tx_lock.acquire(False): - raise apiproxy_errors.ApplicationError( - datastore_pb.Error.BAD_REQUEST, 'Can\'t query inside a transaction.') + if not query.has_ancestor(): + raise apiproxy_errors.ApplicationError( + datastore_pb.Error.BAD_REQUEST, + 'Only ancestor queries are allowed inside transactions.') + entities = self.__tx_snapshot else: + entities = self.__entities self.__tx_lock.release() app = query.app() @@ -598,7 +607,7 @@ try: query.set_app(app) - results = self.__entities[app, query.kind()].values() + results = entities[app, query.kind()].values() results = [entity.native for entity in results] except KeyError: results = []