예제 #1
0
    def post(self):
        user = User.get(users.get_current_user())
        if not user.superuser:
            self.redirect('/invite',
                          error="Must be an admin to edit configuration.")
            return

        err = []
        msg = []
        flags = {}
        for name in config.keys():
            v = self.request.get('config_%s' % name)
            if v != "":
                logging.info("Updating %s: %s" % (name, v))
                flags[name] = Config.update(name, v)
                if flags[name] == True:
                    config[name] = v
                elif flags[name] is None:
                    err.append("Failed to update %s." % name)
            else:
                Config.query(Config.name==name).get().key.delete()
                del(config[name])
                msg.append("'%s' deleted." % name)
                logging.info("Deleted key '%s'." % name)

        new_name = self.request.get('new_name')
        if new_name:
            value = self.request.get('new_value')
            logging.info("New config key %s: %s" % (new_name, value))
            Config(name=new_name, value=value).put()
            flags[new_name] = True
            config[new_name] = value


        self.get(error=", ".join(err), msg=", ".join(msg), flags=flags)
예제 #2
0
    def get(self):
        days = defaultdict(dict)
        for gn in Gamenight.future(10):
            days[gn.date]['date'] = gn.date
            days[gn.date]['scheduled'] = True
            days[gn.date]['status'] = gn.status
            days[gn.date]['owner'] = gn.owner
            days[gn.date]['time'] = gn.time
            days[gn.date]['where'] = gn.location

        invitations = Invitation.query(Invitation.date >= Utils.now()).\
                          order(Invitation.date).iter()
        for invite in invitations:
            if not days[invite.date].get('invitations'):
                days[invite.date]['date'] = invite.date
                days[invite.date]['invitations'] = []

            days[invite.date]['invitations'].append(invite)

        day_sorter = lambda x: x.get('date')
        template_values = { 'days': sorted(days.values(), key=day_sorter) }
        current_user = users.get_current_user()
        if current_user:
            user = User.get(users.get_current_user())
            template_values.update({
                'logout': users.create_logout_url('/'),
                'user': user,
            })

        template = JINJA_ENVIRONMNT.get_template('schedule.html')
        self.response.write(template.render(template_values))
예제 #3
0
    def get(self, template_values={}, msg=None, error=None):
        user = User.get(users.get_current_user())

        if user.superuser:
            invitations = Invitation.query(ancestor=Invitation.dummy())
        else:
            invitations = Invitation.query(Invitation.owner==user.key,
                                           ancestor=Invitation.dummy())
        invitations = invitations\
                      .filter(Invitation.date >= Utils.now())\
                      .order(Invitation.date).iter()

        template_values.update({
            'user': user,
            'msg': msg,
            'error': error,
            'invitations': invitations,
            'logout': users.create_logout_url('/'),
        })

        if not template_values.has_key('where') and user.location:
            template_values['where'] = user.location

        template = JINJA_ENVIRONMNT.get_template('invite.html')
        self.response.write(template.render(template_values))
예제 #4
0
    def get(self):
        days = defaultdict(dict)
        for gn in Gamenight.future(10):
            days[gn.date]['date'] = gn.date
            days[gn.date]['scheduled'] = True
            days[gn.date]['status'] = gn.status
            days[gn.date]['owner'] = gn.owner
            days[gn.date]['time'] = gn.time
            days[gn.date]['where'] = gn.location

        invitations = Invitation.query(Invitation.date >= Utils.now()).\
                          order(Invitation.date).iter()
        for invite in invitations:
            if not days[invite.date].get('invitations'):
                days[invite.date]['date'] = invite.date
                days[invite.date]['invitations'] = []

            days[invite.date]['invitations'].append(invite)

        day_sorter = lambda x: x.get('date')
        template_values = { 'days': sorted(days.values(), key=day_sorter) }
        current_user = users.get_current_user()
        if current_user:
            user = User.get(users.get_current_user())
            template_values.update({
                'logout': users.create_logout_url('/'),
                'user': user,
            })

        template = JINJA_ENVIRONMNT.get_template('schedule.html')
        self.response.write(template.render(template_values))
예제 #5
0
    def post(self):
        user = User.get(users.get_current_user())
        if not user.superuser:
            self.redirect('/invite',
                          error="Must be an admin to edit configuration.")
            return

        err = []
        msg = []
        flags = {}
        for name in config.keys():
            v = self.request.get('config_%s' % name)
            if v != "":
                logging.info("Updating %s: %s" % (name, v))
                flags[name] = Config.update(name, v)
                if flags[name] == True:
                    config[name] = v
                elif flags[name] is None:
                    err.append("Failed to update %s." % name)
            else:
                Config.query(Config.name==name).get().key.delete()
                del(config[name])
                msg.append("'%s' deleted." % name)
                logging.info("Deleted key '%s'." % name)

        new_name = self.request.get('new_name')
        if new_name:
            value = self.request.get('new_value')
            logging.info("New config key %s: %s" % (new_name, value))
            Config(name=new_name, value=value).put()
            flags[new_name] = True
            config[new_name] = value


        self.get(error=", ".join(err), msg=", ".join(msg), flags=flags)
