From f1bd0f897a86e5f07cdd5dbc36a46eb75a72bd8e Mon Sep 17 00:00:00 2001 From: Dan White Date: Thu, 26 Jun 2025 10:04:54 -0500 Subject: [PATCH] TimeSampleHistogram: cleanup option usage --- TimeSampleHistogram | 58 ++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/TimeSampleHistogram b/TimeSampleHistogram index 7945091..07eb3fa 100755 --- a/TimeSampleHistogram +++ b/TimeSampleHistogram @@ -75,6 +75,21 @@ if not args: #opt.today = True #testing +# +# these are from +# http://stackoverflow.com/questions/304256/whats-the-best-way-to-find-the-inverse-of-datetime-isocalendar/1700069#1700069 +# replaced with dt.date.fromisocalendar(year, week, day) +# +#def iso_year_start(iso_year): +# "The gregorian calendar date of the first day of the given ISO year" +# fourth_jan = dt.date(iso_year, 1, 4) +# delta = dt.timedelta(fourth_jan.isoweekday()-1) +# return fourth_jan - delta +# +#def iso_to_gregorian(iso_year, iso_week, iso_day): +# "Gregorian calendar date for the given ISO year, week and day" +# year_start = iso_year_start(iso_year) +# return year_start + dt.timedelta(iso_day-1, 0, 0, 0, 0, 0, iso_week-1) # # Date range filter @@ -112,42 +127,23 @@ if opt.days > 0: elif opt.days < 0: startdate = enddate + dt.timedelta(opt.days) - -if args.isoweek: - ## Formats accepted: - # 3 week 3 of this year - # 2025-09 week 3 of 2025 - # 1..4 range including weeks 1 through 4 - # - ### Nonstandard forms: - # 0 (this week) - # -1 (last week) - # +1 (next week) - # -3..-2 range including 3 weeks ago through 2 weeks ago - +if opt.isoweek: # any number of periods denote a range of weeks - wrange = args.isoweek.replace('.', ' ').split() + wrange = opt.isoweek.replace('.', ' ').split() # may be one or two items # if only one list item, then the second needs to be a copy of the first - # if there are already two items, then the added third one is unused wrange.append(wrange[0]) def wstr_to_date(wstr): - now_dt = dt.datetime.now() - year = now_dt.year - # handle relative weeks first - if wstr[0] in ('+', '-') or wstr == '0': - woffset = int(wstr) - x = now_dt + dt.timedelta(weeks=woffset) - year, week, _ = x.isocalendar() + *year, week = wstr.split('-') + + if year: + year = int(year[0]) else: - *year, week = wstr.split('-') - week = int(week) - if year: # it was provided - year = int(year[0]) - else: # only week number provided, assume this year - year, *_ = now_dt.isocalendar() + year = dt.datetime.now().year + + week = int(week) return (year, week) year, week = wstr_to_date(wrange[0]) @@ -157,6 +153,7 @@ if args.isoweek: enddate = dt.date.fromisocalendar(year, week, 7) + # modify to include all of enddate instead of start-of-day startdate = dt.datetime.combine(startdate, dt.time.min) enddate = dt.datetime.combine(enddate, dt.time.max) @@ -207,8 +204,9 @@ for file in files: try: r = m.groups()[:-1] except: - print(line) - raise + print(f"Parse Error: {line}") + continue + # raise ri = [int(i) for i in r] d = dt.datetime(*ri) t = m.group('text') -- 2.25.1