Event groups are optional

Change-Id: I2ff925e9433aedb028244d6c8867c2de5a786730
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py
index 994ad6b..a6c34b6 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -241,51 +241,52 @@
     Extract and construct the groups for the given event.
     """
     groups = []
-    for eGroups in edata['groups']:
-        if ('zone_conditions' in eGroups) and \
-           (eGroups['zone_conditions'] is not None):
-            # Zone conditions are optional in the events yaml but skip
-            # if this event's condition is not in this zone's conditions
-            if all('name' in z and z['name'] is not None and
-                   not any(c['name'] == z['name'] for c in zCond)
-                   for z in eGroups['zone_conditions']):
-                continue
+    if ('groups' in edata) and (edata['groups'] is not None):
+        for eGroups in edata['groups']:
+            if ('zone_conditions' in eGroups) and \
+               (eGroups['zone_conditions'] is not None):
+                # Zone conditions are optional in the events yaml but skip
+                # if this event's condition is not in this zone's conditions
+                if all('name' in z and z['name'] is not None and
+                       not any(c['name'] == z['name'] for c in zCond)
+                       for z in eGroups['zone_conditions']):
+                    continue
 
-            # Zone numbers are optional in the events yaml but skip if this
-            # zone's zone number is not in the event's zone numbers
-            if all('zones' in z and z['zones'] is not None and
-                   zNum not in z['zones']
-                   for z in eGroups['zone_conditions']):
-                continue
-        eGroup = next(g for g in events['groups']
-                      if g['name'] == eGroups['name'])
+                # Zone numbers are optional in the events yaml but skip if this
+                # zone's zone number is not in the event's zone numbers
+                if all('zones' in z and z['zones'] is not None and
+                       zNum not in z['zones']
+                       for z in eGroups['zone_conditions']):
+                    continue
+            eGroup = next(g for g in events['groups']
+                          if g['name'] == eGroups['name'])
 
-        group = {}
-        members = []
-        group['name'] = eGroup['name']
-        for m in eGroup['members']:
-            member = {}
-            member['path'] = eGroup['type']
-            member['object'] = (eGroup['type'] + m)
-            member['interface'] = eGroups['interface']
-            member['property'] = eGroups['property']['name']
-            member['type'] = eGroups['property']['type']
-            # Use defined service to note member on zone object
-            if ('service' in eGroup) and \
-               (eGroup['service'] is not None):
-                member['service'] = eGroup['service']
-            # Add expected group member's property value if given
-            if ('value' in eGroups['property']) and \
-               (eGroups['property']['value'] is not None):
-                    if isinstance(eGroups['property']['value'], str) or \
-                            "string" in str(member['type']).lower():
-                        member['value'] = (
-                            "\"" + eGroups['property']['value'] + "\"")
-                    else:
-                        member['value'] = eGroups['property']['value']
-            members.append(member)
-        group['members'] = members
-        groups.append(group)
+            group = {}
+            members = []
+            group['name'] = eGroup['name']
+            for m in eGroup['members']:
+                member = {}
+                member['path'] = eGroup['type']
+                member['object'] = (eGroup['type'] + m)
+                member['interface'] = eGroups['interface']
+                member['property'] = eGroups['property']['name']
+                member['type'] = eGroups['property']['type']
+                # Use defined service to note member on zone object
+                if ('service' in eGroup) and \
+                   (eGroup['service'] is not None):
+                    member['service'] = eGroup['service']
+                # Add expected group member's property value if given
+                if ('value' in eGroups['property']) and \
+                   (eGroups['property']['value'] is not None):
+                        if isinstance(eGroups['property']['value'], str) or \
+                                "string" in str(member['type']).lower():
+                            member['value'] = (
+                                "\"" + eGroups['property']['value'] + "\"")
+                        else:
+                            member['value'] = eGroups['property']['value']
+                members.append(member)
+            group['members'] = members
+            groups.append(group)
     return groups