diff --git a/gracedb/events/migrations/0036_populate_voevent_fields.py b/gracedb/events/migrations/0036_populate_voevent_fields.py index 554b978b1acfb30e211852fa4b7de74ec1ec5619..f5da68f22e319554e3eb894bdf29c81dfd1f6ba3 100644 --- a/gracedb/events/migrations/0036_populate_voevent_fields.py +++ b/gracedb/events/migrations/0036_populate_voevent_fields.py @@ -89,19 +89,34 @@ def populate_values(voevent, event_or_superevent): # Parse parameters for parameter in PARAMETER_MAPPINGS: + result = None for path in PARAMETER_MAPPINGS[parameter]: - result = None try: result = root.find(path) except SyntaxError as e: pass + else: + # If result is not None, we've found something, so let's break + if result is not None: + break + if result is None: # not found, likely due to an old VOEvent schema continue # Special parameter parsing if parameter in ['hardware_inj', 'internal', 'open_alert']: - value = bool(int(result.attrib['value'])) + # Better bool processing + try: + value = bool(int(result.attrib['value'])) + except ValueError: + value = result.attrib['value'] + if value.lower() in ['f', '0', 'false']: + value = False + elif value.lower() in ['t', '1', 'true']: + value = True + else: + raise ValueError("Can't process value {0}".format(value)) elif parameter == 'skymap_filename': value = result.attrib['value'].split('/')[-1] elif parameter == 'skymap_type': @@ -118,9 +133,10 @@ def populate_values(voevent, event_or_superevent): for parameter, str_list in DESCRIPTION_PARAMETER_MAPPINGS.items(): for s in str_list: if any([s in dp for dp in desc_text]): - setattr(voevent, parameter, True) + value = True else: - setattr(voevent, parameter, False) + value = False + setattr(voevent, parameter, value) # Save VOEvent voevent.save() diff --git a/gracedb/superevents/migrations/0004_populate_voevent_fields.py b/gracedb/superevents/migrations/0004_populate_voevent_fields.py index b298253188c7ae17510dfca74084686af8024542..a693ff8355d620ae3e55323cad02a360ecbc3907 100644 --- a/gracedb/superevents/migrations/0004_populate_voevent_fields.py +++ b/gracedb/superevents/migrations/0004_populate_voevent_fields.py @@ -86,12 +86,17 @@ def populate_values(voevent, event_or_superevent): # Parse parameters for parameter in PARAMETER_MAPPINGS: + result = None for path in PARAMETER_MAPPINGS[parameter]: - result = None try: result = root.find(path) except SyntaxError as e: pass + else: + # If result is not None, we've found something, so let's break + if result is not None: + break + if result is None: continue @@ -114,9 +119,10 @@ def populate_values(voevent, event_or_superevent): for parameter, str_list in DESCRIPTION_PARAMETER_MAPPINGS.items(): for s in str_list: if any([s in dp for dp in desc_text]): - setattr(voevent, parameter, True) + value = True else: - setattr(voevent, parameter, False) + value = False + setattr(voevent, parameter, value) # Save VOEvent voevent.save()