def __counter_tx(self, counter_call): name = self.name config = CounterShardConfiguration.get_or_insert(name, name=name) def txn(): index = random.randint(0, config.shard_count - 1) shard_name = "%s/%s" % (name, str(index)) counter = CounterShard.get_by_key_name(shard_name) if counter is None: counter = CounterShard(key_name=shard_name, name=name, **self.__kw) logging.debug("creating %s" % name) counter_call(counter) # I may have decremented a counter down to 0. in this case I want to delete it if counter.count > 0: counter.put() else: counter.delete() logging.debug("name:%s count:%s" % (name, counter.count)) db.run_in_transaction(txn)