From c1787e09f9335aef1c04a0c2c5fb5f5b20332cdb Mon Sep 17 00:00:00 2001 From: Mika Ayenson Date: Fri, 22 Sep 2023 15:42:47 -0500 Subject: [PATCH 1/2] refactor required argument --- detection_rules/cli_utils.py | 6 +++--- detection_rules/misc.py | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/detection_rules/cli_utils.py b/detection_rules/cli_utils.py index bc26007d7e9..acdac043833 100644 --- a/detection_rules/cli_utils.py +++ b/detection_rules/cli_utils.py @@ -140,9 +140,9 @@ def rule_prompt(path=None, rule_type=None, required_only=True, save=True, verbos threat_map = [] while click.confirm('add mitre tactic?'): - tactic = schema_prompt('mitre tactic name', type='string', enum=tactics, required=True) + tactic = schema_prompt('mitre tactic name', type='string', enum=tactics, is_required=True) technique_ids = schema_prompt(f'technique or sub-technique IDs for {tactic}', type='array', - required=False, enum=list(matrix[tactic])) or [] + is_required=False, enum=list(matrix[tactic])) or [] try: threat_map.append(build_threat_map_entry(tactic, *technique_ids)) @@ -158,7 +158,7 @@ def rule_prompt(path=None, rule_type=None, required_only=True, save=True, verbos continue if name == 'threshold': - contents[name] = {n: schema_prompt(f'threshold {n}', required=n in options['required'], **opts.copy()) + contents[name] = {n: schema_prompt(f'threshold {n}', is_required=n in options['required'], **opts.copy()) for n, opts in options['properties'].items()} continue diff --git a/detection_rules/misc.py b/detection_rules/misc.py index bb0de69381d..e940f920316 100644 --- a/detection_rules/misc.py +++ b/detection_rules/misc.py @@ -115,7 +115,7 @@ def nest_from_dot(dots, value): return nested -def schema_prompt(name, value=None, required=False, **options): +def schema_prompt(name, value=None, is_required=False, **options): """Interactively prompt based on schema requirements.""" name = str(name) field_type = options.get('type') @@ -136,7 +136,7 @@ def schema_prompt(name, value=None, required=False, **options): if name == 'rule_id': default = str(uuid.uuid4()) - if len(enum) == 1 and required and field_type != "array": + if len(enum) == 1 and is_required and field_type != "array": return enum[0] def _check_type(_val): @@ -168,7 +168,7 @@ def _convert_type(_val): prompt = '{name}{default}{required}{multi}'.format( name=name, default=' [{}] ("n/a" to leave blank) '.format(default) if default else '', - required=' (required) ' if required else '', + required=' (required) ' if is_required else '', multi=' (multi, comma separated) ' if field_type == 'array' else '').strip() + ': ' while True: @@ -177,7 +177,7 @@ def _convert_type(_val): result = None if not result: - if required: + if is_required: value = None continue else: @@ -187,7 +187,7 @@ def _convert_type(_val): result_list = result.split(',') if not (min_item < len(result_list) < max_items): - if required: + if is_required: value = None break else: @@ -195,19 +195,19 @@ def _convert_type(_val): for value in result_list: if not _check_type(value): - if required: + if is_required: value = None break else: return [] - if required and value is None: + if is_required and value is None: continue else: return [_convert_type(r) for r in result_list] else: if _check_type(result): return _convert_type(result) - elif required: + elif is_required: value = None continue return From 71f2fce07384cc53e8fb2f12e40943cacd4642c2 Mon Sep 17 00:00:00 2001 From: Mika Ayenson Date: Fri, 22 Sep 2023 15:44:15 -0500 Subject: [PATCH 2/2] refactor missing arg --- detection_rules/cli_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/detection_rules/cli_utils.py b/detection_rules/cli_utils.py index acdac043833..8ec2ce9287e 100644 --- a/detection_rules/cli_utils.py +++ b/detection_rules/cli_utils.py @@ -166,7 +166,7 @@ def rule_prompt(path=None, rule_type=None, required_only=True, save=True, verbos contents[name] = schema_prompt(name, value=kwargs.pop(name)) continue - result = schema_prompt(name, required=name in required_fields, **options.copy()) + result = schema_prompt(name, is_required=name in required_fields, **options.copy()) if result: if name not in required_fields and result == options.get('default', ''):