Example #1
0
def do_query():
    user_input = request.forms.get('number', '')
    numbers = parse_numbers(user_input)

    number = None
    rowcount = 0
    timestamps = []
    invalid_input = None

    if numbers:
        number = numbers[0]
        with lagesonrdb as connection:
            cursor = connection.cursor()

            select_query = 'SELECT time FROM numbers WHERE number LIKE ? ORDER BY time'
            values = (number,)

            result = cursor.execute(select_query, values).fetchall()
            timestamps = [row[0] for row in result]
    else:
        invalid_input = user_input

    context = {
        'result': number or invalid_input,
        'invalid_input': invalid_input,
        'timestamps': timestamps
    }

    return context
def do_enter():
    """Enter numbers into database"""
    numbers = set(parse_numbers(request.forms.get('numbers', '')))
    timestamp = datetime.datetime.now()

    usr_hash = get_fingerprint(request)

    result_num = []

    # TODO make place variable, depending on current request
    q = Place.select().where(Place.place == 'LAGESO')
    lageso = q.get() if q.count() == 1 else None

    if not numbers:
        result_num.append(_('novalidnumbers'))
    else:
        for num in numbers:
            if is_valid_number(num):
                try:
                    n = Number.create(number=num.upper(), time=timestamp, place=lageso, fingerprint=usr_hash)
                    result_num.append(n.number)
                except IntegrityError:
                    try:
                        n = Number.get(Number.number == num.upper())
                        # FIXME Why ain't there any value placeholder in translation string?
                        result_num.append(_(u'erruniquenumber') + ': {}'.format(n.number))
                    except DoesNotExist:
                        result_num.append(u'Something weired happend with {}'.format(num))

    # FIXME result_num is horrible, as it contains success and failures, indistinguishable
    return {'entered': result_num, 'timestamp': timestamp.strftime('%x %X')}
Example #3
0
def do_enter():
    numbers = set(parse_numbers(request.forms.get('numbers', '')))
    timestamp = time.asctime()

    usr_hash = get_fingerprint(request)

    result_num = []

    with lagesonrdb as connection:
        cursor = connection.cursor()
        insert_query = 'INSERT INTO numbers (number, fingerprint, place, time) VALUES (?, ?, ?, ?)'

        for num in numbers:
            if is_valid_number(num):
                values = (num.capitalize(), usr_hash, 'LAGESO', timestamp)
                try:
                    cursor.execute(insert_query, values)
                    result_num.append(num)
                except sqlite3.IntegrityError:
                    result_num.append("ALREADY KNOWN: {}".format(num))
            else:
                result_num.append("INVALID INPUT: {}".format(num))

        if not len(numbers):
            result_num.append("NO VALID NUMBERS ENTERED")

    return {'entered': result_num, 'timestamp': timestamp}
Example #4
0
def do_query():
    """Search for numbers in database"""
    user_input = request.forms.get('number', '')
    numbers = parse_numbers(user_input)

    number = None
    timestamps = []
    invalid_input = None

    if numbers:
        # FIXME WTF? Allow and parse a list and than pick one & silently drop the others?
        number = numbers[0]
        qry = Number.select(Number.time).where(Number.number**number).order_by(
            Number.time)
        timestamps = [n.time for n in qry]
    else:
        invalid_input = user_input

    context = {
        'result': number or invalid_input,
        'invalid_input': invalid_input,
        'timestamps': timestamps
    }

    return context
Example #5
0
def do_enter():
    """Enter numbers into database"""
    numbers = set(parse_numbers(request.forms.get('numbers', '')))
    timestamp = datetime.datetime.now()

    usr_hash = get_fingerprint(request)

    result_num = []

    # TODO make place variable, depending on current request
    q = Place.select().where(Place.place == 'LAGESO')
    lageso = q.get() if q.count() == 1 else None

    if not numbers:
        result_num.append(_('novalidnumbers'))
    else:
        for num in numbers:
            if is_valid_number(num):
                try:
                    n = Number.create(number=num.upper(),
                                      time=timestamp,
                                      place=lageso,
                                      fingerprint=usr_hash)
                    result_num.append(n.number)
                except IntegrityError:
                    try:
                        n = Number.get(Number.number == num.upper())
                        # FIXME Why ain't there any value placeholder in translation string?
                        result_num.append(
                            _(u'erruniquenumber') + ': {}'.format(n.number))
                    except DoesNotExist:
                        result_num.append(
                            u'Something weired happend with {}'.format(num))

    # FIXME result_num is horrible, as it contains success and failures, indistinguishable
    return {'entered': result_num, 'timestamp': timestamp.strftime('%x %X')}
def do_query():
    """Search for numbers in database"""
    user_input = request.forms.get('number', '')
    numbers = parse_numbers(user_input)

    number = None
    timestamps = []
    invalid_input = None

    if numbers:
        # FIXME WTF? Allow and parse a list and than pick one & silently drop the others?
        number = numbers[0]
        qry = Number.select(Number.time).where(Number.number ** number).order_by(Number.time)
        timestamps = [n.time for n in qry]
    else:
        invalid_input = user_input

    context = {
        'result': number or invalid_input,
        'invalid_input': invalid_input,
        'timestamps': timestamps
    }

    return context
Example #7
0
 def test_drop_table_parse(self):
     input_num = "DROP TABLE NUMBERS"
     result = parse_numbers(input_num)
     self.assertEqual(set(), set(result))
Example #8
0
 def test_fail_numbers(self):
     input_num = "A 123, A 234; A345,\nB123. B234 B345. \nC123   C234  C345"
     result = parse_numbers(input_num)
     self.assertEqual({"B123", "C123", "B234", "C234", "A345", "B345", "C345"}, set(result))
Example #9
0
 def test_empty_input(self):
     input_num = "   "
     result = parse_numbers(input_num)
     self.assertEqual(set(), set(result))
Example #10
0
 def test_malformed_numbers(self):
     input_num = "a123, a234; a345,\nB123. B234 B345. \nC123   C234  C345"
     result = parse_numbers(input_num)
     self.assertEqual({"A123", "B123", "C123", "A234", "B234", "C234", "A345", "B345", "C345"}, set(result))
Example #11
0
 def test_multiple_delimiters_on_three_lines_mixed(self):
     input_num = "A123, A234; A345,\nB123. B234 B345. \nC123   C234  C345"
     result = parse_numbers(input_num)
     self.assertEqual({"A123", "B123", "C123", "A234", "B234", "C234", "A345", "B345", "C345"}, set(result))
Example #12
0
 def test_input_three_times_three_lines_mixed(self):
     input_num = "A123 A234 A345\nB123 B234 B345 \nC123 C234 C345"
     result = parse_numbers(input_num)
     self.assertEqual({"A123", "B123", "C123", "A234", "B234", "C234", "A345", "B345", "C345"}, set(result))
Example #13
0
 def test_input_three_on_three_lines(self):
     input_num = "A123\nB123\nC123"
     result = parse_numbers(input_num)
     self.assertEqual({"A123", "B123", "C123"}, set(result))
Example #14
0
 def test_input_two_different_on_one_line(self):
     input_num = "A123 B123"
     result = parse_numbers(input_num)
     self.assertEqual({"A123", "B123"}, set(result))