Browse Source

added gen_list, should make cmd printing easier, no fill for last row in print2d

no_compress
Raphael Roberts 7 years ago
parent
commit
15bd32a7dd
  1. 6
      ctabus.py
  2. 72
      main.py
  3. 9
      print2d.py
  4. 17
      search.py

6
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)

72
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:
# 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))

9
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}'
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:

17
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' ?(?:(?<!\w)and(?!\w)|&) ?',query)
self.query = ' & '.join(parts)
self.query_reversed = ' & '.join(reversed(parts))
def __call__(self,stop):
stop = stop.lower()
return min(
paren = re.search(r'\((?P<data>[^\)]+)\)',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)
@ -20,3 +28,6 @@ if __name__ == "__main__":
with open('stops_out.json') as file:
data = json.load(file)
names = [stop['stpnm'] for stop in data['stops']]
while True:
q = StopSearch(input('Search: '))
print('\n'.join(sorted(names,key=q)))
Loading…
Cancel
Save