Skip to content

Commit 0061255

Browse files
committed
Run formatting
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 75207c9 commit 0061255

7 files changed

Lines changed: 194 additions & 152 deletions

File tree

triage_rules/apps.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33

44
class TriageRulesConfig(AppConfig):
5-
name = 'triage_rules'
5+
name = "triage_rules"

triage_rules/engine.py

Lines changed: 27 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,14 @@ def evaluate(self, decision_point):
2828
if target == DecisionPoint.TARGET_VULNERABILITY:
2929
queryset = decision_point.query.get_qs(user=self.user)
3030
return queryset.filter(
31-
Q(
32-
pk__in=self.product.get_vulnerability_qs().values("pk")
33-
)
34-
| Q(
35-
pk__in=self.product.affected_by_vulnerabilities.values("pk")
36-
)
31+
Q(pk__in=self.product.get_vulnerability_qs().values("pk"))
32+
| Q(pk__in=self.product.affected_by_vulnerabilities.values("pk"))
3733
).exists()
3834

3935
if target == DecisionPoint.TARGET_PRODUCT:
4036
return self._product_matches_query(decision_point.query)
4137

42-
raise ValueError(
43-
f"Unknown target {target}"
44-
)
38+
raise ValueError(f"Unknown target {target}")
4539

4640
def _product_matches_query(self, query):
4741
q_objects = []
@@ -53,10 +47,8 @@ def _product_matches_query(self, query):
5347
if not q_objects:
5448
return False
5549

