Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
91 lines (72 loc) · 2.79 KB

File metadata and controls

91 lines (72 loc) · 2.79 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Copyright 2015 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Sample App Engine application demonstrating how to use the Namespace Manager
API with Memcache.
For more information, see README.md.
"""
# [START all]
from google.appengine.api import namespace_manager
from google.appengine.api import taskqueue
from google.appengine.ext import ndb
import webapp2
class Counter(ndb.Model):
count = ndb.IntegerProperty()
@ndb.transactional
def update_counter(name):
"""Increment the named counter by 1."""
counter = Counter.get_by_id(name)
if counter is None:
counter = Counter(id=name, count=0)
counter.count += 1
counter.put()
return counter.count
def get_count(name):
counter = Counter.get_by_id(name)
if not counter:
return 0
return counter.count
class DeferredCounterHandler(webapp2.RequestHandler):
def post(self):
name = self.request.get('counter_name')
update_counter(name)
class TaskQueueCounterHandler(webapp2.RequestHandler):
"""Queues two tasks to increment a counter in global namespace as well as
the namespace is specified by the request, which is arbitrarily named
'default' if not specified."""
def get(self, namespace='default'):
# Queue task to update global counter.
current_global_count = get_count('counter')
taskqueue.add(
url='/tasks/counter',
params={'counter_name': 'counter'})
# Queue task to update counter in specified namespace.
previous_namespace = namespace_manager.get_namespace()
try:
namespace_manager.set_namespace(namespace)
current_namespace_count = get_count('counter')
taskqueue.add(
url='/tasks/counter',
params={'counter_name': 'counter'})
finally:
namespace_manager.set_namespace(previous_namespace)
self.response.write(
'Counters will be updated asyncronously.'
'Current values: Global: {}, Namespace {}: {}'.format(
current_global_count, namespace, current_namespace_count))
app = webapp2.WSGIApplication([
(r'/tasks/counter', DeferredCounterHandler),
(r'/taskqueue', TaskQueueCounterHandler),
(r'/taskqueue/(.*)', TaskQueueCounterHandler)
], debug=True)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.