def loadRules(fileTypeName, filename): """ Populate rule and multi_field_rule tables from rule rile Args: filename: File with rule specifications fileTypeName: Which type of file to load rules for """ validationDb = ValidatorValidationInterface() fileId = validationDb.getFileId(fileTypeName) with open(filename, 'rU') as ruleFile: reader = csv.DictReader(ruleFile) for record in reader: if(FieldCleaner.cleanString(record["is_single_field"]) == "true"): # Find column ID based on field name try: columnId = validationDb.getColumnId(FieldCleaner.cleanName(record["field_name"]),fileTypeName) except Exception as e: print("Failed on field " + FieldCleaner.cleanName(record["field_name"]) + " and file " + fileTypeName) raise e # Write to rule table if "rule_timing" in record and "rule_label" in record: validationDb.addRule(columnId,record["rule_type"],record["rule_text_one"],record["description"],record["rule_timing"],record["rule_label"]) else: validationDb.addRule(columnId,record["rule_type"],record["rule_text_one"],record["description"]) else: # Write to multi_field_rule table validationDb.addMultiFieldRule(fileId,record["rule_type"],record["rule_text_one"],record["rule_text_two"],record["description"])
def loadCrossRules(filename): """ Populate multifield rule table with cross file validation rules """ validationDb = ValidatorValidationInterface() with open(filename, 'rU') as ruleFile: reader = csv.DictReader(ruleFile) for record in reader: fileId = validationDb.getFileId(record["file"]) validationDb.addMultiFieldRule(fileId,record["rule_type"],record["rule_text_one"],record["rule_text_two"],record["description"],record["rule_label"],record["rule_timing"])
def loadCrossRules(filename): """ Populate multifield rule table with cross file validation rules """ validationDb = ValidatorValidationInterface() with open(filename, 'rU') as ruleFile: reader = csv.DictReader(ruleFile) for record in reader: fileId = validationDb.getFileId(record["file"]) validationDb.addMultiFieldRule(fileId, record["rule_type"], record["rule_text_one"], record["rule_text_two"], record["description"], record["rule_label"], record["rule_timing"])
def loadRules(fileTypeName, filename): """ Populate rule and multi_field_rule tables from rule rile Args: filename: File with rule specifications fileTypeName: Which type of file to load rules for """ validationDb = ValidatorValidationInterface() fileId = validationDb.getFileId(fileTypeName) with open(filename, 'rU') as ruleFile: reader = csv.DictReader(ruleFile) for record in reader: if (FieldCleaner.cleanString( record["is_single_field"]) == "true"): # Find column ID based on field name try: columnId = validationDb.getColumnId( FieldCleaner.cleanName(record["field_name"]), fileTypeName) except Exception as e: print("Failed on field " + FieldCleaner.cleanName(record["field_name"]) + " and file " + fileTypeName) raise e # Write to rule table if "rule_timing" in record and "rule_label" in record: validationDb.addRule(columnId, record["rule_type"], record["rule_text_one"], record["description"], record["rule_timing"], record["rule_label"]) else: validationDb.addRule(columnId, record["rule_type"], record["rule_text_one"], record["description"]) else: # Write to multi_field_rule table validationDb.addMultiFieldRule(fileId, record["rule_type"], record["rule_text_one"], record["rule_text_two"], record["description"])
def test_schema_rules(self): """Test schema rules.""" lessRule = RuleType() lessRule.name = "LESS" greaterRule = RuleType() greaterRule.name = "GREATER" lengthRule = RuleType() lengthRule.name = "LENGTH" equalRule = RuleType() equalRule.name = "EQUAL" notRule = RuleType() notRule.name = "NOT EQUAL" setRule = RuleType() setRule.name = "IN_SET" sumRule = RuleType() sumRule.name = "SUM" sumToValueRule = MultiFieldRuleType() sumToValueRule.name = "SUM_TO_VALUE" schema = self.schema interfaces = self.interfaces rule1 = Rule() rule1.rule_type = equalRule rule1.file_column = schema["test1"] rule1.rule_text_1 = "hello" rule1.rule_timing_id = 1 rule2 = Rule() rule2.rule_type = notRule rule2.file_column = schema["test1"] rule2.rule_text_1 = "bye" rule2.rule_timing_id = 1 rule3 = Rule() rule3.rule_type = lengthRule rule3.file_column = schema["test1"] rule3.rule_text_1 = "6" rule3.rule_timing_id = 1 rule4 = Rule() rule4.rule_type = equalRule rule4.file_column = schema["test3"] rule4.rule_text_1 = "YES" rule4.rule_timing_id = 1 rule5 = Rule() rule5.rule_type = equalRule rule5.file_column = schema["test4"] rule5.rule_text_1 = "44" rule5.rule_timing_id = 1 rule6 = Rule() rule6.rule_type = lessRule rule6.file_column = schema["test4"] rule6.rule_text_1 = "45" rule6.rule_timing_id = 1 rule7 = Rule() rule7.rule_type = greaterRule rule7.file_column = schema["test2"] rule7.rule_text_1 = ".5" rule7.rule_timing_id = 1 rule8 = Rule() rule8.rule_type = setRule rule8.file_column = schema["test6"] rule8.rule_text_1 = "X, F, A" rule8.rule_timing_id = 1 rule9 = Rule() rule9.rule_type = sumRule rule9.file_column = schema["test2"] rule9.rule_text_1 = "test7" rule9.rule_text_2 = "test2,test4,test5" rule9.rule_timing_id = 1 rule10 = MultiFieldRule() rule10.rule_type = sumToValueRule rule10.rule_text_1 = "46" rule10.rule_text_2 = "test2,test4,test5" rule10.rule_timing_id = 1 vvi = ValidatorValidationInterface() fileId = vvi.getFileId("award") vvi.addMultiFieldRule(fileId, "SUM_TO_VALUE", rule10.rule_text_1, rule10.rule_text_2, "Evaluates the sum of fields to a number") rules = [rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9] record = { "test1": "hello", "test2": "1.0", "test3": "YES", "test4": "44", "test5": "1", "test6": "X", "test7": "46" } self.assertTrue(Validator.validate( record, rules, schema, "award", self.interfaces)[0]) record = { "test1": "goodbye", "test2": ".4", "test3": "NO", "test4": "45", "test5": "1", "test6": "Q", "test7": "46.5" } self.assertFalse(Validator.validate( record, [rule3], schema, "award", interfaces)[0]) self.assertFalse(Validator.validate( record, [rule4], schema, "award", interfaces)[0]) self.assertFalse(Validator.validate( record, [rule5], schema, "award", interfaces)[0]) self.assertFalse(Validator.validate( record, [rule6], schema, "award", interfaces)[0]) self.assertFalse(Validator.validate( record, [rule7], schema, "award", interfaces)[0]) self.assertFalse(Validator.validate( record, [rule8], schema, "award", interfaces)[0]) self.assertFalse(Validator.validate( record, [rule9], schema, "award", interfaces)[0]) self.assertFalse(Validator.validate( record, rules, schema, "award", interfaces)[0])
def test_schema_rules(self): """Test schema rules.""" lessRule = RuleType() lessRule.name = "LESS" greaterRule = RuleType() greaterRule.name = "GREATER" lengthRule = RuleType() lengthRule.name = "LENGTH" equalRule = RuleType() equalRule.name = "EQUAL" notRule = RuleType() notRule.name = "NOT EQUAL" setRule = RuleType() setRule.name = "IN_SET" sumRule = RuleType() sumRule.name = "SUM" sumToValueRule = MultiFieldRuleType() sumToValueRule.name = "SUM_TO_VALUE" schema = self.schema interfaces = self.interfaces rule1 = Rule() rule1.rule_type = equalRule rule1.file_column = schema["test1"] rule1.rule_text_1 = "hello" rule1.rule_timing_id = 1 rule2 = Rule() rule2.rule_type = notRule rule2.file_column = schema["test1"] rule2.rule_text_1 = "bye" rule2.rule_timing_id = 1 rule3 = Rule() rule3.rule_type = lengthRule rule3.file_column = schema["test1"] rule3.rule_text_1 = "6" rule3.rule_timing_id = 1 rule4 = Rule() rule4.rule_type = equalRule rule4.file_column = schema["test3"] rule4.rule_text_1 = "YES" rule4.rule_timing_id = 1 rule5 = Rule() rule5.rule_type = equalRule rule5.file_column = schema["test4"] rule5.rule_text_1 = "44" rule5.rule_timing_id = 1 rule6 = Rule() rule6.rule_type = lessRule rule6.file_column = schema["test4"] rule6.rule_text_1 = "45" rule6.rule_timing_id = 1 rule7 = Rule() rule7.rule_type = greaterRule rule7.file_column = schema["test2"] rule7.rule_text_1 = ".5" rule7.rule_timing_id = 1 rule8 = Rule() rule8.rule_type = setRule rule8.file_column = schema["test6"] rule8.rule_text_1 = "X, F, A" rule8.rule_timing_id = 1 rule9 = Rule() rule9.rule_type = sumRule rule9.file_column = schema["test2"] rule9.rule_text_1 = "test7" rule9.rule_text_2 = "test2,test4,test5" rule9.rule_timing_id = 1 rule10 = MultiFieldRule() rule10.rule_type = sumToValueRule rule10.rule_text_1 = "46" rule10.rule_text_2 = "test2,test4,test5" rule10.rule_timing_id = 1 vvi = ValidatorValidationInterface() fileId = vvi.getFileId("award") vvi.addMultiFieldRule(fileId, "SUM_TO_VALUE", rule10.rule_text_1, rule10.rule_text_2, "Evaluates the sum of fields to a number") rules = [rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9] record = { "test1": "hello", "test2": "1.0", "test3": "YES", "test4": "44", "test5": "1", "test6": "X", "test7": "46" } self.assertTrue( Validator.validate(record, rules, schema, "award", self.interfaces)[0]) record = { "test1": "goodbye", "test2": ".4", "test3": "NO", "test4": "45", "test5": "1", "test6": "Q", "test7": "46.5" } self.assertFalse( Validator.validate(record, [rule3], schema, "award", interfaces)[0]) self.assertFalse( Validator.validate(record, [rule4], schema, "award", interfaces)[0]) self.assertFalse( Validator.validate(record, [rule5], schema, "award", interfaces)[0]) self.assertFalse( Validator.validate(record, [rule6], schema, "award", interfaces)[0]) self.assertFalse( Validator.validate(record, [rule7], schema, "award", interfaces)[0]) self.assertFalse( Validator.validate(record, [rule8], schema, "award", interfaces)[0]) self.assertFalse( Validator.validate(record, [rule9], schema, "award", interfaces)[0]) self.assertFalse( Validator.validate(record, rules, schema, "award", interfaces)[0])