Closed eichblatt closed 2 years ago
Log output extract:
Sep 10 17:50:28 deadstreamv3 bash[8380]: Traceback (most recent call last):
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/gpiozero/pins/rpigpio.py", line 223, in _call_when_changed
Sep 10 17:50:28 deadstreamv3 bash[8380]: super(RPiGPIOPin, self)._call_when_changed()
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/gpiozero/pins/local.py", line 128, in _call_when_changed
Sep 10 17:50:28 deadstreamv3 bash[8380]: super(LocalPiPin, self)._call_when_changed(
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/gpiozero/pins/pi.py", line 298, in _call_when_changed
Sep 10 17:50:28 deadstreamv3 bash[8380]: method(ticks, state)
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/gpiozero/input_devices.py", line 182, in _pin_changed
Sep 10 17:50:28 deadstreamv3 bash[8380]: self._fire_events(ticks, bool(self._state_to_value(state)))
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/gpiozero/mixins.py", line 401, in _fire_events
Sep 10 17:50:28 deadstreamv3 bash[8380]: self._fire_activated()
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/gpiozero/mixins.py", line 447, in _fire_activated
Sep 10 17:50:28 deadstreamv3 bash[8380]: super(HoldMixin, self)._fire_activated()
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/gpiozero/mixins.py", line 364, in _fire_activated
Sep 10 17:50:28 deadstreamv3 bash[8380]: self.when_activated()
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/gpiozero/mixins.py", line 354, in wrapper
Sep 10 17:50:28 deadstreamv3 bash[8380]: return fn(self)
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/timemachine/livemusic.py", line 995, in <lambda>
Sep 10 17:50:28 deadstreamv3 bash[8380]: TMB.select.when_pressed = lambda button: select_button(button, state)
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/timemachine/livemusic.py", line 77, in inner
Sep 10 17:50:28 deadstreamv3 bash[8380]: func(*args, **kwargs)
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/timemachine/livemusic.py", line 236, in select_button
Sep 10 17:50:28 deadstreamv3 bash[8380]: select_current_date(state, autoplay=autoplay)
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/timemachine/livemusic.py", line 207, in select_current_date
Sep 10 17:50:28 deadstreamv3 bash[8380]: tapes = date_reader.archive.resort_tape_date(date_reader.fmtdate())
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/timemachine/Archivary.py", line 223, in resort_tape_date
Sep 10 17:50:28 deadstreamv3 bash[8380]: bt = [remove_none(a.resort_tape_date(date)) for a in self.archives]
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/timemachine/Archivary.py", line 223, in <listcomp>
Sep 10 17:50:28 deadstreamv3 bash[8380]: bt = [remove_none(a.resort_tape_date(date)) for a in self.archives]
Sep 10 17:50:28 deadstreamv3 bash[8380]: File "/home/deadhead/env_20220821.a4de6099/lib/python3.9/site-packages/timemachine/Archivary.py", line 956, in resort_tape_date
Sep 10 17:50:28 deadstreamv3 bash[8380]: tapes = self.tape_dates[date]
Sep 10 17:50:28 deadstreamv3 bash[8380]: KeyError: '1983-09-02'
Sep 10 17:52:30 deadstreamv3 bash[8380]: 2022-09-10 17:52:30.061 INFO: timemachine.livemusic in track event callback playlist-pos, 1
Note: there is a show on 9/2/83, but in the function "resort_tape_date", it doesn't appear to recognize it.
This may be due to the re-order tapes fix, somehow. Hopefully it is, because otherwise it may be widespread. Thinking a bit more, I believe this is due to issue #313 which added the archive updates when they are loaded.
See https://github.com/eichblatt/deadstream/commit/a2544004add7bd84f43926609893c47c72d63a57
Note: the most recently-added tape for 1983-09-02 was added in 2020.
In the log, I noticed that there was an archive update occuring every hour, instead of every 5 hours. The reason was that the updates were failing for a stupid reason: Some of the titles were None, which failed when .lower()
was attempted (in the compute_score function.
So, the Archives were being updated, but the _tapedates variable was not being updated. And the update was running every hour!
I put in a couple of protections here:
First, I modified title_fraction to check for NoneType before asking for the .lower()
def title_fraction(self):
n_tracks = len(self._tracks)
lc = string.ascii_lowercase
n_known = len([t for t in self._tracks if t.title is not None and t.title != 'unknown' and sum([x in lc for x in t.title.lower()]) > 4])
return (1 + n_known) / (1 + n_tracks)
And I protected the entire call with a try/except around the compute_score function:
def get_tape_dates(self, sort_within=True): # BaseArchive
tape_dates = {}
for tape in self.tapes:
k = tape.date
if k not in tape_dates.keys():
tape_dates[k] = [tape]
else:
tape_dates[k].append(tape)
# Now that we have all tape for a date, put them in the right order
if not sort_within:
self.tape_dates = tape_dates
else:
self.tape_dates = {}
for k, v in tape_dates.items():
try:
self.tape_dates[k] = sorted(v, key=methodcaller('compute_score'), reverse=True)
except:
self.tape_dates[k] = v
logger.warning(f"Failed to sort tapes on {k}")
return self.tape_dates
When I change the date with the knobs, I can't select a new date. But if I use the "next show" button, I can.