From 59c72d7eefa2c3d45cdfcf0978a4780c06ac3f47 Mon Sep 17 00:00:00 2001 From: Florian Schweikert Date: Sat, 24 Sep 2011 16:51:32 +0200 Subject: [PATCH] [FIX] unicode input error fix for testing choice station in cli if ambiguous --- iTip.py | 2 +- scotty.py | 54 ++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/iTip.py b/iTip.py index 4b7aea4..8ad3eb6 100644 --- a/iTip.py +++ b/iTip.py @@ -115,7 +115,7 @@ if __name__ == '__main__': l = args.l.upper() else: l = None - s = args.s + s = args.s.encode('UTF-8') if l and l in lines: stations = itip.get_stations(l) diff --git a/scotty.py b/scotty.py index 060ea52..b40dc55 100644 --- a/scotty.py +++ b/scotty.py @@ -5,6 +5,7 @@ import settings from datetime import datetime, time from textwrap import wrap import argparse +import sys POSITION_TYPES = ('stop', 'address', 'poi') @@ -218,36 +219,61 @@ if __name__ == '__main__': parser = argparse.ArgumentParser(description='Get public transport route for Vienna') parser.add_argument('-o', metavar='name', type=str, help='origin', required=True) parser.add_argument('-d', metavar='name', type=str, help='destination', required=True) - parser.add_argument('-ot', metavar='type', type=str, help='origin type: %s' % ' | '.join(POSITION_TYPES), default='stop') - parser.add_argument('-dt', metavar='type', type=str, help='destination type: %s' % ' | '.join(POSITION_TYPES), default='stop') + parser.add_argument('-ot', metavar='type', type=str, help='origin type: %s' % ' | '.join(POSITION_TYPES), default='stop', choices=POSITION_TYPES) + parser.add_argument('-dt', metavar='type', type=str, help='destination type: %s' % ' | '.join(POSITION_TYPES), default='stop', choices=POSITION_TYPES) args = parser.parse_args() - html = search((args.o, args.ot), (args.d, args.dt)).read() + html = search((args.o.encode('UTF-8'), args.ot), (args.d.encode('UTF-8'), args.dt)).read() parser = sParser(html) state = parser.check_page() - if state == PageType.RESULT: - parser = rParser(html) - try: - overviews = parser.overview - for overview in overviews: - print '[%s] %s-%s (%s)' % (overview['date'], overview['time'][0], overview['time'][1], overview['duration']) - except ParserError: - print 'parsererror' - elif state == PageType.CORRECTION: + if state == PageType.CORRECTION: try: cor = parser.get_correction() if cor[0]: print print '* Origin ambiguous:' - print '', '\n '.join(cor[0]) + lo = None + ld = None + while not lo or not lo.isdigit() or int(lo) > len(cor[0]): + i = 1 + for c in cor[0]: + print '%d. %s' % (i, c) + i += 1 + lo = sys.stdin.readline().strip() + + args.o = cor[0][int(lo)-1] + if cor[1]: print print '* Destination ambiguous:' - print '', '\n '.join(cor[1]) + while not ld or not ld.isdigit() or int(ld) > len(cor[1]): + j = 1 + for c in cor[1]: + print '%d. %s' % (j, c) + j += 1 + ld = sys.stdin.readline().strip() + + args.d = cor[1][int(ld)-1] + + html = search((args.o.encode('UTF-8'), args.ot), (args.d.encode('UTF-8'), args.dt)).read() + + parser = sParser(html) + state = parser.check_page() + except ParserError: print 'PANIC at correction page' + + if state == PageType.RESULT: + parser = rParser(html) + try: + overviews = parser.overview + for overview in overviews: + print '[%s] %s-%s (%s)' % (overview['date'], overview['time'][0], overview['time'][1], overview['duration']) + except ParserError: + print 'parsererror' + elif state == PageType.UNKNOWN: print 'PANIC unknown result' -- 1.7.9.5