diff --git a/ligo/gracedb/rest.py b/ligo/gracedb/rest.py index b88e9f2b5d7d16aff9b5950adac25bc8b73dd823..4f07a1b974b503871cbdbbb3923d2bb40b7acef0 100644 --- a/ligo/gracedb/rest.py +++ b/ligo/gracedb/rest.py @@ -1157,7 +1157,7 @@ class GraceDb(GsiRest): return self.get(uri).json()['numRows'] def createSuperevent(self, t_start, t_0, t_end, preferred_event, - category='production', events=[], labels=None): + category='production', events=None, labels=None): """Create a superevent. All LIGO-Virgo users can create test superevents, but special @@ -1201,28 +1201,40 @@ class GraceDb(GsiRest): if labels: if isinstance(labels, six.string_types): labels = [labels] - elif isinstance(labels, list): - pass + elif isinstance(labels, (list, tuple)): + # Validate each entry + if any([not isinstance(l, six.string_types) for l in labels]): + err_msg = "One of the provided labels is not a string" + raise TypeError(err_msg) else: raise TypeError("labels arg is {0}, should be str or list" .format(type(labels))) # Check labels against those in database for l in labels: if l not in self.allowed_labels: - raise NameError(("Label '{0}' does not exist in the " - "database").format(l)) + raise ValueError(("Label '{0}' does not exist in the " + "database").format(l)) if events: if isinstance(events, six.string_types): events = [events] - elif isinstance(events, list): - pass + elif isinstance(events, (list, tuple)): + if any([not isinstance(e, six.string_types) for e in events]): + err_msg = \ + "One of the provided event graceids is not a string" + raise TypeError(err_msg) else: raise TypeError("events arg is {0}, should be str or list" .format(type(events))) - # validate category, convert to short form if necessary - category = self._getCode(category.lower(), - self.superevent_categories) + # Validate category, convert to short form if necessary + if not isinstance(category, six.string_types): + err_msg = "category arg is {0}, should be a string".format( + type(category)) + raise TypeError(err_msg) + category = self._getCode(category, self.superevent_categories) + # Note: category can be None here as a result of processing + # by _getCode, which indicates failure to match the provided + # superevent category if not category: raise ValueError("category must be one of: {0}".format( list(six.itervalues(self.superevent_categories))))