Beispiel #1
0
def select_from_payphones(payphones):
    res = Response()
    action = params_and_url_for(
        'select_payphone_suburb',
        {
            'phones': json.dumps([
                format_lat_lon(payphone['properties'])
                for payphone in payphones
            ])
        }
    )

    with res.gather(numDigits='1', action=action) as g:
        g.say(
            '{} payphones were found. Please select your current suburb'
            'from the following'
            .format(len(payphones))
        )

        for idx, payphone in enumerate(payphones, 1):
            g.say('Press {} for {}'.format(
                idx,
                payphone['properties']['SSC_NAME']
            ))

    return res
Beispiel #2
0
def location():
    res = Response()
    with res.gather(numDigits=ID_NUM_DIGITS,
                    action=url_for('id_recieved')) as g:
        g.say(
            'Please enter the {} digit payphone identification number'.format(
                humanize.apnumber(ID_NUM_DIGITS)))
    return res
Beispiel #3
0
def location():
    res = Response()
    with res.gather(numDigits=str(ID_NUM_DIGITS),
                    action=url_for('id_recieved')) as g:
        g.say(
            'Please enter the {} digit payphone identification number'
            .format(humanize.apnumber(ID_NUM_DIGITS)),
            language='en-AU'
        )
    return res
Beispiel #4
0
def select_payphone_suburb_response(idx, payphones):
    res = Response()

    try:
        payphone = payphones[idx - 1]  # we 1 index for useability
    except IndexError:
        return res.say('Invalid suburb selection').hangup()

    logging.info('Selected payphone at latlon %s', payphone)

    res.say('Selected payphone')

    return do_for_payphone(res, payphone)
Beispiel #5
0
def select_from_payphones(payphones):
    res = Response()
    action = params_and_url_for('select_payphone_suburb', {
        'phones':
        json.dumps([format_lat_lon(payphone) for payphone in payphones])
    })

    with res.gather(numDigits=1, action=action) as g:
        g.say('{} payphones were found. Please select your current suburb'
              'from the following'.format(len(payphones)))

        for idx, payphone in enumerate(payphones, 1):
            g.say('Press {} for {}'.format(idx, payphone['SSC_NAME']))

    return res
Beispiel #6
0
def select_payphone_suburb():
    res = Response()

    idx = int(request.form['Digits'])
    payphones = json.loads(request.args['phones'])

    try:
        payphone = payphones[idx - 1]  # we 1 index for useability
    except IndexError:
        return res.say('Invalid suburb selection').hangup()

    logging.info('Selected payphone at latlon %s', payphone)

    res.say('Selected payphone')

    return do_for_payphone(res, payphone)
Beispiel #7
0
def possibly_repeat():
    digits = request.form['Digits']

    if digits == '1':
        return payphone_found_response(request.args['Digits'],
                                       request.args['latlon'])

    return Response().say('Okay, goodbye').hangup()
Beispiel #8
0
def id_recieved_response(digits):
    res = Response()
    logging.info('Digits: "%s"', digits)

    if not re.match(r'\d{%d}' % ID_NUM_DIGITS, digits):
        return res.say('Invalid eye d number').hangup()

    if digits == ''.join(map(str, range(1, ID_NUM_DIGITS + 1))):
        return res.play(
            '/static/Gorillaz%20-%20Film%20Music%20(Official%20Visual).mp3'
        ).hangup()

    # insert a wildcard where the punctuation is in the phone id
    payphone_id = digits[:-1] + '%' + digits[-1]

    logging.info('Looking for payphone with id like: "%s"', payphone_id)
    payphones = payphone_client.by_cabinet_id(payphone_id)
    payphones = [
        CaseInsensitiveDict(payphone['properties']) for payphone in payphones
    ]
    if not payphones:
        return res.say('Payphone could not be found').hangup()

    if len(payphones) > 1:
        return select_from_payphones(payphones)
    else:
        properties = CaseInsensitiveDict(payphones[0])
        message = 'Payphone found in {}'.format(properties['SSC_Name'])
        res.say(message)
        logging.info(message)
        return do_for_payphone(res, format_lat_lon(properties))
Beispiel #9
0
def id_recieved():
    res = Response()
    digits = request.form['Digits']
    logging.info('Digits: "%s"', digits)

    if not re.match(r'\d{%d}' % ID_NUM_DIGITS, digits):
        return res.say('Invalid eye d number').hangup()

    if digits == ''.join(map(str, range(1, ID_NUM_DIGITS+1))):
        return res.play(
            '/static/Gorillaz%20-%20Film%20Music%20(Official%20Visual).mp3'
        ).hangup()

    payphone_id = digits[:ID_NUM_DIGITS - 1] + '%' + digits[-1]

    logging.info('Looking for payphone with id like: "%s"', payphone_id)
    payphones = payphone_client.by_cabinet_id(payphone_id)
    if not payphones:
        return res.say('Payphone could not be found').hangup()

    if len(payphones) > 1:
        return select_from_payphones(payphones)
    else:
        properties = payphones[0]['properties']
        message = 'Payphone found in {}'.format(properties['SSC_Name'])
        res.say(message)
        logging.info(message)
        return do_for_payphone(res, format_lat_lon(payphones[0]['properties']))
Beispiel #10
0
def payphone_found():
    res = Response()

    digits = request.form['Digits']
    if digits not in {'1', '2'}:
        return res.say('Invalid input').hangup()

    mode = {'1': 'walking', '2': 'transit'}[digits]

    from_ = request.args['latlon']
    to = ADDRESSTO
    departure_time = datetime.now()

    logging.info(
        'Travelling from %s to "%s" at %s using %s',
        from_,
        to,
        departure_time,
        mode
    )

    directions_result = gmaps.directions(
        from_,
        to,
        mode=mode,
        departure_time=departure_time
    )
    if not directions_result:
        return res.say('No routes could be found').hangup()

    directions_result = directions_result[0]

    for leg in directions_result['legs']:
        for step in leg['steps']:
            if step['travel_mode'] == 'TRANSIT':
                instruction = parse_transit_step(step)
            else:
                instruction = parse_instruction(step['html_instructions'])

            res.say(instruction)
            res.pause(length=0.5)

    res.say("End of instructions")

    return res
Beispiel #11
0
def error(exc=None):
    return (Response().say(
        "I'm sorry, something seems to have gone wrong. Goodbye").hangup())
Beispiel #12
0
def payphone_found_response(digits, from_):
    res = Response()
    if digits not in {'1', '2'}:
        return res.say('Invalid input').hangup()

    mode = {'1': 'walking', '2': 'transit'}[digits]

    to = ADDRESSTO
    departure_time = datetime.now()

    logging.info('Travelling from %s to "%s" at %s using %s', from_, to,
                 departure_time, mode)

    directions_result = gmaps.directions(from_,
                                         to,
                                         mode=mode,
                                         departure_time=departure_time)
    if not directions_result:
        return res.say('No routes could be found').hangup()

    directions_result = directions_result[0]

    for leg in directions_result['legs']:
        for step in leg['steps']:
            if step['travel_mode'] == 'TRANSIT':
                instruction = parse_transit_step(step)
            else:
                instruction = parse_instruction(step['html_instructions'])

            res.say(instruction)
            res.pause(length=1)

    res.say("End of instructions")

    action = params_and_url_for('possibly_repeat', {
        'latlon': from_,
        'Digits': digits
    })
    with res.gather(numDigits=1, action=action) as gat:
        gat.say('Enter 1 to repeat instructions, or hang up.', )

    return res