56-
queryset = (
57-
Product.unsecured_objects
58-
.scope(self.product.dataspace)
59-
.filter(pk=self.product.pk)
50+
queryset = Product.unsecured_objects.scope(self.product.dataspace).filter(
51+
pk=self.product.pk
6052
)
6153
operator_type = operator.or_ if query.operator == "or" else operator.and_
6254
return queryset.filter(reduce(operator_type, q_objects)).exists()
@@ -66,7 +58,6 @@ class RuleMatcher:
6658

6759
@staticmethod
6860
def matches(rule, vector):
69-
7061
"""
7162
vector
7263
@@ -82,20 +73,12 @@ def matches(rule, vector):
8273

8374
expected = condition.expected
8475

85-
actual = vector[
86-
condition.decision_point.name
87-
]
76+
actual = vector[condition.decision_point.name]
8877

89-
if (
90-
expected == ExpectedValue.TRUE
91-
and not actual
92-
):
78+
if expected == ExpectedValue.TRUE and not actual:
9379
return False
9480

95-
if (
96-
expected == ExpectedValue.FALSE
97-
and actual
98-
):
81+
if expected == ExpectedValue.FALSE and actual:
9982
return False
10083

10184
return True
@@ -109,14 +92,10 @@ def __init__(self, ruleset):
10992

11093
def evaluate(self, vector):
11194

112-
rules = (
113-
self.ruleset.rules
114-
.prefetch_related(
115-
"conditions",
116-
"decision",
117-
)
118-
.order_by("priority")
119-
)
95+
rules = self.ruleset.rules.prefetch_related(
96+
"conditions",
97+
"decision",
98+
).order_by("priority")
12099

121100
for rule in rules:
122101

@@ -130,7 +109,6 @@ def evaluate(self, vector):
130109

131110

132111
class EvaluationEngine:
133-
134112
"""
135113
Public entry point.
136114
@@ -142,33 +120,20 @@ class EvaluationEngine:
142120
)
143121
"""
144122

145-
def evaluate(
146-
self,
147-
product,
148-
rulesets,
149-
user=None,
150-
):
151-
152-
decision_point_evaluator = (
153-
DecisionPointEvaluator(
154-
product,
155-
user=user,
156-
)
123+
def evaluate(self, product, rulesets, user=None):
124+
125+
decision_point_evaluator = DecisionPointEvaluator(
126+
product,
127+
user=user,
157128
)
158129

159130
vector = {}
160131

161-
decision_points = (
162-
self.get_all_decision_points(
163-
rulesets
164-
)
165-
)
132+
decision_points = self.get_all_decision_points(rulesets)
166133

167134
for dp in decision_points:
168135

169-
vector[dp.name] = (
170-
decision_point_evaluator.evaluate(dp)
171-
)
136+
vector[dp.name] = decision_point_evaluator.evaluate(dp)
172137

173138
winning = None
174139

@@ -178,48 +143,29 @@ def evaluate(
178143
if not ruleset.enabled:
179144
continue
180145

181-
decision = (
182-
RulesetEvaluator(
183-
ruleset
184-
).evaluate(vector)
185-
)
146+
decision = RulesetEvaluator(ruleset).evaluate(vector)
186147

187-
if (
188-
winning is None
189-
or ruleset.precedence
190-
> winning_precedence
191-
):
148+
if winning is None or ruleset.precedence > winning_precedence:
192149
winning = decision
193-
winning_precedence = (
194-
ruleset.precedence
195-
)
150+
winning_precedence = ruleset.precedence
196151

197152
return EvaluationResult(
198153
decision=winning,
199154
decision_vector=vector,
200155
)
201156

202157
@staticmethod
203-
def get_all_decision_points(
204-
rulesets,
205-
):
158+
def get_all_decision_points(rulesets):
206159

207160
seen = {}
208161

209162
for ruleset in rulesets:
210163
if not ruleset.enabled:
211164
continue
212165

213-
for rule in (
214-
ruleset.rules
215-
.prefetch_related(
216-
"conditions__decision_point"
217-
)
218-
):
166+
for rule in ruleset.rules.prefetch_related("conditions__decision_point"):
219167

220-
for condition in (
221-
rule.conditions.all()
222-
):
168+
for condition in rule.conditions.all():
223169
dp = condition.decision_point
224170
if not dp.enabled:
225171
continue
@@ -231,23 +177,11 @@ def get_all_decision_points(
231177

232178
class EvaluationResult:
233179

234-
def __init__(
235-
self,
236-
decision,
237-
decision_vector,
238-
):
239-
180+
def __init__(self, decision, decision_vector):
240181
self.decision = decision
241-
242182
self.vector = decision_vector
243183

244184
def __repr__(self):
245-
246185
return (
247-
f"<EvaluationResult "
248-
f"decision={self.decision} "
249-
f"vector={self.vector}>"
186+
f"<EvaluationResult " f"decision={self.decision} " f"vector={self.vector}>"
250187
)
251-
252-
253-
# Have policies that are more related to real life examples

triage_rules/loader.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,11 @@ def _load_decisions(decisions_data, dataspace):
8585

8686
action = config.get("action")
8787
if action not in dict(TriageDecision.ACTION_CHOICES):
88-
raise PolicyLoadError(
89-
f"Decision '{name}' has invalid action '{action}'."
90-
)
88+
raise PolicyLoadError(f"Decision '{name}' has invalid action '{action}'.")
9189

9290
timeline_days = config.get("timeline_days")
9391
if timeline_days is None:
94-
raise PolicyLoadError(
95-
f"Decision '{name}' requires 'timeline_days'."
96-
)
92+
raise PolicyLoadError(f"Decision '{name}' requires 'timeline_days'.")
9793

9894
decision, _ = TriageDecision.objects.update_or_create(
9995
name=name,
@@ -253,9 +249,7 @@ def _load_rule(ruleset, rule_config, decisions, decision_points):
253249

254250
rule_name = rule_config.get("name")
255251
if not rule_name:
256-
raise PolicyLoadError(
257-
f"Each rule in ruleset '{ruleset.name}' requires 'name'."
258-
)
252+
raise PolicyLoadError(f"Each rule in ruleset '{ruleset.name}' requires 'name'.")
259253

260254
decision_name = rule_config.get("decision")
261255
decision = decisions.get(decision_name)
@@ -304,9 +298,7 @@ def _iter_conditions(conditions_data):
304298
raise PolicyLoadError(
305299
"List-style rule conditions require 'decision_point'."
306300
)
307-
items.append(
308-
(decision_point_name, condition.get("expected"))
309-
)
301+
items.append((decision_point_name, condition.get("expected")))
310302
return items
311303

312304
raise PolicyLoadError("Rule conditions must be a mapping or list.")

0 commit comments

Comments
 (0)