TimeSampleHistogram: cleanup option usage
authorDan White <dan@whiteaudio.com>
Thu, 26 Jun 2025 15:04:54 +0000 (10:04 -0500)
committerDan White <dan@whiteaudio.com>
Thu, 26 Jun 2025 15:04:54 +0000 (10:04 -0500)
TimeSampleHistogram

index 794509104f23ba94aa3be90389afe1854e91f6e0..07eb3faf289f931a3e3cdeda3b16e97c47d4a0a1 100755 (executable)
@@ -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')