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"])
Пример #3
0
 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"])
Пример #4
0
    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])