def role_stats(role): res = { 'role': role, 'total': Attendee.objects(role=role).count(), 'logged': Attendee.objects(role=role, first_use__ne=None).count(), 'scenarios': [] } for scenario in scenarios_def[role]: query_enabled_args = { 'role': role, 'scenario__{}__disabled'.format(scenario): None } query_used_args = { 'role': role, 'scenario__{}__used__ne'.format(scenario): None } res['scenarios'].append({ 'scenario': scenario, 'enabled': Attendee.objects(**query_enabled_args).count(), 'used': Attendee.objects(**query_used_args).count() }) return res
def dashboard_type(type): if type not in scenarios_def: raise Error('type required') scenarios = scenarios_def[type] req_fields = ['event_id', 'user_id', 'attr'] \ + list(map(lambda str: 'scenario__' + str + '__used', scenarios)) \ + list(map(lambda str: 'scenario__' + str + '__attr', scenarios)) \ return jsonify(Attendee.objects(type=type).only(*req_fields))
def get_attendee(request): token = request.args.get('token') if token is None: raise Error("token required") try: attendee = Attendee.objects(token=token).get() except DoesNotExist: raise Error("invalid token") return attendee
def dashboard_role(role): if role not in scenarios_def: raise Error('role required') scenarios = scenarios_def[role] req_fields = ['event_id', 'user_id', 'attr'] + \ list(map(lambda str: 'scenario__' + str + '__used', scenarios)) + \ list(map(lambda str: 'scenario__' + str + '__attr', scenarios)) \ return jsonify(Attendee.objects(role=role).only(*req_fields))
def do_deliver_puzzle(): token = request.args.get('token') receiver = request.form.get('receiver') if token is None or receiver is None: raise Error("token and receiver required") try: attendee = Attendee.objects(token=receiver).get() except DoesNotExist: raise Error("invalid receiver token") if token in delivery_permission.keys(): deliver_puzzle(attendee, delivery_permission[token]) app.logger.info(delivery_permission[token] + ' ' + token + ' deliver puzzle to ' + attendee.token) return jsonify({'status': 'OK'}) else: raise Error("invalid token")
def announcement(): if request.method == 'GET': token = request.args.get('token') role = config.ANNOUNCEMENT_DEFAULT_ROLE if token is not None: try: attendee = Attendee.objects(token=token).get() role = attendee.role except DoesNotExist: raise Error("invalid token") return jsonify(Announcement.objects(role=role).order_by('-_id')) if request.method == 'POST': announcement = Announcement() announcement.datetime = time.time() announcement.msg_zh = request.form.get('msg_zh') announcement.msg_en = request.form.get('msg_en') announcement.uri = request.form.get('uri') announcement.role = request.form.getlist('role[]') announcement.save() return jsonify({'status': 'OK'})
def dashboard(): res = {} res['total'] = Attendee.objects().count() res['day1checkin_used'] = Attendee.objects( scenario__day1checkin__used__ne=None).count() res['kit_used'] = Attendee.objects(scenario__kit__used__ne=None).count() res['day1lunch'] = { 'total': Attendee.objects(Q(scenario__day1checkin__used__ne=None)).count(), 'meat': Attendee.objects( Q(scenario__day1checkin__attr__diet="meat") & Q(scenario__day1checkin__used__ne=None)).count(), 'vegetarian': Attendee.objects( Q(scenario__day1checkin__attr__diet="vegetarian") & Q(scenario__day1checkin__used__ne=None)).count() } res['day2checkin_used'] = Attendee.objects( scenario__day2checkin__used__ne=None).count() res['day2lunch'] = { 'total': Attendee.objects(Q(scenario__day2checkin__used__ne=None)).count(), 'meat': Attendee.objects( Q(scenario__day2checkin__attr__diet="meat") & Q(scenario__day2checkin__used__ne=None)).count(), 'vegetarian': Attendee.objects( Q(scenario__day2checkin__attr__diet="vegetarian") & Q(scenario__day2checkin__used__ne=None)).count() } res['day3checkin_used'] = Attendee.objects( scenario__day3checkin__used__ne=None).count() res['day3lunch'] = { 'total': Attendee.objects(Q(scenario__day3checkin__used__ne=None)).count(), 'meat': Attendee.objects( Q(scenario__day3checkin__attr__diet="meat") & Q(scenario__day3checkin__used__ne=None)).count(), 'vegetarian': Attendee.objects( Q(scenario__day3checkin__attr__diet="vegetarian") & Q(scenario__day3checkin__used__ne=None)).count() } res['vipkit'] = { 'total': Attendee.objects(scenario__vipkit__ne=None).count(), 'used': Attendee.objects(scenario__vipkit__used__ne=None).count() } res['logged'] = Attendee.objects().count() - Attendee.objects( first_use=None).count() return jsonify(res)
def dashboard(): res = {} res['total'] = Attendee.objects().count() res['day1checkin_used'] = Attendee.objects(scenario__day1checkin__used__ne=None).count() res['kit_used'] = Attendee.objects(scenario__kit__used__ne=None).count() res['day1lunch'] = { 'total': Attendee.objects(Q(scenario__day1lunch__disabled=None) | Q(scenario__day1lunch__disabled="Please use your badge")).count(), 'meat': Attendee.objects(Q(scenario__day1lunch__attr__diet="meat") & (Q(scenario__day1lunch__disabled="Please use your badge") | Q(scenario__day1lunch__disabled=None))).count(), 'vegetarian': Attendee.objects(Q(scenario__day1lunch__attr__diet="vegetarian") & (Q(scenario__day1lunch__disabled="Please use your badge") | Q(scenario__day1lunch__disabled=None))).count(), 'meat_used': Attendee.objects(scenario__day1lunch__attr__diet="meat", scenario__day1lunch__used__ne=None).count(), 'vegetarian_used': Attendee.objects(scenario__day1lunch__attr__diet="vegetarian", scenario__day1lunch__used__ne=None).count(), } res['day2checkin_used'] = Attendee.objects(scenario__day2checkin__used__ne=None).count() res['day2lunch'] = { 'total': Attendee.objects(Q(scenario__day2lunch__disabled=None) | Q(scenario__day2lunch__disabled="Please use your badge")).count(), 'meat': Attendee.objects(Q(scenario__day2lunch__attr__diet="meat") & (Q(scenario__day2lunch__disabled="Please use your badge") | Q(scenario__day2lunch__disabled=None))).count(), 'vegetarian': Attendee.objects(Q(scenario__day2lunch__attr__diet="vegetarian") & (Q(scenario__day2lunch__disabled="Please use your badge") | Q(scenario__day2lunch__disabled=None))).count(), 'meat_used': Attendee.objects(scenario__day2lunch__attr__diet="meat", scenario__day2lunch__used__ne=None).count(), 'vegetarian_used': Attendee.objects(scenario__day2lunch__attr__diet="vegetarian", scenario__day2lunch__used__ne=None).count(), } res['vipkit'] = { 'total': Attendee.objects(scenario__vipkit__disabled=None).count(), 'used': Attendee.objects(scenario__vipkit__used__ne=None).count() } res['logged'] = Attendee.objects(first_use=not None).count() return jsonify(res)