Add --overlaps

This commit is contained in:
Juhani Krekelä 2017-12-29 13:47:03 +02:00
parent 5bddaa909d
commit cdc6e22a2b
1 changed files with 31 additions and 14 deletions

View File

@ -12,24 +12,32 @@ def parse_date(text):
return tuple(map(int, split)) return tuple(map(int, split))
def main(): def main():
if len(sys.argv) == 2: args = sys.argv[1:]
if len(args) > 1 and args[0] == '--overlaps':
only_overlaps = True
args = args[1:]
else:
only_overlaps = False
if len(args) == 1:
year, week, day = datetime.date.today().isocalendar() year, week, day = datetime.date.today().isocalendar()
if day >= 6: # on weekend, show next week if day >= 6: # on weekend, show next week
year, week, day = (datetime.date.today() + datetime.timedelta(2)).isocalendar() year, week, day = (datetime.date.today() + datetime.timedelta(2)).isocalendar()
dates = daterange.week(year, week) dates = daterange.week(year, week)
filename = sys.argv[1] filename = args[0]
elif len(sys.argv) == 3: elif len(args) == 2:
filename = sys.argv[1] filename = args[0]
date = parse_date(sys.argv[2]) date = parse_date(args[1])
dates = daterange.between(date, date) dates = daterange.between(date, date)
elif len(sys.argv) == 4: elif len(args) == 3:
filename = sys.argv[1] filename = args[0]
start = parse_date(sys.argv[2]) start = parse_date(args[1])
end = parse_date(sys.argv[3]) end = parse_date(args[2])
dates = daterange.between(start, end) dates = daterange.between(start, end)
else: else:
print('%s file [start [end]]' % (os.path.basename(sys.argv[0]))) print('%s [--overlaps] file [start [end]]' % (os.path.basename(sys.argv[0])), file = sys.stderr)
print('start and end are in yyyy-mm-dd format') print('start and end are in yyyy-mm-dd format', file = sys.stderr)
sys.exit(1) sys.exit(1)
with open(filename, 'r') as f: with open(filename, 'r') as f:
@ -66,17 +74,26 @@ def main():
for date, entries in timetable_by_date: for date, entries in timetable_by_date:
entries.sort(key = lambda x: x[0].range()[0]) entries.sort(key = lambda x: x[0].range()[0])
previous_time_range = None previous_time_range = None
print(date) previous_name = None
if not only_overlaps:
print(date)
for time_range, name, info in entries: for time_range, name, info in entries:
print('\t%s %s: %s' % (time_range, name, info)) if not only_overlaps:
print('\t%s %s: %s' % (time_range, name, info))
if previous_time_range is not None: if previous_time_range is not None:
if time_range.overlaps(previous_time_range): if time_range.overlaps(previous_time_range):
print('\t\tOverlap') if only_overlaps:
print('%s: %s %s | %s %s' % (date, previous_time_range, previous_name, time_range, name))
else:
print('\t\tOverlap')
# If the current's ending time is before the previous's, don't change previous_time_range in case it overlaps with several # If the current's ending time is before the previous's, don't change previous_time_range in case it overlaps with several
# If current's ending time after, it's safe to change # If current's ending time after, it's safe to change
if time_range.range()[1] >= previous_time_range.range()[1]: if time_range.range()[1] >= previous_time_range.range()[1]:
previous_time_range = time_range previous_time_range = time_range
previous_name = name
else: else:
previous_time_range = time_range previous_time_range = time_range
previous_name = name
else: else:
previous_time_range = time_range previous_time_range = time_range
previous_name = name