@@ -170,7 +170,7 @@ class VerticalValidator:
170
170
171
171
def __init__ (self , definitions : dict , validator : ExcelValidator ) -> None :
172
172
""" The validator constructor. """
173
- self .controls_keys : list [str ] = ['CONTROL (DMSO)' , 'CONTROL (WATER )' ]
173
+ self .controls_keys : list [str ] = ['CONTROL (DMSO)' , 'CONTROL (Water )' ]
174
174
self .validator : ExcelValidator = validator
175
175
self .timepoints : list = definitions ['timepoints' ]
176
176
self .replicates : int = definitions ['replicates' ]
@@ -263,6 +263,10 @@ def validate(self) -> None:
263
263
if compound_name == 'EXTRACTION BLANK' :
264
264
break
265
265
266
+ if compound_name in self .controls_keys :
267
+ self .validate_controls (compound_val )
268
+ break
269
+
266
270
for timepoint in compound_val ['replicates' ]:
267
271
if timepoint in self .timepoints :
268
272
replicate : int = compound_val ['replicates' ][timepoint ]
@@ -283,3 +287,27 @@ def validate(self) -> None:
283
287
elif timepoint < len (self .timepoints ):
284
288
message = f"Timepoint { replicate } is missing { len (self .timepoints ) - timepoint } replicate(s)."
285
289
self .validator .add_error (compound_name , message , 'replicates' )
290
+
291
+ def validate_controls (self , compound_values : dict ) -> None :
292
+ """ Validates the controls points against the general information. Verify the number of replicates and
293
+ timepoints.
294
+
295
+ :param compound_values: The compound values to validate.
296
+ """
297
+ message : str
298
+ for timepoint , replicate in compound_values ['replicates' ].items ():
299
+ if replicate < self .controls :
300
+ message = f"Control at timepoint { timepoint } is missing { self .controls - replicate } replicate(s)."
301
+ self .validator .add_error ('Control' , message , 'replicates' )
302
+ elif replicate > self .controls :
303
+ message = f"Control at timepoint { timepoint } has too many replicates ({ replicate } )."
304
+ self .validator .add_error ('Control' , message , 'replicates' )
305
+
306
+ for replicate , timepoint in compound_values ['timepoints' ].items ():
307
+ if timepoint > len (self .timepoints ):
308
+ message = f"Timepoint { replicate } has greater number of controls { timepoint } " \
309
+ f"than expected ({ self .controls } )."
310
+ self .validator .add_error ('Control' , message , 'timepoints' )
311
+ elif timepoint < len (self .timepoints ):
312
+ message = f"Timepoint { replicate } is missing { len (self .timepoints ) - timepoint } control(s)."
313
+ self .validator .add_error ('Control' , message , 'timepoints' )
0 commit comments