def get(self):
      # There should be an instance of ToiletSeat. If not, create one.
      there_is_no_toilet_seat = app_admin.ToiletSeat.gql(
                                     'WHERE ANCESTOR IS :1',
                                     app_admin.toilet_key()
                                ).count() == 0

      if there_is_no_toilet_seat:
         app_admin.create_toilet_seat()

      # Does user already exist (has a cookie up-to-date)?
      uid = identify_from_cookie(self)
      if not uid:
         # Give user a cookie ID.
         uid = str(random.random())
         app_admin.create_user(uid)
         self.response.headers.add_header('Set-Cookie', 'uid=%s' % uid)

      dot = os.path.dirname(__file__)

      template_path = os.path.join(dot, 'thevirtualtoiletseat_template.html')
      self.response.out.write(
            # User starts pinging.
            open(template_path).read()
      )
   def post(self):
      # Check that user is inside.
      uid = identify_from_cookie(self)
      # Early return if this POST is forbidden.
      if not user_is_inside(uid):
         return

      toilet_query = app_admin.ToiletSeat.gql(
                           'WHERE ANCESTOR IS :1 ',
                            app_admin.toilet_key()
                      )
      toilet_data = toilet_query[0]
      user_action = self.request.get('action')
      
      if user_action in ('pee', 'poo'):
         toilet_data.clean = False
         msg = DIRTY
      elif user_action in ('flush'):
         toilet_data.clean = True
         msg = CLEAN

      # Save state.
      toilet_data.put()

      # Send response.
      self.response.out.write(msg)
   def post(self):
      # Yes, who is it?
      uid = self.request.get('uid')
      now = datetime.datetime.now()

      # First update user's 'last_ping'.
      user_query = app_admin.User.gql(
                          'WHERE ANCESTOR IS :1 AND uid = :2',
                          app_admin.user_key(),
                          uid
                   )

      if user_query.count() != 1:
         self.response.out.write('Ooops!!')
      else:
         user = user_query[0]
         user.last_ping = now
         user.put()

      # Ditch users who did not ping for more more than NO_PING_TIMEOUT.
      deadline = now - app_admin.NO_PING_TIMEOUT
      ditched_users_query = app_admin.User.gql(
                               'WHERE ANCESTOR IS :1 AND last_ping < :2',
                               app_admin.user_key(),
                               deadline
                            )
      db.delete(ditched_users_query)
 

      dot = os.path.dirname(__file__)

      if user_is_inside(uid):
         # Bingo! You've been lucky or patient. Welcome inside.
         toilet_query = app_admin.ToiletSeat.gql(
                              'WHERE ANCESTOR IS :1 ',
                               app_admin.toilet_key()
                         )
         msg = CLEAN if toilet_query[0].clean else DIRTY
         template_path = os.path.join(dot, 'content', 'inside_content.html')
         template_values = {
            'state': msg,
         }
         content = template.render(template_path, template_values)
         self.response.out.write(content)
      else:
         # There is still someone else inside. See you next ping...
         self.response.out.write(open(os.path.join(
               dot,
               'content',
               'busy_content.html'
         )).read())
    def post(self):
        # Yes, who is it?
        uid = self.request.get('uid')
        now = datetime.datetime.now()

        # First update user's 'last_ping'.
        user_query = app_admin.User.gql('WHERE ANCESTOR IS :1 AND uid = :2',
                                        app_admin.user_key(), uid)

        if user_query.count() != 1:
            self.response.out.write('Ooops!!')
        else:
            user = user_query[0]
            user.last_ping = now
            user.put()

        # Ditch users who did not ping for more more than NO_PING_TIMEOUT.
        deadline = now - app_admin.NO_PING_TIMEOUT
        ditched_users_query = app_admin.User.gql(
            'WHERE ANCESTOR IS :1 AND last_ping < :2', app_admin.user_key(),
            deadline)
        db.delete(ditched_users_query)

        dot = os.path.dirname(__file__)

        if user_is_inside(uid):
            # Bingo! You've been lucky or patient. Welcome inside.
            toilet_query = app_admin.ToiletSeat.gql('WHERE ANCESTOR IS :1 ',
                                                    app_admin.toilet_key())
            msg = CLEAN if toilet_query[0].clean else DIRTY
            template_path = os.path.join(dot, 'content', 'inside_content.html')
            template_values = {
                'state': msg,
            }
            content = template.render(template_path, template_values)
            self.response.out.write(content)
        else:
            # There is still someone else inside. See you next ping...
            self.response.out.write(
                open(os.path.join(dot, 'content', 'busy_content.html')).read())
    def get(self):
        # There should be an instance of ToiletSeat. If not, create one.
        there_is_no_toilet_seat = app_admin.ToiletSeat.gql(
            'WHERE ANCESTOR IS :1', app_admin.toilet_key()).count() == 0

        if there_is_no_toilet_seat:
            app_admin.create_toilet_seat()

        # Does user already exist (has a cookie up-to-date)?
        uid = identify_from_cookie(self)
        if not uid:
            # Give user a cookie ID.
            uid = str(random.random())
            app_admin.create_user(uid)
            self.response.headers.add_header('Set-Cookie', 'uid=%s' % uid)

        dot = os.path.dirname(__file__)

        template_path = os.path.join(dot, 'thevirtualtoiletseat_template.html')
        self.response.out.write(
            # User starts pinging.
            open(template_path).read())
    def post(self):
        # Check that user is inside.
        uid = identify_from_cookie(self)
        # Early return if this POST is forbidden.
        if not user_is_inside(uid):
            return

        toilet_query = app_admin.ToiletSeat.gql('WHERE ANCESTOR IS :1 ',
                                                app_admin.toilet_key())
        toilet_data = toilet_query[0]
        user_action = self.request.get('action')

        if user_action in ('pee', 'poo'):
            toilet_data.clean = False
            msg = DIRTY
        elif user_action in ('flush'):
            toilet_data.clean = True
            msg = CLEAN

        # Save state.
        toilet_data.put()

        # Send response.
        self.response.out.write(msg)