From 3aba5dbac57073160d09d4d92a8e0102d11ae83a Mon Sep 17 00:00:00 2001
From: Jesse Mapel <jmapel@usgs.gov>
Date: Thu, 2 Jan 2020 10:27:47 -0700
Subject: [PATCH] Added check for repeated fields in protobuf

---
 plio/io/io_controlnetwork.py            | 9 ++++++++-
 plio/io/tests/test_io_controlnetwork.py | 6 +++---
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/plio/io/io_controlnetwork.py b/plio/io/io_controlnetwork.py
index 57774f9..13ddfd5 100644
--- a/plio/io/io_controlnetwork.py
+++ b/plio/io/io_controlnetwork.py
@@ -270,6 +270,9 @@ class IsisStore(object):
                             arr = arr.ravel().tolist()
 
                         point_spec.aprioriCovar.extend(arr)
+                    # If field is repeated you must extend instead of assign
+                    elif cnf._CONTROLPOINTFILEENTRYV0002.fields_by_name[attr].label == 3:
+                        getattr(point_spec, attr).extend(g.iloc[0][df_attr])
                     else:
                         setattr(point_spec, attr, attrtype(g.iloc[0][df_attr]))
 
@@ -284,7 +287,11 @@ class IsisStore(object):
                     # Un-mangle common attribute names between points and measures
                     df_attr = self.measure_field_map.get(attr, attr)
                     if df_attr in g.columns:
-                        setattr(measure_spec, attr, attrtype(m[df_attr]))
+                        # If field is repeated you must extend instead of assign
+                        if cnf._CONTROLPOINTFILEENTRYV0002_MEASURE.fields_by_name[attr].label == 3:
+                            getattr(measure_spec, attr).extend(m[df_attr])
+                        else:
+                            setattr(measure_spec, attr, attrtype(m[df_attr]))
                 # ISIS pixels are centered on (0.5, 0.5). NDArrays are (0,0) based.
                 measure_spec.sample = m['sample'] + 0.5
                 measure_spec.line = m['line'] + 0.5
diff --git a/plio/io/tests/test_io_controlnetwork.py b/plio/io/tests/test_io_controlnetwork.py
index 9d13793..8b628ce 100644
--- a/plio/io/tests/test_io_controlnetwork.py
+++ b/plio/io/tests/test_io_controlnetwork.py
@@ -39,12 +39,12 @@ class TestWriteIsisControlNetwork(unittest.TestCase):
         serial_times = {295: '1971-07-31T01:24:11.754',
                         296: '1971-07-31T01:24:36.970'}
         cls.serials = {i:'APOLLO15/METRIC/{}'.format(j) for i, j in enumerate(serial_times.values())}
-        columns = ['id', 'pointType', 'serialnumber', 'measureType', 'sample', 'line', 'image_index']
+        columns = ['id', 'pointType', 'serialnumber', 'measureType', 'sample', 'line', 'image_index', 'pointLog', 'measureLog']
 
         data = []
         for i in range(cls.npts):
-            data.append((i, 2, cls.serials[0], 2, 0, 0, 0))
-            data.append((i, 2, cls.serials[1], 2, 0, 0, 1))
+            data.append((i, 2, cls.serials[0], 2, 0, 0, 0, [], []))
+            data.append((i, 2, cls.serials[1], 2, 0, 0, 1, [], []))
 
         df = pd.DataFrame(data, columns=columns)
 
-- 
GitLab