disable console logging
[pywienerlinien] / scotty
1 #!/usr/bin/env python
2 # -*- coding: UTF-8 -*-
3
4 import sys
5
6 from gotovienna import argparse
7 from gotovienna.utils import *
8 from gotovienna.routing import *
9
10 parser = argparse.ArgumentParser(description='Get public transport route for Vienna')
11 parser.add_argument('-ot', metavar='type', type=str, 
12                     help='origin type: %s' % ' | '.join(POSITION_TYPES), 
13                     default=None, choices=POSITION_TYPES)
14 parser.add_argument('-dt', metavar='type', type=str, 
15                     help='destination type: %s' % ' | '.join(POSITION_TYPES), 
16                     default=None, choices=POSITION_TYPES)
17 parser.add_argument('origin', nargs='?', 
18                     help='origin station name')
19 parser.add_argument('destination', nargs='?', 
20                     help='destination station name')
21
22 args = parser.parse_args()
23
24 if not args.origin:
25     args.origin = raw_input('Origin: ')
26
27 if not args.destination:
28     args.destination = raw_input('Destination: ')
29
30 def do_search(args):
31     if isinstance(args.origin, unicode):
32         args.origin = args.origin.encode('utf-8', 'ignore')
33     elif isinstance(args.destination, unicode):
34         args.destination = args.destination.encode('utf-8', 'ignore')
35
36     result = search((args.origin, args.ot),
37             (args.destination, args.dt))
38
39     return sParser(result.read())
40
41 print >>sys.stderr, 'Searching...\n',
42 parser = do_search(args)
43 print >>sys.stderr, 'done.'
44
45 while parser.state == PageType.CORRECTION:
46     origin_corr, destination_corr = parser.get_correction()
47
48     if origin_corr:
49         print
50         print '* Origin ambiguous:'
51         lo = None
52         while not lo or not lo.isdigit() or int(lo) > len(origin_corr):
53             for idx, correction in enumerate(origin_corr):
54                 print '%3d. %s' % (idx+1, correction)
55             lo = sys.stdin.readline().strip()
56
57         args.origin = origin_corr[int(lo) - 1]
58
59     if destination_corr:
60         print
61         print '* Destination ambiguous:'
62         ld = None
63         while not ld or not ld.isdigit() or int(ld) > len(destination_corr):
64             for idx, correction in enumerate(destination_corr):
65                 print '%3d. %s' % (idx+1, correction)
66             ld = sys.stdin.readline().strip()
67
68         args.destination = destination_corr[int(ld) - 1]
69
70     parser = do_search(args)
71
72 if parser.state == PageType.RESULT:
73     parser = parser.get_result()
74     overviews = parser.overview
75     details = parser.details
76     l = ''
77     while not l == 'q':
78         for idx, overview in enumerate(overviews):
79             timespan = overview['timespan']
80             if not timespan:
81                 # XXX: Bogus data for e.g. Pilgramgasse->Karlsplatz?!
82                 continue
83             
84             str_timespan = timespan[0].strftime('[%Y-%d-%m] %H:%M')
85             str_timespan += '-' + timespan[1].strftime('%H:%M')
86             timedelta = timespan[1] - timespan[0]
87             print '%d. %s (%s)' % (idx + 1,
88                     str_timespan,
89                     timedelta)
90         
91         print 'q. Quit'
92         l = sys.stdin.readline().strip()
93         print
94         print '~' * 79
95
96         if l.isdigit() and int(l) <= len(details):
97             for detail in details[int(l) - 1]:
98                 if detail['timespan'] and detail['station']:
99                     time = '%s - %s' % (detail['timespan'][0].strftime(TIMEFORMAT), 
100                                         detail['timespan'][1].strftime(TIMEFORMAT))
101                     print '[%s] %s\n%s' % (time, 
102                                            ' -> '.join(detail['station']), 
103                                            '\n'.join(detail['info']))
104                 else:
105                     print '\n'.join(detail['info'])
106                 print '-' * 79
107         print
108 else:
109     print 'Error - unknown page returned.'