| Index: sitescripts/notifications/parser.py | 
| =================================================================== | 
| --- a/sitescripts/notifications/parser.py | 
| +++ b/sitescripts/notifications/parser.py | 
| @@ -49,43 +49,54 @@ | 
|  | 
| def _parse_notification(data, name): | 
| notification = {"id": name, "severity": "information", "message": {}, "title": {}} | 
| +  current = notification | 
|  | 
| for line in data: | 
| if not re.search(r"\S", line): | 
| continue | 
|  | 
| +    if re.search(r"^\[.*\]$", line): | 
| +      current = {"title": {}, "message": {}} | 
| +      notification.setdefault("variants", []).append(current) | 
| +      continue | 
| + | 
| if line.find("=") < 0: | 
| raise Exception("Could not process line '%s' in file '%s'" % (line.strip(), name)) | 
|  | 
| key, value = map(unicode.strip, line.split("=", 1)) | 
| +    is_variant = current != notification | 
|  | 
| -    if key == "inactive": | 
| -      notification["inactive"] = True | 
| +    if key == "inactive" and not is_variant: | 
| +      current["inactive"] = True | 
| elif key == "severity": | 
| if value not in ("information", "critical"): | 
| raise Exception("Unknown severity value '%s' in file '%s'" % (value, name)) | 
| -      notification["severity"] = value | 
| +      current["severity"] = value | 
| elif key == "links": | 
| -      notification["links"] = value.split() | 
| +      current["links"] = value.split() | 
| elif key.startswith("title."): | 
| locale = key[len("title."):] | 
| -      notification["title"][locale] = value | 
| +      current["title"][locale] = value | 
| elif key.startswith("message."): | 
| locale = key[len("message."):] | 
| -      notification["message"][locale] = value | 
| +      current["message"][locale] = value | 
| elif key == "target": | 
| target = _parse_targetspec(value, name) | 
| if "targets" in notification: | 
| -        notification["targets"].append(target) | 
| +        current["targets"].append(target) | 
| else: | 
| -        notification["targets"] = [target] | 
| +        current["targets"] = [target] | 
| +    elif key == "sample" and is_variant: | 
| +      current["sample"] = float(value) | 
| else: | 
| raise Exception("Unknown parameter '%s' in file '%s'" % (key, name)) | 
|  | 
| -  if "en-US" not in notification["title"]: | 
| -    raise Exception("No title for en-US (default language) in file '%s'" % name) | 
| -  if "en-US" not in notification["message"]: | 
| -    raise Exception("No message for en-US (default language) in file '%s'" % name) | 
| +  for text_key in ("title", "message"): | 
| +    def has_default_locale(variant): return "en-US" in variant[text_key] | 
| +    if (not has_default_locale(notification) and | 
| +        not all(map(has_default_locale, notification.get("variants", [])))): | 
| +      raise Exception("No %s for en-US (default language) in file '%s'" % | 
| +                      (text_key, name)) | 
| return notification | 
|  | 
| def load_notifications(): | 
|  |