From 8b38f395c21fb513797512d52f4c5848434e830e Mon Sep 17 00:00:00 2001
From: Jesse Mapel <jmapel@usgs.gov>
Date: Tue, 24 Sep 2019 13:50:52 -0700
Subject: [PATCH] IsisSpice now fails when it cannot find tables (#281)

* IsisSpice now fails when it cannot find tables

* Added test

* Fixed test error check
---
 ale/base/data_isis.py           |  8 ++++++++
 tests/pytests/test_data_isis.py | 15 +++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/ale/base/data_isis.py b/ale/base/data_isis.py
index bb8e186..905261e 100644
--- a/ale/base/data_isis.py
+++ b/ale/base/data_isis.py
@@ -204,6 +204,8 @@ class IsisSpice():
                 if table['Name'] == 'InstrumentPointing':
                     binary_data = read_table_data(table, self._file)
                     self._inst_pointing_table = parse_table(table, binary_data)
+                    return self._inst_pointing_table
+            raise ValueError(f'Could not find InstrumentPointing table on file {self._file}')
         return self._inst_pointing_table
 
     @property
@@ -222,6 +224,8 @@ class IsisSpice():
                 if table['Name'] == 'BodyRotation':
                     binary_data = read_table_data(table, self._file)
                     self._body_orientation_table = parse_table(table, binary_data)
+                    return self._body_orientation_table
+            raise ValueError(f'Could not find BodyRotation table on file {self._file}')
         return self._body_orientation_table
 
     @property
@@ -240,6 +244,8 @@ class IsisSpice():
                 if table['Name'] == 'InstrumentPosition':
                     binary_data = read_table_data(table, self._file)
                     self._inst_position_table = parse_table(table, binary_data)
+                    return self._inst_position_table
+            raise ValueError(f'Could not find InstrumentPosition table on file {self._file}')
         return self._inst_position_table
 
     @property
@@ -258,6 +264,8 @@ class IsisSpice():
                 if table['Name'] == 'SunPosition':
                     binary_data = read_table_data(table, self._file)
                     self._sun_position_table = parse_table(table, binary_data)
+                    return self._sun_position_table
+            raise ValueError(f'Could not find SunPosition table on file {self._file}')
         return self._sun_position_table
 
     def __enter__(self):
diff --git a/tests/pytests/test_data_isis.py b/tests/pytests/test_data_isis.py
index 918ec11..4822662 100644
--- a/tests/pytests/test_data_isis.py
+++ b/tests/pytests/test_data_isis.py
@@ -4,6 +4,7 @@ import pvl
 import numpy as np
 from ale.base.data_isis import IsisSpice
 
+from conftest import get_image_label
 
 testlabel = """
 Object = IsisCube
@@ -699,3 +700,17 @@ def test_inst_position_cache(testdata):
                                    [[-1000, -2000*np.pi*np.sqrt(3)/9, 2000*np.pi*np.sqrt(3)/9],
                                     [-2000*np.pi*np.sqrt(3)/9, 2000*np.pi*np.sqrt(3)/9, -1000]])
     np.testing.assert_equal(sensor_times, [0, 1])
+
+def test_no_tables():
+    test_file = get_image_label('B10_013341_1010_XN_79S172W')
+    test_mix_in = IsisSpice()
+    test_mix_in._file = test_file
+    test_mix_in.label = pvl.load(test_file)
+    with pytest.raises(ValueError):
+        test_mix_in.inst_pointing_table
+    with pytest.raises(ValueError):
+        test_mix_in.body_orientation_table
+    with pytest.raises(ValueError):
+        test_mix_in.inst_position_table
+    with pytest.raises(ValueError):
+        test_mix_in.sun_position_table
-- 
GitLab