Skip to content

Commit d7c00e7

Browse files
committed
Simplify and refactor the check-compliance command
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent 2528df7 commit d7c00e7

2 files changed

Lines changed: 31 additions & 42 deletions

File tree

scanpipe/management/commands/check-compliance.py

Lines changed: 29 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -60,50 +60,41 @@ def handle(self, *args, **options):
6060
super().handle(*args, **options)
6161
exit_code = 0
6262

63-
fail_level = options["fail_level"]
64-
compliance_alerts = get_project_compliance_alerts(self.project, fail_level)
65-
66-
compliance_alerts_count = sum(
67-
len(issues_by_severity)
68-
for model_alerts in compliance_alerts.values()
69-
for issues_by_severity in model_alerts.values()
70-
)
63+
if self.check_compliance(options["fail_level"]):
64+
exit_code = 1
7165

72-
if compliance_alerts_count:
66+
if options["fail_on_vulnerabilities"] and self.check_vulnerabilities():
7367
exit_code = 1
74-
if self.verbosity > 0:
75-
msg = [
76-
f"{compliance_alerts_count} compliance issues detected on this "
77-
f"project."
78-
]
79-
for label, issues in compliance_alerts.items():
80-
msg.append(f"[{label}]")
81-
for severity, entries in issues.items():
82-
msg.append(f" > {severity.upper()}: {len(entries)}")
83-
if self.verbosity > 1:
84-
msg.append(" " + "\n ".join(entries))
8568

86-
self.stderr.write("\n".join(msg))
69+
sys.exit(exit_code)
8770

88-
if options["fail_on_vulnerabilities"]:
89-
if self.handle_vulnerabilities():
90-
exit_code = 1
71+
def check_compliance(self, fail_level):
72+
alerts = get_project_compliance_alerts(self.project, fail_level)
73+
count = sum(
74+
len(issues) for model in alerts.values() for issues in model.values()
75+
)
9176

92-
sys.exit(exit_code)
77+
if count and self.verbosity > 0:
78+
self.stderr.write(f"{count} compliance issues detected.")
79+
for label, model in alerts.items():
80+
self.stderr.write(f"[{label}]")
81+
for severity, entries in model.items():
82+
self.stderr.write(f" > {severity.upper()}: {len(entries)}")
83+
if self.verbosity > 1:
84+
self.stderr.write(" " + "\n ".join(entries))
85+
return count > 0
9386

94-
def handle_vulnerabilities(self):
95-
packages_qs = self.project.discoveredpackages.vulnerable()
96-
dependencies_qs = self.project.discovereddependencies.vulnerable()
97-
vulnerability_count = packages_qs.count() + dependencies_qs.count()
87+
def check_vulnerabilities(self):
88+
packages = self.project.discoveredpackages.vulnerable()
89+
dependencies = self.project.discovereddependencies.vulnerable()
90+
vulnerable_records = list(packages) + list(dependencies)
91+
count = len(vulnerable_records)
9892

99-
if vulnerability_count:
100-
if self.verbosity > 0:
101-
self.stderr.write(f"{vulnerability_count} vulnerabilities found:")
102-
for entry in [*packages_qs, *dependencies_qs]:
93+
if self.verbosity > 0:
94+
if count:
95+
self.stderr.write(f"{count} vulnerable records found:")
96+
for entry in vulnerable_records:
10397
self.stderr.write(str(entry))
104-
return True
105-
106-
else:
107-
if self.verbosity > 0:
98+
else:
10899
self.stdout.write("No vulnerabilities found")
109-
return False
100+
return count > 0

scanpipe/tests/test_commands.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,9 +1196,7 @@ def test_scanpipe_management_command_check_compliance(self):
11961196
call_command("check-compliance", *options, stderr=out)
11971197
self.assertEqual(cm.exception.code, 1)
11981198
out_value = out.getvalue().strip()
1199-
expected = (
1200-
"1 compliance issues detected on this project.\n[packages]\n > ERROR: 1"
1201-
)
1199+
expected = "1 compliance issues detected.\n[packages]\n > ERROR: 1"
12021200
self.assertEqual(expected, out_value)
12031201

12041202
out = StringIO()
@@ -1208,7 +1206,7 @@ def test_scanpipe_management_command_check_compliance(self):
12081206
self.assertEqual(cm.exception.code, 1)
12091207
out_value = out.getvalue().strip()
12101208
expected = (
1211-
"2 compliance issues detected on this project."
1209+
"2 compliance issues detected."
12121210
"\n[packages]\n > ERROR: 1"
12131211
"\n[resources]\n > WARNING: 1"
12141212
)

0 commit comments

Comments
 (0)