def test_conflicting_dict_name_fails(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, { "field1": "testfield", "field2": 5 }], ], "list_of_values_2": { "1": "test1", "2": 501, "3": ["test2", 1, 2, 55] }, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() schema["list_of_values"]["name"] = "hello" v = Validator(schema) with pytest.raises(AttributeError): v.normalized_as_object(document) v.normalized_as_dict(document, allow_name_conflicts=True)
def test_extended_dict_validation_works(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, { "field1": "testfield", "field2": 5 }], ], "list_of_values_2": { "1": "test1", "2": 501, "3": ["test2", 1, 2, 55] }, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() v = Validator(schema) o = v.normalized_as_object(document, callable_numbers=False) p = v.normalized_as_object(document, callable_numbers=True) assert o.list_of_values_2["3"].second_int == 1 assert p.list_of_values_2._3.second_int == 1 assert o.first_val[2][3].field01231 == "testfield" assert p.first_val._2._3.field01231 == "testfield" assert o.first_val[2][3].field2 == 5 assert p.first_val._2._3.field2 == 5 assert o.hello[1] == 600 assert p.hello._1 == 600
def test_extended_dict_validation_works(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, { "field1": "testfield", "field2": 5 }], ], "list_of_values_2": { "1": "test1", "2": 501, "3": ["test2", 1, 2, 55] }, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() dict_schema = deepcopy(schema) v = Validator(dict_schema) assert v.normalized_as_dict(document) == { "first_val": { 0: "test1", 1: 600, 2: { 0: "test3", 1: 1, "hi": 2, 3: { "field01231": "testfield", "field2": 5 } }, }, "list_of_values_2": { "1": "test1", "2": 501, "3": { 0: "test2", "second_int": 1, 2: 2, 3: 55 }, }, "hello": { 0: "test10", 1: 600, 2: "test11" }, } assert v.errors == {}
def test_extended_dict_validation_too_many_fields_raise(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, {"field1": "testfield", "field2": 5}], ], "list_of_values_2": {"1": "test1", "2": 501, "3": ["test2", 1, 2, 55, "hello"]}, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() v = Validator(schema, allow_list_missing=True) assert v.validate(document) is False assert v.errors == {"list_of_values_2": [{"3": [{4: ["unknown field"]}]}]}
def test_extended_dict_validation_list_len_works(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, {"field1": "testfield", "field2": 5}], ], "list_of_values_2": {"1": "test1", "2": 501, "3": ["test2", 1, 2]}, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() v = Validator(schema, allow_list_missing=True) assert v.validate(document) is True assert v.errors == {}
def test_extended_dict_validation_works_no_schema_init(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, {"field1": "testfield", "field2": 5}], ], "list_of_values_2": {"1": "test1", "2": 501, "3": ["test2", 1, 2, 55]}, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() v = Validator() print(v.errors) assert v.validate(document, schema) is True assert v.errors == {}
def test_extended_dict_validation_list_len_breaks(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, {"field1": "testfield", "field2": 5}], ], "list_of_values_2": {"1": "test1", "2": 501, "3": ["test2", 1, 2]}, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() v = Validator(schema) assert v.validate(document) is False assert v.errors == { "list_of_values_2": [{"3": ["length of list should be 4, it is 3"]}] }
def test_extended_dict_validation_min_number_not_compliant(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, {"field1": "testfield", "field2": 5}], ], "list_of_values_2": {"1": "test1", "2": 499, "3": ["test2", 1, 2, 55, "hello"]}, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() v = Validator(schema) assert v.validate(document) is False assert v.errors == { "list_of_values_2": [ {"2": ["min value is 500"], "3": ["length of list should be 4, it is 5"]} ] }
def test_normalization_rules_work(): document = { "list_of_values": [ "test1", 600, [ None, "1", 2, { "field1": "testfield", "field2": 5, "field3": "purge_me" } ], ], "list_of_values_2": { "1": "test1", "2": 501, "3": ["test2", 1, 2, 55] }, "list_of_values_3": ["test10", 600, "test11"], } expected_document = { "list_of_values": [ "test1", 600, ["test_default", 1, 2, { "field1": "testfield", "field2": 5 }], ], "list_of_values_2": { "1": "test1", "2": 501, "3": ["test2", 1, 2, 55] }, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() v = Validator(schema, purge_unknown=True) assert v.normalized(document) == expected_document assert v.errors == {}
def test_extended_dict_validation_works(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, { "field1": "testfield", "field2": 5 }], ], "list_of_values_2": { "1": "test1", "2": 501, "3": ["test2", 1, 2, 55] }, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() v = Validator(schema) assert v.normalized(document) == document assert v.errors == {}
def test_conflicting_dict_name_fails(): document = { "list_of_values": [ "test1", 600, ["test3", 1, 2, { "field1": "testfield", "field2": 5 }], ], "list_of_values_2": { "1": "test1", "2": 501, "3": ["test2", 1, 2, 55] }, "list_of_values_3": ["test10", 600, "test11"], } schema = get_extended_dict_schema() dict_schema = deepcopy(schema) dict_schema["list_of_values"]["name"] = "hello" v = Validator(dict_schema) with pytest.raises(AttributeError): v.normalized_as_dict(document) try: assert v.normalized_as_dict(document, allow_name_conflicts=True) == { "list_of_values_2": { "1": "test1", "2": 501, "3": { 0: "test2", "second_int": 1, 2: 2, 3: 55 }, }, "hello": { 0: "test10", 1: 600, 2: "test11" }, } except AssertionError: if sys.version_info[0] == 3 and sys.version_info[1] < 6: # Workaround for earlier versions of python 3 not having sortable dicts assert v.normalized_as_dict(document, allow_name_conflicts=True) == { "list_of_values_2": { "1": "test1", "2": 501, "3": { 0: "test2", "second_int": 1, 2: 2, 3: 55 }, }, "hello": { 0: "test1", 1: 600, 2: { 0: "test3", 1: 1, "hi": 2, 3: { "field01231": "testfield", "field2": 5 }, }, }, } else: raise assert v.errors == {}