add demonstration of geosearch
[gae-samples.git] / sharded-counters / simplecounter.py
blob4853da1079c213cc9fbe7f24f827fda7b38743c0
1 # Copyright 2008 Google Inc.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
16 from google.appengine.ext import db
17 import random
19 class SimpleCounterShard(db.Model):
20 """Shards for the counter"""
21 count = db.IntegerProperty(required=True, default=0)
23 NUM_SHARDS = 20
25 def get_count():
26 """Retrieve the value for a given sharded counter."""
27 total = 0
28 for counter in SimpleCounterShard.all():
29 total += counter.count
30 return total
32 def increment():
33 """Increment the value for a given sharded counter."""
34 def txn():
35 index = random.randint(0, NUM_SHARDS - 1)
36 shard_name = "shard" + str(index)
37 counter = SimpleCounterShard.get_by_key_name(shard_name)
38 if counter is None:
39 counter = SimpleCounterShard(key_name=shard_name)
40 counter.count += 1
41 counter.put()
42 db.run_in_transaction(txn)