예제 #6
0
    def get(self, template_values={}, msg=None, error=None):
        user = User.get(users.get_current_user())

        if user.superuser:
            invitations = Invitation.query(ancestor=Invitation.dummy())
        else:
            invitations = Invitation.query(Invitation.owner==user.key,
                                           ancestor=Invitation.dummy())
        invitations = invitations\
                      .filter(Invitation.date >= Utils.now())\
                      .order(Invitation.date).iter()

        template_values.update({
            'user': user,
            'msg': msg,
            'error': error,
            'invitations': invitations,
            'logout': users.create_logout_url('/'),
        })

        if not template_values.has_key('where') and user.location:
            template_values['where'] = user.location

        template = JINJA_ENVIRONMNT.get_template('invite.html')
        self.response.write(template.render(template_values))
예제 #7
0
    def get(self, error=None, msg=None, flags={}):
        user = User.get(users.get_current_user())
        if not user.superuser:
            self.redirect('/invite',
                          error="Must be an admin to edit configuration.")
            return

        template_values = {
            'config': config,
            'flags': flags,
            'logout': users.create_logout_url('/'),
            'user': user,
            'error': error,
            'msg': msg,
        }
        template = JINJA_ENVIRONMNT.get_template('config.html')
        self.response.write(template.render(template_values))
예제 #8
0
    def get(self, error=None, msg=None, flags={}):
        user = User.get(users.get_current_user())
        if not user.superuser:
            self.redirect('/invite',
                          error="Must be an admin to edit configuration.")
            return

        template_values = {
            'config': config,
            'flags': flags,
            'logout': users.create_logout_url('/'),
            'user': user,
            'error': error,
            'msg': msg,
        }
        template = JINJA_ENVIRONMNT.get_template('config.html')
        self.response.write(template.render(template_values))
예제 #9
0
    def post(self):
        user = User.get(users.get_current_user())

        if user.superuser:
            edit = self.request.get('edit', False)
            if edit:
                self.get(profile=edit, msg='Editing %s' % edit)
                return
            profile = User.lookup(self.request.get('pid'))
            profile.superuser = self.request.get('admin')=='on'
        else:
            profile = user

        profile.location = self.request.get('location')
        profile.name = self.request.get('name')
        profile.nag = self.request.get('nag')=='on'
        profile.put()

        self.get(msg='Profile updated!', profile=profile.key.id())
예제 #10
0
    def post(self):
        user = User.get(users.get_current_user())

        if user.superuser:
            edit = self.request.get('edit', False)
            if edit:
                self.get(profile=edit, msg='Editing %s' % edit)
                return
            profile = User.lookup(self.request.get('pid'))
            profile.superuser = self.request.get('admin')=='on'
        else:
            profile = user

        profile.location = self.request.get('location')
        profile.name = self.request.get('name')
        profile.nag = self.request.get('nag')=='on'
        profile.put()

        self.get(msg='Profile updated!', profile=profile.key.id())
예제 #11
0
    def get(self, template_values={}, msg=None, error=None, profile=None):
        user = User.get(users.get_current_user())

        template_values.update({
            'user': user,
            'msg': msg,
            'error': error,
            'logout': users.create_logout_url('/'),
        })

        template_values['profile'] = user

        if user.superuser:
            template_values['users'] = User.query().fetch()
            if profile:
                template_values['profile'] = User.lookup(profile)

                if not profile:
                    template_values['profile'] = user
                    template_values['error'] = "Couldn't find user %s" % profile


        template = JINJA_ENVIRONMNT.get_template('profile.html')
        self.response.write(template.render(template_values))
예제 #12
0
    def get(self, template_values={}, msg=None, error=None, profile=None):
        user = User.get(users.get_current_user())

        template_values.update({
            'user': user,
            'msg': msg,
            'error': error,
            'logout': users.create_logout_url('/'),
        })

        template_values['profile'] = user

        if user.superuser:
            template_values['users'] = User.query().fetch()
            if profile:
                template_values['profile'] = User.lookup(profile)

                if not profile:
                    template_values['profile'] = user
                    template_values['error'] = "Couldn't find user %s" % profile


        template = JINJA_ENVIRONMNT.get_template('profile.html')
        self.response.write(template.render(template_values))
