Exemple #1
0
    def lookup_attendee_from_barcode(self, barcode_value, full=False):
        """
        Returns a single attendee using the barcode value from their badge.

        Takes the (possibly encrypted) barcode value as the first parameter.

        Optionally, "full" may be passed as the second parameter to return the
        complete attendee record, including departments, shifts, and food
        restrictions.
        """
        badge_num = -1
        try:
            result = get_badge_num_from_barcode(barcode_value)
            badge_num = result['badge_num']
        except Exception as e:
            raise HTTPError(500, "Couldn't look up barcode value: " + str(e))

        # Note: A decrypted barcode can yield a valid badge num,
        # but that badge num may not be assigned to an attendee.
        with Session() as session:
            query = session.query(Attendee).filter_by(badge_num=badge_num)
            fields, query = _attendee_fields_and_query(full, query)
            attendee = query.first()
            if attendee:
                return attendee.to_dict(fields)
            else:
                raise HTTPError(404, 'Valid barcode, but no attendee found with Badge #{}'.format(badge_num))
Exemple #2
0
    def lookup_attendee_from_barcode(self, barcode_value, full=False):
        """
        Returns a single attendee using the barcode value from their badge.

        Takes the (possibly encrypted) barcode value as the first parameter.

        Optionally, "full" may be passed as the second parameter to return the
        complete attendee record, including departments, shifts, and food
        restrictions.
        """
        badge_num = -1
        try:
            result = get_badge_num_from_barcode(barcode_value)
            badge_num = result['badge_num']
        except Exception as e:
            raise HTTPError(500, "Couldn't look up barcode value: " + str(e))

        # Note: A decrypted barcode can yield a valid badge num,
        # but that badge num may not be assigned to an attendee.
        with Session() as session:
            query = session.query(Attendee).filter_by(badge_num=badge_num)
            fields, query = _attendee_fields_and_query(full, query)
            attendee = query.first()
            if attendee:
                return attendee.to_dict(fields)
            else:
                raise HTTPError(404, 'Valid barcode, but no attendee found with Badge #{}'.format(badge_num))
Exemple #3
0
 def with_check(*args, **kwargs):
     if kwargs.get('badge_num', None):
         try:
             int(kwargs['badge_num'])
         except Exception:
             kwargs['badge_num'] = get_badge_num_from_barcode(barcode_num=kwargs['badge_num'])['badge_num']
     return func(*args, **kwargs)
Exemple #4
0
 def with_check(*args, **kwargs):
     if kwargs.get('badge_num', None):
         try:
             int(kwargs['badge_num'])
         except Exception:
             kwargs['badge_num'] = get_badge_num_from_barcode(barcode_num=kwargs['badge_num'])['badge_num']
     return func(*args, **kwargs)
Exemple #5
0
def test_dontfail_wrong_event_id(cfg):
    badge_num = 78946
    barcode = generate_barcode_from_badge_num(badge_num=badge_num)
    decrytped = get_badge_num_from_barcode(barcode_num=barcode,
                                           event_id=2,
                                           verify_event_id_matches=False)
    assert decrytped['badge_num'] == badge_num
    assert decrytped['event_id'] == c.BARCODE_EVENT_ID
Exemple #6
0
def test_encrypt_decrypt(cfg):
    badge_num = 3
    encrypted = generate_barcode_from_badge_num(badge_num=badge_num)

    assert len(encrypted) == 7
    decrypted = get_badge_num_from_barcode(barcode_num=encrypted)

    assert decrypted['badge_num'] == badge_num
    assert decrypted['event_id'] == c.BARCODE_EVENT_ID
Exemple #7
0
def test_encrypt_decrypt(cfg):
    badge_num = 3
    encrypted = generate_barcode_from_badge_num(badge_num=badge_num)

    assert len(encrypted) == 7
    decrypted = get_badge_num_from_barcode(barcode_num=encrypted)

    assert decrypted['badge_num'] == badge_num
    assert decrypted['event_id'] == c.BARCODE_EVENT_ID
Exemple #8
0
    def lookup_badge_number_from_barcode(self, barcode_value):
        """
        Returns a badge number using the barcode value from the given badge.

        Takes the (possibly encrypted) barcode value as a single parameter.
        """
        try:
            result = get_badge_num_from_barcode(barcode_value)
            return {'badge_num': result['badge_num']}
        except Exception as e:
            raise HTTPError(500, "Couldn't look up barcode value: " + str(e))
Exemple #9
0
    def lookup_badge_number_from_barcode(self, barcode_value):
        """
        Returns a badge number using the barcode value from the given badge.

        Takes the (possibly encrypted) barcode value as a single parameter.
        """
        try:
            result = get_badge_num_from_barcode(barcode_value)
            return {'badge_num': result['badge_num']}
        except Exception as e:
            raise HTTPError(500, "Couldn't look up barcode value: " + str(e))
