Example #1
0
    def get(self, tag):
        # To allow a join action to redirect to OAuth and smoothly redirect
        # back here to finish the action, the join action is a GET request.
        if self.request.get('join'):
            # Add a tag to the member, and also update the member's location.
            self.require_member()
            self.verify_signature()
            now = datetime.datetime.utcnow()
            duration = int(self.request.get('duration'))
            stop_time = now + datetime.timedelta(0, duration)
            self.member.set_location(utils.get_location(self.member), now)
            model.Member.join(self.user, tag, stop_time)
            # Ensure that a TagStat entity exists, to be later updated.
            model.TagStat.get_or_insert(key_name=tag)
            # Schedule a task to update the stats now.
            taskqueue.add(
                method='GET', url='/_update_tagstats', params={'tag': tag})
            # Schedule a task to promptly update the stats upon expiry.
            taskqueue.add(
                method='GET', countdown=duration + 1,
                url='/_update_tagstats', params={'tag': tag})
            # Redirect to avoid adding the join action to the browser history.
            raise utils.Redirect('/' + tag)

        # Generate the tag viewing page.
        now = datetime.datetime.utcnow()
        user_id = self.user and self.user.user_id()
        join_time = ''
        members = []
        for member in model.Member.get_for_tag(tag, now):
            if member.location:
                if member.user.user_id() == user_id:
                    join_time = utils.describe_delta(
                        member.get_stop_time(tag) - now)
                else:
                    members.append(self.get_member_info(member))
        members.sort(key=lambda m: (m.get('distance', 0), m['nickname']))
        if join_time:
            members.insert(0, self.get_member_info(self.member))
            members[0]['is_self'] = 1
        if self.user:
            self.set_signature()  # to prevent XSRF
        self.render('templates/tag.html', vars=self.vars, tag=tag,
                    join_time=join_time, members=simplejson.dumps(members))
Example #2
0
 def get(self):
     self.require_user()
     nickname = self.request.get('nickname', '')
     next = self.request.get('next', '')
     duration = utils.describe_delta(
         datetime.timedelta(0, int(self.request.get('duration', '0'))))
     if not nickname:
         self.render('templates/register.html', next=next, duration=duration,
                     nickname=self.user.nickname().split('@')[0])
     else:
         # Then proceed to the OAuth authorization page.
         parameters = {
             'scope': latitude.LatitudeOAuthClient.SCOPE,
             'domain': model.Config.get('oauth_consumer_key'),
             'granularity': 'best',
             'location': 'current'
         }
         callback_url = self.request.host_url + '/_oauth_callback?' + \
             utils.urlencode(nickname=nickname, next=next)
         oauth_webapp.redirect_to_authorization_page(
             self, latitude.LatitudeOAuthClient(utils.oauth_consumer),
             callback_url, parameters)