Short-lived database sessions cause exceptions when fetching schedules
Since the introduction of short-lived sessions (!9 (merged)) following exceptions are thrown when fetching schedules from Steering.
This happens with both PostgreSQL and SQLite.
PlaylistEntryMetadata
self._target(*self._args, **self._kwargs)
File "/home/david/code/aura/engine/src/events.py", line 188, in func
self.scheduler.on_ready()
File "/home/david/code/aura/engine/src/scheduling/scheduler.py", line 135, in on_ready
self.play_active_entry()
File "/home/david/code/aura/engine/src/scheduling/scheduler.py", line 189, in play_active_entry
active_entry = self.programme.get_current_entry()
File "/home/david/code/aura/engine/src/scheduling/programme.py", line 111, in get_current_entry
self.refresh()
File "/home/david/code/aura/engine/src/scheduling/programme.py", line 79, in refresh
self.timeslots = self.programme_store.store_timeslots(response)
File "/home/david/code/aura/engine/src/scheduling/programme.py", line 299, in store_timeslots
self.store_playlist(timeslot_db, timeslot_db.playlist_id, timeslot["playlist"])
File "/home/david/code/aura/engine/src/scheduling/programme.py", line 429, in store_playlist
self.store_playlist_entries(timeslot_db, playlist_db, fetched_playlist)
File "/home/david/code/aura/engine/src/scheduling/programme.py", line 471, in store_playlist_entries
self.store_playlist_entry_metadata(entry_db, entry["file"]["metadata"])
File "/home/david/code/aura/engine/src/scheduling/programme.py", line 533, in store_playlist_entry_metadata
metadata_db = PlaylistEntryMetaData.select_metadata_for_entry(entry_db.artificial_id)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/attributes.py", line 294, in __get__
return self.impl.get(instance_state(instance), dict_)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/attributes.py", line 725, in get
value = state._load_expired(state, passive)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/state.py", line 652, in _load_expired
self.manager.deferred_scalar_loader(self, toload)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/loading.py", line 942, in load_scalar_attributes
raise orm_exc.DetachedInstanceError(
sqlalchemy.orm.exc.DetachedInstanceError: Instance <PlaylistEntry at 0x7f72e66a3cd0> is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: http://sqlalche.me/e/13/bhk3)
Playlist
Exception has occurred: DetachedInstanceError
Parent instance <Timeslot at 0x7f339057aaf0> is not bound to a Session; lazy load operation of attribute 'playlist' cannot proceed (Background on this error at: http://sqlalche.me/e/13/bhk3)
File "/home/david/code/aura/engine/src/scheduling/utils.py", line 201, in get_ascii_timeslots
if active_timeslot.playlist:
File "/home/david/code/aura/engine/src/scheduling/scheduler.py", line 132, in on_ready
self.logger.info(self.timeslot_renderer.get_ascii_timeslots())
File "/home/david/code/aura/engine/src/events.py", line 188, in func
self.scheduler.on_ready()