Exemple #10
0
    def get_signups(self, session, badge_num, attraction_id=None):
        from uber.barcode import get_badge_num_from_barcode

        if cherrypy.request.method == 'POST':
            try:
                badge_num = int(badge_num)
            except ValueError:
                badge_num = get_badge_num_from_barcode(badge_num)['badge_num']

            attendee = _attendee_for_badge_num(
                session, badge_num,
                subqueryload(Attendee.attraction_signups).subqueryload(
                    AttractionSignup.event).subqueryload(
                        AttractionEvent.feature))

            if not attendee:
                return {
                    'error': 'Unrecognized badge number: {}'.format(badge_num)
                }

            signups = attendee.attraction_signups
            if attraction_id:
                signups = [
                    s for s in signups
                    if s.event.feature.attraction_id == attraction_id
                ]

            read_spec = {
                'signup_time': True,
                'checkin_time': True,
                'is_checked_in': True,
                'event': {
                    'location': True,
                    'location_label': True,
                    'start_time': True,
                    'start_time_label': True,
                    'duration': True,
                    'time_span_label': True,
                    'slots': True,
                    'feature': True
                }
            }

            signups = sorted(signups, key=lambda s: s.event.start_time)
            return {
                'result': {
                    'signups': [s.to_dict(read_spec) for s in signups],
                    'attendee': attendee.to_dict()
                }
            }
def _attendee_for_badge_num(session, badge_num, options=None):
    from uber.barcode import get_badge_num_from_barcode

    if not badge_num:
        return None

    try:
        badge_num = int(badge_num)
    except ValueError:
        badge_num = get_badge_num_from_barcode(badge_num)['badge_num']
    except Exception:
        return None

    query = session.query(Attendee).filter_by(badge_num=badge_num)
    if options:
        query = query.options(options)
    return query.first()
    def get_badge_num_from_barcode(self, session, barcode):
        badge_num = -1
        msg = "Success."
        attendee = None
        try:
            # Important note: a barcode encodes just a badge_number. However,
            # that doesn't mean that this badge number has been assigned to an
            # attendee yet, so Attendee may come back as None if they aren't
            # checked in yet.
            badge_num = get_badge_num_from_barcode(barcode)['badge_num']
            attendee = session.attendee(badge_num=badge_num)
        except Exception as e:
            msg = "Failed: " + str(e)

        return {
            'message': msg,
            'badge_num': badge_num,
            'attendee_name': attendee.full_name if attendee else '',
            'attendee_id': attendee.id if attendee else -1,
        }
Exemple #13
0
    def get_badge_num_from_barcode(self, session, barcode):
        badge_num = -1
        msg = "Success."
        attendee = None
        try:
            # Important note: a barcode encodes just a badge_number. However,
            # that doesn't mean that this badge number has been assigned to an
            # attendee yet, so Attendee may come back as None if they aren't
            # checked in yet.
            badge_num = get_badge_num_from_barcode(barcode)['badge_num']
            attendee = session.attendee(badge_num=badge_num)
        except Exception as e:
            msg = "Failed: " + str(e)

        return {
            'message': msg,
            'badge_num': badge_num,
            'attendee_name': attendee.full_name if attendee else '',
            'attendee_id': attendee.id if attendee else -1,
        }
Exemple #14
0
def test_fail_wrong_event_id(cfg, monkeypatch):
    with pytest.raises(ValueError) as ex:
        barcode = generate_barcode_from_badge_num(badge_num=1, event_id=1)
        get_badge_num_from_barcode(barcode_num=barcode, event_id=2)
    assert "doesn't match our event ID" in str(ex.value)
Exemple #15
0
def test_fail_wrong_event_id(cfg, monkeypatch):
    with pytest.raises(ValueError) as ex:
        barcode = generate_barcode_from_badge_num(badge_num=1, event_id=1)
        get_badge_num_from_barcode(barcode_num=barcode, event_id=2)
    assert 'unrecognized event id' in str(ex.value)
Exemple #16
0
def test_dontfail_wrong_event_id(cfg):
    badge_num = 78946
    barcode = generate_barcode_from_badge_num(badge_num=badge_num)
    decrypted = get_badge_num_from_barcode(barcode_num=barcode, event_id=2, verify_event_id_matches=False)
    assert decrypted['badge_num'] == badge_num
    assert decrypted['event_id'] == c.BARCODE_EVENT_ID
def test_fail_wrong_event_id(cfg, monkeypatch):
    with pytest.raises(ValueError) as ex:
        barcode = generate_barcode_from_badge_num(badge_num=1, event_id=1)
        get_badge_num_from_barcode(barcode_num=barcode, event_id=2)
    assert 'unrecognized event id' in str(ex.value)