Home | History | Annotate | Download | only in tasks_appengine
      1 # Copyright 2014 Google Inc. All Rights Reserved.
      2 #
      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
      6 #
      7 #     http://www.apache.org/licenses/LICENSE-2.0
      8 #
      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.
     14 
     15 import webapp2
     16 from webapp2_extras import jinja2
     17 
     18 from googleapiclient.discovery import build
     19 from oauth2client.contrib.appengine import OAuth2Decorator
     20 
     21 import settings
     22 
     23 decorator = OAuth2Decorator(client_id=settings.CLIENT_ID,
     24                             client_secret=settings.CLIENT_SECRET,
     25                             scope=settings.SCOPE)
     26 service = build('tasks', 'v1')
     27 
     28 
     29 class MainHandler(webapp2.RequestHandler):
     30 
     31   def render_response(self, template, **context):
     32     renderer = jinja2.get_jinja2(app=self.app)
     33     rendered_value = renderer.render_template(template, **context)
     34     self.response.write(rendered_value)
     35 
     36   @decorator.oauth_aware
     37   def get(self):
     38     if decorator.has_credentials():
     39       result = service.tasks().list(tasklist='@default').execute(
     40           http=decorator.http())
     41       tasks = result.get('items', [])
     42       for task in tasks:
     43         task['title_short'] = truncate(task['title'], 26)
     44       self.render_response('index.html', tasks=tasks)
     45     else:
     46       url = decorator.authorize_url()
     47       self.render_response('index.html', tasks=[], authorize_url=url)
     48 
     49 
     50 def truncate(s, l):
     51   return s[:l] + '...' if len(s) > l else s
     52 
     53 
     54 application = webapp2.WSGIApplication([
     55     ('/', MainHandler),
     56     (decorator.callback_path, decorator.callback_handler()),
     57     ], debug=True)
     58