1414from cmk .utils .rulesets .ruleset_matcher import RulesetMatcher , RuleSpec
1515from cmk .utils .servicename import Item , ServiceName
1616from cmk .utils .translations import (
17+ parse_translation_options ,
1718 translate_service_description ,
1819 TranslationOptions ,
19- TranslationOptionsSpec ,
2020)
2121
2222
@@ -25,7 +25,7 @@ def __init__(
2525 self ,
2626 matcher : RulesetMatcher ,
2727 illegal_chars : str ,
28- translations : Sequence [RuleSpec [TranslationOptionsSpec ]],
28+ translations : Sequence [RuleSpec [Mapping [ str , object ] ]],
2929 ) -> None :
3030 self .matcher : Final = matcher
3131 self .illegal_chars : Final = illegal_chars
@@ -66,20 +66,15 @@ def _get_service_translations(
6666 return translations_cache [hostname ]
6767
6868 rules = self .matcher .get_host_values_all (hostname , self .translations , labels_of_host )
69- translations : TranslationOptions = {}
69+ merged = TranslationOptions ( case = None , drop_domain = False , regex = [], mapping = [])
7070 for rule in rules [::- 1 ]:
71- if "case" in rule :
72- translations ["case" ] = rule ["case" ]
73- if "regex" in rule :
74- translations ["regex" ] = list (
75- set (translations .get ("regex" , [])) | set (rule ["regex" ])
76- )
77- if "mapping" in rule :
78- translations ["mapping" ] = list (
79- set (translations .get ("mapping" , [])) | set (rule ["mapping" ])
80- )
71+ parsed_rule = parse_translation_options (rule )
72+ if "case" in rule : # inheritence! Don't check for "case" in parsed_rule!
73+ merged ["case" ] = parsed_rule ["case" ]
74+ merged ["regex" ] = list (set (merged ["regex" ]) | set (parsed_rule ["regex" ]))
75+ merged ["mapping" ] = list (set (merged ["mapping" ]) | set (parsed_rule ["mapping" ]))
8176
82- return translations_cache .setdefault (hostname , translations )
77+ return translations_cache .setdefault (hostname , parse_translation_options ( merged ) )
8378
8479
8580class PassiveServiceNameConfig :
0 commit comments