-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
As we discussed in the last TRP dev call. I tried to get the TODs of an existing depth 1 map. I see two different behaviors. The first is when the map select is together with the tods line:
In [1]: from mapcat.helper import settings
...: from mapcat.database import DepthOneMapTable, TODDepthOneTable
...: map_name = "17569/depth1_1756951955_i1_f090"
...: with settings.session() as session:
...: existing_map = session.query(DepthOneMapTable).filter_by(map_name=map_name).first()
...: map_tods = existing_map.tods
...:
In [2]: map_tods
Out[2]:
[TODDepthOneTable(ctime=1756951955.5577126, frequency='f090', el_throw=0.0009, start_time=1756951955.5577126, scan_type='obs', roll_center=60.0, stop_time=1756954380.7577126, subtype='cmb', roll_throw=0.0015, nsamples=485041, wafer_count=3, wafer_slots_list='ws0,ws1,ws2', telescope='lat', duration=2425.2000000476837, stream_ids_list='ufm_mv21,ufm_mv24,ufm_mv28', obs_id='obs_1756951929_lati1_111', telescope_flavor='lat', az_center=250.8445, tod_id=5, tube_slot='i1', az_throw=12.0033, pwv=None, tube_flavor='mf', el_center=140.0002),
TODDepthOneTable(ctime=1756954562.2477126, frequency='f090', el_throw=0.001, start_time=1756954562.2477126, scan_type='obs', roll_center=60.0003, stop_time=1756957110.4527125, subtype='cmb', roll_throw=0.0016, nsamples=509642, wafer_count=3, wafer_slots_list='ws0,ws1,ws2', telescope='lat', duration=2548.204999923706, stream_ids_list='ufm_mv21,ufm_mv24,ufm_mv28', obs_id='obs_1756954534_lati1_111', telescope_flavor='lat', az_center=250.8447, tod_id=6, tube_slot='i1', az_throw=12.0028, pwv=None, tube_flavor='mf', el_center=140.0002),
TODDepthOneTable(ctime=1756957278.9727125, frequency='f090', el_throw=0.0009, start_time=1756957278.9727125, scan_type='obs', roll_center=60.0002, stop_time=1756959840.1677125, subtype='cmb', roll_throw=0.0015, nsamples=512240, wafer_count=3, wafer_slots_list='ws0,ws1,ws2', telescope='lat', duration=2561.194999933243, stream_ids_list='ufm_mv21,ufm_mv24,ufm_mv28', obs_id='obs_1756957257_lati1_111', telescope_flavor='lat', az_center=250.8445, tod_id=7, tube_slot='i1', az_throw=12.0027, pwv=None, tube_flavor='mf', el_center=140.0002),
TODDepthOneTable(ctime=1756960007.7327125, frequency='f090', el_throw=0.0009, start_time=1756960007.7327125, scan_type='obs', roll_center=60.0003, stop_time=1756963440.7577126, subtype='cmb', roll_throw=0.0015, nsamples=686606, wafer_count=3, wafer_slots_list='ws0,ws1,ws2', telescope='lat', duration=3433.0250000953674, stream_ids_list='ufm_mv21,ufm_mv24,ufm_mv28', obs_id='obs_1756959981_lati1_111', telescope_flavor='lat', az_center=250.8447, tod_id=8, tube_slot='i1', az_throw=12.0025, pwv=None, tube_flavor='mf', el_center=140.0001)]whereas:
In [1]: from mapcat.helper import settings
...: from mapcat.database import DepthOneMapTable, TODDepthOneTable
...: map_name = "17569/depth1_1756951955_i1_f090"
...: with settings.session() as session:
...: existing_map = session.query(DepthOneMapTable).filter_by(map_name=map_name).first()
...: with settings.session() as session:
...: map_tods = existing_map.tods
...:
---------------------------------------------------------------------------
DetachedInstanceError Traceback (most recent call last)
Cell In[1], line 7
5 existing_map = session.query(DepthOneMapTable).filter_by(map_name=map_name).first()
6 with settings.session() as session:
----> 7 map_tods = existing_map.tods
File /scratch/gpfs/SIMONSOBS/env/dev/soconda_dev/lib/python3.12/site-packages/sqlalchemy/orm/attributes.py:569, in InstrumentedAttribute.__get__(self, instance, owner)
567 except AttributeError as err:
568 raise orm_exc.UnmappedInstanceError(instance) from err
--> 569 return self.impl.get(state, dict_)
File /scratch/gpfs/SIMONSOBS/env/dev/soconda_dev/lib/python3.12/site-packages/sqlalchemy/orm/attributes.py:1096, in AttributeImpl.get(self, state, dict_, passive)
1093 if not passive & CALLABLES_OK:
1094 return PASSIVE_NO_RESULT
-> 1096 value = self._fire_loader_callables(state, key, passive)
1098 if value is PASSIVE_NO_RESULT or value is NO_VALUE:
1099 return value
File /scratch/gpfs/SIMONSOBS/env/dev/soconda_dev/lib/python3.12/site-packages/sqlalchemy/orm/attributes.py:1131, in AttributeImpl._fire_loader_callables(self, state, key, passive)
1129 return callable_(state, passive)
1130 elif self.callable_:
-> 1131 return self.callable_(state, passive)
1132 else:
1133 return ATTR_EMPTY
File /scratch/gpfs/SIMONSOBS/env/dev/soconda_dev/lib/python3.12/site-packages/sqlalchemy/orm/strategies.py:922, in LazyLoader._load_for_state(self, state, passive, loadopt, extra_criteria, extra_options, alternate_effective_path, execution_options)
919 if passive & PassiveFlag.NO_RAISE:
920 return LoaderCallableStatus.PASSIVE_NO_RESULT
--> 922 raise orm_exc.DetachedInstanceError(
923 "Parent instance %s is not bound to a Session; "
924 "lazy load operation of attribute '%s' cannot proceed"
925 % (orm_util.state_str(state), self.key)
926 )
928 # if we have a simple primary key load, check the
929 # identity map without generating a Query at all
930 if use_get:
DetachedInstanceError: Parent instance <DepthOneMapTable at 0x14cad8fb4e10> is not bound to a Session; lazy load operation of attribute 'tods' cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3)I think it should be the same behavior. If you want it to be lazy under the session, can we have a way to get all the information from the DB?
Metadata
Metadata
Assignees
Labels
No labels