1313@dataclass
1414class CheckResult :
1515 passed : bool
16- severity : str # "block" | "warn" | "log"
1716 message : str
1817
1918
@@ -45,10 +44,9 @@ def check_ast(self, ast: exp.Expression, contract: DataContract) -> CheckResult:
4544 if disallowed :
4645 return CheckResult (
4746 passed = False ,
48- severity = "block" ,
4947 message = f"Tables not in allowlist: { ', ' .join (sorted (disallowed ))} " ,
5048 )
51- return CheckResult (passed = True , severity = "block" , message = "" )
49+ return CheckResult (passed = True , message = "" )
5250
5351
5452class OperationBlocklistChecker :
@@ -68,7 +66,6 @@ def check_ast(self, ast: exp.Expression, contract: DataContract) -> CheckResult:
6866 if isinstance (ast , expr_type ) and op_name in forbidden :
6967 return CheckResult (
7068 passed = False ,
71- severity = "block" ,
7269 message = f"Forbidden operation: { op_name } " ,
7370 )
7471
@@ -82,11 +79,10 @@ def check_ast(self, ast: exp.Expression, contract: DataContract) -> CheckResult:
8279 ):
8380 return CheckResult (
8481 passed = False ,
85- severity = "block" ,
8682 message = "Forbidden operation: TRUNCATE" ,
8783 )
8884
89- return CheckResult (passed = True , severity = "block" , message = "" )
85+ return CheckResult (passed = True , message = "" )
9086
9187
9288class NoSelectStarChecker :
@@ -96,10 +92,9 @@ def check_ast(self, ast: exp.Expression) -> CheckResult:
9692 if any (ast .find_all (exp .Star )):
9793 return CheckResult (
9894 passed = False ,
99- severity = "block" ,
10095 message = "SELECT * is not allowed — specify explicit columns" ,
10196 )
102- return CheckResult (passed = True , severity = "block" , message = "" )
97+ return CheckResult (passed = True , message = "" )
10398
10499
105100class RequiredFilterChecker :
@@ -117,10 +112,9 @@ def check_ast(self, ast: exp.Expression) -> CheckResult:
117112 if self .column .lower () not in where_columns :
118113 return CheckResult (
119114 passed = False ,
120- severity = "block" ,
121115 message = f"Missing required filter: { self .column } " ,
122116 )
123- return CheckResult (passed = True , severity = "block" , message = "" )
117+ return CheckResult (passed = True , message = "" )
124118
125119
126120class BlockedColumnsChecker :
@@ -138,7 +132,6 @@ def check_ast(self, ast: exp.Expression) -> CheckResult:
138132 if any (ast .find_all (exp .Star )):
139133 return CheckResult (
140134 passed = False ,
141- severity = "block" ,
142135 message = (
143136 "SELECT * may expose blocked columns: "
144137 f"{ ', ' .join (sorted (self .blocked ))} "
@@ -155,10 +148,9 @@ def check_ast(self, ast: exp.Expression) -> CheckResult:
155148 if found :
156149 return CheckResult (
157150 passed = False ,
158- severity = "block" ,
159151 message = f"Blocked columns in SELECT: { ', ' .join (sorted (found ))} " ,
160152 )
161- return CheckResult (passed = True , severity = "block" , message = "" )
153+ return CheckResult (passed = True , message = "" )
162154
163155
164156class RequireLimitChecker :
@@ -168,10 +160,9 @@ def check_ast(self, ast: exp.Expression) -> CheckResult:
168160 if not list (ast .find_all (exp .Limit )):
169161 return CheckResult (
170162 passed = False ,
171- severity = "block" ,
172163 message = "Query must include a LIMIT clause" ,
173164 )
174- return CheckResult (passed = True , severity = "block" , message = "" )
165+ return CheckResult (passed = True , message = "" )
175166
176167
177168class MaxJoinsChecker :
@@ -185,12 +176,11 @@ def check_ast(self, ast: exp.Expression) -> CheckResult:
185176 if join_count > self .max_joins :
186177 return CheckResult (
187178 passed = False ,
188- severity = "block" ,
189179 message = (
190180 f"Query has { join_count } JOINs, exceeds maximum of { self .max_joins } "
191181 ),
192182 )
193- return CheckResult (passed = True , severity = "block" , message = "" )
183+ return CheckResult (passed = True , message = "" )
194184
195185
196186class ResultCheckRunner :
@@ -219,7 +209,6 @@ def check_results(self, columns: list[str], rows: list[tuple]) -> CheckResult:
219209 if self .min_rows is not None and row_count < self .min_rows :
220210 return CheckResult (
221211 passed = False ,
222- severity = "block" ,
223212 message = (
224213 f"Rule '{ self .rule_name } ': query returned { row_count } rows, "
225214 f"minimum is { self .min_rows } "
@@ -228,7 +217,6 @@ def check_results(self, columns: list[str], rows: list[tuple]) -> CheckResult:
228217 if self .max_rows is not None and row_count > self .max_rows :
229218 return CheckResult (
230219 passed = False ,
231- severity = "block" ,
232220 message = (
233221 f"Rule '{ self .rule_name } ': query returned { row_count } rows, "
234222 f"maximum is { self .max_rows } "
@@ -239,15 +227,14 @@ def check_results(self, columns: list[str], rows: list[tuple]) -> CheckResult:
239227 col_lower = {c .lower (): i for i , c in enumerate (columns )}
240228 idx = col_lower .get (self .column .lower ())
241229 if idx is None :
242- return CheckResult (passed = True , severity = "block" , message = "" )
230+ return CheckResult (passed = True , message = "" )
243231
244232 values = [row [idx ] for row in rows ]
245233
246234 if self .not_null and any (v is None for v in values ):
247235 null_count = sum (1 for v in values if v is None )
248236 return CheckResult (
249237 passed = False ,
250- severity = "block" ,
251238 message = (
252239 f"Rule '{ self .rule_name } ': column '{ self .column } ' "
253240 f"contains { null_count } null values"
@@ -265,7 +252,6 @@ def check_results(self, columns: list[str], rows: list[tuple]) -> CheckResult:
265252 if actual_min < self .min_value :
266253 return CheckResult (
267254 passed = False ,
268- severity = "block" ,
269255 message = (
270256 f"Rule '{ self .rule_name } ': column '{ self .column } ' "
271257 f"min value { actual_min } "
@@ -277,11 +263,10 @@ def check_results(self, columns: list[str], rows: list[tuple]) -> CheckResult:
277263 if actual_max > self .max_value :
278264 return CheckResult (
279265 passed = False ,
280- severity = "block" ,
281266 message = (
282267 f"Rule '{ self .rule_name } ': column '{ self .column } ' "
283268 f"max value { actual_max } exceeds limit { self .max_value } "
284269 ),
285270 )
286271
287- return CheckResult (passed = True , severity = "block" , message = "" )
272+ return CheckResult (passed = True , message = "" )
0 commit comments