in smdebug_rulesconfig/profiler_rules/rules.py [0:0]
def __init__(self, opt_out_telemetry=False, **rule_parameters):
"""
This rule will create a profiler report after invoking all of the rules. The parameters
used in any of these rules can be customized by following this naming scheme:
<rule_name>_<parameter_name> : value
Validation is also done here to ensure that:
1. The key names follow the above format
2. rule_name corresponds to a valid rule name.
3. parameter_name corresponds to a valid parameter of this rule.
4. The parameter for this rule's parameter is valid.
:param rule_parameters: Dictionary mapping rule + parameter name to value.
"""
rule_classes = ProfilerReport.get_rules()
rule_names = str([rule.__name__ for rule in rule_classes]).strip("[]")
rule_classes_by_name = {rule.__name__.lower(): rule for rule in rule_classes}
validate_boolean(self.__class__.__name__, "opt_out_telemetry", opt_out_telemetry)
formatted_rule_parameters = {}
for key, val in rule_parameters.items():
assert key.count("_") >= 1, invalid_key_format_error.format(key)
rule_name, *parameter_name = key.split("_")
parameter_name = "_".join(parameter_name).lower()
assert rule_name.lower() in rule_classes_by_name, invalid_rule_error.format(
rule_name, rule_names
)
rule_class = rule_classes_by_name[rule_name.lower()]
try:
rule_class(**{parameter_name: val})
except TypeError:
rule_args = str(inspect.getfullargspec(rule_class.__init__)[0]).strip("[]")
raise TypeError(
invalid_param_error.format(parameter_name, rule_class.__name__, rule_args)
)
formatted_key = f"{rule_class.__name__}_{parameter_name}"
formatted_rule_parameters[formatted_key] = val
super().__init__(
opt_out_telemetry=opt_out_telemetry, custom_rule_parameters=formatted_rule_parameters
)