Loading ale/drivers/mro_drivers.py +16 −4 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ class MroCtxIsisLabelNaifSpiceDriver(IsisLabel, Driver, NaifSpice, LineScanner, return "MRO" class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner, RadialDistortion): class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, NaifSpice, LineScanner, RadialDistortion, Driver): """ Driver for reading CTX PDS3 labels. Requires a Spice mixin to acquire addtional ephemeris and instrument data located exclusively in spice kernels. Loading @@ -111,7 +111,7 @@ class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner, if not hasattr(self, '_metakernel'): self._metakernel = None for mk in mks: if str(self.start_time.year) in os.path.basename(mk): if str(self.utc_start_time.year) in os.path.basename(mk): self._metakernel = mk return self._metakernel Loading @@ -131,7 +131,7 @@ class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner, 'CONTEXT CAMERA':'MRO_CTX' } return id_lookup[self.label['INSTRUMENT_NAME']] return id_lookup[super().instrument_id] @property def spacecraft_name(self): Loading @@ -147,4 +147,16 @@ class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner, name_lookup = { 'MARS_RECONNAISSANCE_ORBITER': 'MRO' } return name_lookup[self.label['SPACECRAFT_NAME']] return name_lookup[super().spacecraft_name] @property def detector_start_line(self): return 1 @property def detector_start_sample(self): return self.label.get('SAMPLE_FIRST_PIXEL', 0) @property def sensor_model_version(self): return 1 tests/pytests/test_mro_drivers.py +21 −52 Original line number Diff line number Diff line from unittest.mock import patch import pytest import ale Loading @@ -19,58 +21,25 @@ from ale.drivers.mro_drivers import MroCtxPds3LabelNaifSpiceDriver MroCtxPds3LabelNaifSpiceDriver.metakernel = get_mockkernels @pytest.fixture def mroctx_label(): return """ PDS_VERSION_ID = PDS3 FILE_NAME = "D10_031011_1864_XI_06N201W.IMG" RECORD_TYPE = FIXED_LENGTH RECORD_BYTES = 5056 FILE_RECORDS = 7169 LABEL_RECORDS = 1 ^IMAGE = 2 SPACECRAFT_NAME = MARS_RECONNAISSANCE_ORBITER INSTRUMENT_NAME = "CONTEXT CAMERA" INSTRUMENT_HOST_NAME = "MARS RECONNAISSANCE ORBITER" MISSION_PHASE_NAME = "ESP" TARGET_NAME = MARS INSTRUMENT_ID = CTX PRODUCER_ID = MRO_CTX_TEAM DATA_SET_ID = "MRO-M-CTX-2-EDR-L0-V1.0" PRODUCT_CREATION_TIME = 2013-08-27T20:37:16 SOFTWARE_NAME = "makepds05 $Revision: 1.16 $" UPLOAD_ID = "UNK" ORIGINAL_PRODUCT_ID = "4A_04_109D009200" PRODUCT_ID = "D10_031011_1864_XI_06N201W" START_TIME = 2013-03-08T21:38:44.237 STOP_TIME = 2013-03-08T21:38:57.689 SPACECRAFT_CLOCK_START_COUNT = "1047245959:234" SPACECRAFT_CLOCK_STOP_COUNT = "N/A" FOCAL_PLANE_TEMPERATURE = 298.0 <K> SAMPLE_BIT_MODE_ID = "SQROOT" OFFSET_MODE_ID = "196/234/217" LINE_EXPOSURE_DURATION = 1.877 <MSEC> SAMPLING_FACTOR = 1 SAMPLE_FIRST_PIXEL = 0 RATIONALE_DESC = "Dark slope streak monitor in MOC SP1-25706 and E05-01077 and others" DATA_QUALITY_DESC = "OK" ORBIT_NUMBER = 31011 OBJECT = IMAGE LINES = 7168 LINE_SAMPLES = 5056 LINE_PREFIX_BYTES = 0 LINE_SUFFIX_BYTES = 0 SAMPLE_TYPE = UNSIGNED_INTEGER SAMPLE_BITS = 8 SAMPLE_BIT_MASK = 2#11111111# CHECKSUM = 16#0C902B7F# END_OBJECT = IMAGE END""" def driver(): return MroCtxPds3LabelNaifSpiceDriver("") @patch('ale.base.label_pds3.Pds3Label.instrument_id', 'CONTEXT CAMERA') def test_instrument_id(driver): assert driver.instrument_id == 'MRO_CTX' @patch('ale.base.label_pds3.Pds3Label.spacecraft_name', 'MARS_RECONNAISSANCE_ORBITER') def test_spacecraft_name(driver): assert driver.spacecraft_name == 'MRO' def test_detector_start_line(driver): assert driver.detector_start_line == 1 def test_ctx_creation(mroctx_label): #with MroCtxPds3LabelNaifSpiceDriver(mroctx_label) as m: # d = m.to_dict() #assert isinstance(d, dict) def test_detector_start_sample(driver): # I am not sure how to accomplish this with a fixture and # a decorator. Therefore, using a context with patch.dict(driver.label, SAMPLE_FIRST_PIXEL=0) as f: assert driver.detector_start_sample == 0 # Need to insert new tests here, one for each property unique to this driver assert True def test_sensor_model_version(driver): assert driver.sensor_model_version == 1 Loading
ale/drivers/mro_drivers.py +16 −4 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ class MroCtxIsisLabelNaifSpiceDriver(IsisLabel, Driver, NaifSpice, LineScanner, return "MRO" class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner, RadialDistortion): class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, NaifSpice, LineScanner, RadialDistortion, Driver): """ Driver for reading CTX PDS3 labels. Requires a Spice mixin to acquire addtional ephemeris and instrument data located exclusively in spice kernels. Loading @@ -111,7 +111,7 @@ class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner, if not hasattr(self, '_metakernel'): self._metakernel = None for mk in mks: if str(self.start_time.year) in os.path.basename(mk): if str(self.utc_start_time.year) in os.path.basename(mk): self._metakernel = mk return self._metakernel Loading @@ -131,7 +131,7 @@ class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner, 'CONTEXT CAMERA':'MRO_CTX' } return id_lookup[self.label['INSTRUMENT_NAME']] return id_lookup[super().instrument_id] @property def spacecraft_name(self): Loading @@ -147,4 +147,16 @@ class MroCtxPds3LabelNaifSpiceDriver(Pds3Label, Driver, NaifSpice, LineScanner, name_lookup = { 'MARS_RECONNAISSANCE_ORBITER': 'MRO' } return name_lookup[self.label['SPACECRAFT_NAME']] return name_lookup[super().spacecraft_name] @property def detector_start_line(self): return 1 @property def detector_start_sample(self): return self.label.get('SAMPLE_FIRST_PIXEL', 0) @property def sensor_model_version(self): return 1
tests/pytests/test_mro_drivers.py +21 −52 Original line number Diff line number Diff line from unittest.mock import patch import pytest import ale Loading @@ -19,58 +21,25 @@ from ale.drivers.mro_drivers import MroCtxPds3LabelNaifSpiceDriver MroCtxPds3LabelNaifSpiceDriver.metakernel = get_mockkernels @pytest.fixture def mroctx_label(): return """ PDS_VERSION_ID = PDS3 FILE_NAME = "D10_031011_1864_XI_06N201W.IMG" RECORD_TYPE = FIXED_LENGTH RECORD_BYTES = 5056 FILE_RECORDS = 7169 LABEL_RECORDS = 1 ^IMAGE = 2 SPACECRAFT_NAME = MARS_RECONNAISSANCE_ORBITER INSTRUMENT_NAME = "CONTEXT CAMERA" INSTRUMENT_HOST_NAME = "MARS RECONNAISSANCE ORBITER" MISSION_PHASE_NAME = "ESP" TARGET_NAME = MARS INSTRUMENT_ID = CTX PRODUCER_ID = MRO_CTX_TEAM DATA_SET_ID = "MRO-M-CTX-2-EDR-L0-V1.0" PRODUCT_CREATION_TIME = 2013-08-27T20:37:16 SOFTWARE_NAME = "makepds05 $Revision: 1.16 $" UPLOAD_ID = "UNK" ORIGINAL_PRODUCT_ID = "4A_04_109D009200" PRODUCT_ID = "D10_031011_1864_XI_06N201W" START_TIME = 2013-03-08T21:38:44.237 STOP_TIME = 2013-03-08T21:38:57.689 SPACECRAFT_CLOCK_START_COUNT = "1047245959:234" SPACECRAFT_CLOCK_STOP_COUNT = "N/A" FOCAL_PLANE_TEMPERATURE = 298.0 <K> SAMPLE_BIT_MODE_ID = "SQROOT" OFFSET_MODE_ID = "196/234/217" LINE_EXPOSURE_DURATION = 1.877 <MSEC> SAMPLING_FACTOR = 1 SAMPLE_FIRST_PIXEL = 0 RATIONALE_DESC = "Dark slope streak monitor in MOC SP1-25706 and E05-01077 and others" DATA_QUALITY_DESC = "OK" ORBIT_NUMBER = 31011 OBJECT = IMAGE LINES = 7168 LINE_SAMPLES = 5056 LINE_PREFIX_BYTES = 0 LINE_SUFFIX_BYTES = 0 SAMPLE_TYPE = UNSIGNED_INTEGER SAMPLE_BITS = 8 SAMPLE_BIT_MASK = 2#11111111# CHECKSUM = 16#0C902B7F# END_OBJECT = IMAGE END""" def driver(): return MroCtxPds3LabelNaifSpiceDriver("") @patch('ale.base.label_pds3.Pds3Label.instrument_id', 'CONTEXT CAMERA') def test_instrument_id(driver): assert driver.instrument_id == 'MRO_CTX' @patch('ale.base.label_pds3.Pds3Label.spacecraft_name', 'MARS_RECONNAISSANCE_ORBITER') def test_spacecraft_name(driver): assert driver.spacecraft_name == 'MRO' def test_detector_start_line(driver): assert driver.detector_start_line == 1 def test_ctx_creation(mroctx_label): #with MroCtxPds3LabelNaifSpiceDriver(mroctx_label) as m: # d = m.to_dict() #assert isinstance(d, dict) def test_detector_start_sample(driver): # I am not sure how to accomplish this with a fixture and # a decorator. Therefore, using a context with patch.dict(driver.label, SAMPLE_FIRST_PIXEL=0) as f: assert driver.detector_start_sample == 0 # Need to insert new tests here, one for each property unique to this driver assert True def test_sensor_model_version(driver): assert driver.sensor_model_version == 1