add Tasks API App Engine sample
diff --git a/samples/tasks_appengine/main.py b/samples/tasks_appengine/main.py
new file mode 100644
index 0000000..54260bd
--- /dev/null
+++ b/samples/tasks_appengine/main.py
@@ -0,0 +1,57 @@
+# Copyright (C) 2011 Google Inc.
+#
+# 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.
+
+from google.appengine.dist import use_library
+use_library('django', '1.2')
+from google.appengine.ext import webapp
+from google.appengine.ext.webapp import template
+from google.appengine.ext.webapp.util import run_wsgi_app
+from apiclient.discovery import build
+import httplib2
+from oauth2client.appengine import OAuth2Decorator
+import settings
+
+decorator = OAuth2Decorator(client_id=settings.CLIENT_ID,
+                            client_secret=settings.CLIENT_SECRET,
+                            scope=settings.SCOPE,
+                            user_agent='mytasks')
+
+
+class MainHandler(webapp.RequestHandler):
+
+  @decorator.oauth_aware
+  def get(self):
+    if decorator.has_credentials():
+      service = build('tasks', 'v1', http=decorator.http())
+      result = service.tasks().list(tasklist='@default').execute()
+      tasks = result.get('items', [])
+      for task in tasks:
+        task['title_short'] = truncate(task['title'], 26)
+      self.response.out.write(template.render('templates/index.html',
+                                              {'tasks': tasks}))
+    else:
+      url = decorator.authorize_url()
+      self.response.out.write(template.render('templates/index.html',
+                                              {'tasks': [],
+                                               'authorize_url': url}))
+
+
+def truncate(s, l):
+  return s[:l] + '...' if len(s) > l else s
+
+application = webapp.WSGIApplication([('/', MainHandler)], debug=True)
+
+
+def main():
+  run_wsgi_app(application)