diff --git a/ctabus.py b/ctabus.py index 6727cac..daca7a6 100644 --- a/ctabus.py +++ b/ctabus.py @@ -1,9 +1,6 @@ from urllib.parse import urlencode from requests import get import json -import datetime -test = False -test = True with open('cta_api_key') as file: api = file.read() @@ -17,10 +14,7 @@ def get_data(type,api_key = api,**args): response = get(url) data = json.loads(response.text) return data['bustime-response'] - # print(url) -def print2d(values): - pass def get_times(stop_id,api_key = api): return get_data('getpredictions',api_key,stpid=stop_id) diff --git a/main.py b/main.py index 4e23b19..9365c9e 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,64 @@ -from argparse import parser -parser = argparse.ArgumentParser(prog = 'ctabus') -parser.add_argument('arg',metavar = 'stop-id | cross streets') -parser.add_argument('-r','--route') -parser.add_argument('-d','--direction') -args = parser.parse_args() -if args.arg.isdecimal(): - pass -else: - pass \ No newline at end of file +# from argparse import parser +from print2d import print2d +import re +# parser = argparse.ArgumentParser(prog = 'ctabus') +# parser.add_argument('arg',metavar = 'stop-id | cross streets') +# parser.add_argument('-r','--route',default = None) +# parser.add_argument('-d','--direction',default = None) +# args = parser.parse_args() +def numb_sort(str): + n = 40 + try: + return re.sub(r'\d+',lambda match: match.group(0).rjust(n,'0'),str) + except Exception as E: + print(str) + raise E + +def gen_list(objs,data,*displays,key = None,sort = 0,num_pic = True): + k = displays[sort] + display_data = {obj[k]:obj[data] for obj in objs} + srt_keys = sorted(display_data.keys(),key=key) + + display = sorted( + [ + [obj[d] for d in displays] for obj in objs + ], + key = lambda row: key(row[sort]) + ) + if num_pic: + display = [[i] + data for i,data in enumerate(display)] + + opts = { + 'spacer':' ', + 'seperator':' ', + 'interactive': True, + 'bottom':'=', + 'l_end':'<', + 'r_end':'>', + } + print2d(display,**opts) + if num_pic: + which = None + while not which: + try: + which = srt_keys[int(input('Which one?: '))] + except ValueError: + which = None + return display_data[which] + else: + ret = None + while not ret: + try: + ret = display_data[input('Which one?: ')] + except KeyError: + pass + return ret + + +if __name__ == "__main__": + import json + with open('stops_out.json') as file: + d= json.load(file) + + d = d['stops'] + print(gen_list(d,'stpid','stpnm',key=numb_sort,num_pic=True)) diff --git a/print2d.py b/print2d.py index 076850b..bf3326a 100644 --- a/print2d.py +++ b/print2d.py @@ -16,14 +16,15 @@ def print2d(l,datetime_format = "%A, %B %e, %Y %H:%M:%S",seperator= ' | ',spacer except IndexError: max_col.append(len(col)) - if l_end and r_end: - fmt_row = f'{l_end} {{content}} {r_end}' - else: - fmt_row = '{content}' + fmt_row = '{content}' + if l_end: + fmt_row = f'{l_end} ' + fmt_row + if r_end: + fmt_row = fmt_row + f' {r_end}' done = [] for row in l: - content = seperator.join(col.ljust(max_col[i],spacer) for i,col in enumerate(row)) + content = seperator.join(col.ljust(max_col[i],spacer if i < len(row)-1 or r_end else ' ') for i,col in enumerate(row)) done.append(fmt_row.format(content = content)) if bottom: diff --git a/search.py b/search.py index 53d93fc..f0dd163 100644 --- a/search.py +++ b/search.py @@ -3,14 +3,22 @@ import re import json class StopSearch: def __init__(self,query): - parts = re.split(r' ?(?:and|&) ?',query) + query = query.lower() + parts = re.split(r' ?(?:(?[^\)]+)\)',stop) + ret= [ editdistance(self.query,stop), - editdistance(self.query_reversed,stop) + editdistance(self.query_reversed,stop), + ] + if paren: + paren = paren.group('data') + ret.append(editdistance(self.query,paren)) + return min( + ret ) def __str__(self): return '{}|{}'.format(self.query,self.query_reversed) @@ -19,4 +27,7 @@ class StopSearch: if __name__ == "__main__": with open('stops_out.json') as file: data = json.load(file) - names = [stop['stpnm'] for stop in data['stops']] \ No newline at end of file + names = [stop['stpnm'] for stop in data['stops']] + while True: + q = StopSearch(input('Search: ')) + print('\n'.join(sorted(names,key=q))) \ No newline at end of file