예제 #13
0
    def post(self, template_values={}):
        user = User.get(users.get_current_user())

        if self.request.get('withdraw'):
            invite = Invitation.get(self.request.get('withdraw'))
            if not invite:
                self.get(error="Can't find this invitation.")
                return

            if invite.owner != user.key and not user.superuser:
                self.get(error='Not your invitation.')
                return

            msg = ''
            gn = Gamenight.query(Gamenight.invitation==invite.key).get()
            logging.info('Invite id: %s, gn: %s', invite.key, gn)
            invite.key.delete()
            msg = 'Invitation withdrawn. '

            if gn:
                gn.key.delete()
                msg += 'Rescheduling gamenight. '
                Gamenight.schedule()

            self.get(msg=msg)
            return


        args = {}
        for k in ['when', 'where', 'priority', 'notes']:
            args[k] = self.request.get(k)

        error = None
        msg = ''
        if args['when']:
            try:
                args['when'] = parser.parse(args['when'].replace('today', ''))
            except ValueError:
                error = 'Not sure what you mean by "%s"' % args['when']
                logging.error('Failed to parse when: %s', args['when'])
            else:
                checks = []
                if not time(18, 0, 0) <= args['when'].time() <= time(21, 0, 0):
                    checks.append(args['when'].time().strftime('%I:%M %p'))
                if args['when'].date().weekday() != 5:
                    checks.append(args['when'].date().strftime('%A'))
                if args['when'].date() < Utils.now().date():
                    checks.append(args['when'].date().strftime('%x'))

                if checks:
                    msg += 'Just checking, did you really mean %s? ' % ', '.join(checks)
        else:
            error = 'When do you want to host?'

        if error:
            self.get(template_values=args, error=error)
            return

        if not args['where']:
            error = 'Where do you want to host?'
            self.get(template_values=args, error=error)
            return

        if not args['priority']:
            error = '''Gotta have a priority. Also, don't mess with me.'''
            self.get(template_values=args, error=error)
            return

        args['owner'] = user.key

        updated, invite = Invitation.create(args)

        if updated:
            gn = Gamenight.query(Gamenight.invitation==invite.key).get()
            if gn:
                gn.update()
                msg += 'Invitation and gamenight updated! '
            else:
                msg += 'Invitation updated! '

            self.get(msg=msg)
        else:
            msg += 'Invitation created! '
            self.get(msg=msg)
예제 #14
0
    def post(self, template_values={}):
        user = User.get(users.get_current_user())

        if self.request.get('withdraw'):
            invite = Invitation.get(self.request.get('withdraw'))
            if not invite:
                self.get(error="Can't find this invitation.")
                return

            if invite.owner != user.key and not user.superuser:
                self.get(error='Not your invitation.')
                return

            msg = ''
            gn = Gamenight.query(Gamenight.invitation==invite.key).get()
            logging.info('Invite id: %s, gn: %s', invite.key, gn)
            invite.key.delete()
            msg = 'Invitation withdrawn. '

            if gn:
                gn.key.delete()
                msg += 'Rescheduling gamenight. '
                Gamenight.schedule()

            self.get(msg=msg)
            return


        args = {}
        for k in ['when', 'where', 'priority', 'notes']:
            args[k] = self.request.get(k)

        error = None
        warning = None
        msg = ''
        if args['when']:
            try:
                orig = args['when']
                args['when'] = parser.parse(args['when'].replace('today', ''))
                logging.info('Parsed "%s" as "%s"', orig, args['when'])
            except ValueError:
                error = 'Not sure what you mean by "%s"' % args['when']
                logging.error('Failed to parse when: %s', args['when'])
            else:
                checks = []
                if not time(18, 0, 0) <= args['when'].time() <= time(21, 0, 0):
                    checks.append(args['when'].time().strftime('%I:%M %p'))
                if args['when'].date().weekday() != 5:
                    checks.append(args['when'].date().strftime('%A'))
                if args['when'].date() < Utils.now().date():
                    checks.append(args['when'].date().strftime('%x'))

                if checks:
                    warning = 'Just checking, did you really mean %s?' % ', '.join(checks)
        else:
            error = 'When do you want to host?'

        if error:
            self.get(template_values=args, error=error)
            return

        if not args['where']:
            error = 'Where do you want to host?'
            self.get(template_values=args, error=error)
            return

        if not args['priority']:
            error = '''Gotta have a priority. Also, don't mess with me.'''
            self.get(template_values=args, error=error)
            return

        args['owner'] = user.key

        updated, invite = Invitation.create(args)

        if updated:
            gn = Gamenight.query(Gamenight.invitation==invite.key).get()
            if gn:
                gn.update()
                msg += 'Invitation and gamenight updated! '
            else:
                msg += 'Invitation updated! '

            self.get(msg=msg, error=warning)
        else:
            msg += 'Invitation created! '
            self.get(msg=msg, error=warning)