5 import cProfile
, pstats
7 from google
.appengine
.api
import users
8 from google
.appengine
.ext
import webapp
9 from google
.appengine
.ext
.webapp
.util
import run_wsgi_app
10 from google
.appengine
.ext
import db
11 from google
.appengine
.ext
.webapp
import template
12 from google
.appengine
.api
import memcache
14 MEMCACHE_GREETINGS
= 'greetings'
16 class Greeting(db
.Model
):
17 author
= db
.UserProperty()
18 content
= db
.StringProperty(multiline
=True)
19 date
= db
.DateTimeProperty(auto_now_add
=True)
21 class MainPage(webapp
.RequestHandler
):
23 logging
.debug("In MainPage handler");
24 greetingsString
= memcache
.get(MEMCACHE_GREETINGS
)
25 if greetingsString
is not None:
26 logging
.info("Retrieved greetings from memcache")
27 greetings
= pickle
.loads(greetingsString
)
29 logging
.info("No greetings in memcache, re-querying datastore")
30 greetings_query
= Greeting
.all().order('-date')
31 greetings
= greetings_query
.fetch(10)
32 if not memcache
.set(MEMCACHE_GREETINGS
, pickle
.dumps(greetings
)):
33 logging
.error("Memcache set failed.")
35 if users
.get_current_user():
36 url
= users
.create_logout_url(self
.request
.uri
)
37 url_linktext
= 'Logout'
39 url
= users
.create_login_url(self
.request
.uri
)
40 url_linktext
= 'Login'
43 'greetings': greetings
,
45 'url_linktext': url_linktext
,
48 path
= os
.path
.join(os
.path
.dirname(__file__
), 'index.html')
49 self
.response
.out
.write(template
.render(path
, template_values
))
52 class Guestbook(webapp
.RequestHandler
):
56 if users
.get_current_user():
57 greeting
.author
= users
.get_current_user()
59 greeting
.content
= self
.request
.get('content')
61 memcache
.delete(MEMCACHE_GREETINGS
)
64 application
= webapp
.WSGIApplication(
66 ('/sign', Guestbook
)],
70 run_wsgi_app(application
)
73 # This is the main function for profiling
74 # We've renamed our original main() above to real_main()
75 prof
= cProfile
.Profile()
76 prof
= prof
.runctx("real_main()", globals(), locals())
78 stats
= pstats
.Stats(prof
)
79 stats
.sort_stats("time") # Or cumulative
80 stats
.print_stats(80) # 80 = how many to print
81 # The rest is optional.
82 # stats.print_callees()
83 # stats.print_callers()
89 if __name__
== "__main__":