1from flex.datastructures import (
2    ValidationDict,
3)
4
5from .multiple_of import (
6    multiple_of_validator,
7    validate_type_for_multiple_of,
8)
9from .maximum import (
10    maximum_validator,
11    exclusive_maximum_validator,
12    validate_maximum_is_gte_minimum,
13    validate_maximum_required_if_exclusive_maximum_set,
14    validate_type_for_maximum,
15)
16from .minimum import (
17    minimum_validator,
18    exclusive_minimum_validator,
19    validate_minimum_required_if_exclusive_minimum_set,
20    validate_type_for_minimum,
21)
22from .min_length import (
23    min_length_validator,
24    validate_type_for_min_length,
25)
26from .max_length import (
27    max_length_validator,
28    validate_max_length_greater_than_or_equal_to_min_length,
29    validate_type_for_max_length,
30)
31from .pattern import (
32    pattern_validator,
33)
34from .min_items import (
35    min_items_validator,
36    validate_type_for_min_items,
37)
38from .max_items import (
39    max_items_validator,
40    validate_max_items_greater_than_or_equal_to_min_items,
41    validate_type_for_max_items,
42)
43from .unique_items import (
44    unique_items_validator,
45    validate_type_for_unique_items,
46)
47from .enum import (
48    enum_validator,
49)
50
51
52field_validators = ValidationDict()
53
54field_validators.add_property_validator('multipleOf', multiple_of_validator)
55field_validators.add_property_validator('minimum', minimum_validator)
56field_validators.add_property_validator('maximum', maximum_validator)
57field_validators.add_property_validator('exclusiveMinimum', exclusive_minimum_validator)
58field_validators.add_property_validator('exclusiveMaximum', exclusive_maximum_validator)
59field_validators.add_property_validator('minLength', min_length_validator)
60field_validators.add_property_validator('maxLength', max_length_validator)
61field_validators.add_property_validator('pattern', pattern_validator)
62field_validators.add_property_validator('minItems', min_items_validator)
63field_validators.add_property_validator('maxItems', max_items_validator)
64field_validators.add_property_validator('uniqueItems', unique_items_validator)
65field_validators.add_property_validator('enum', enum_validator)
66
67
68non_field_validators = ValidationDict()
69
70non_field_validators.add_validator(
71    'maximum', validate_maximum_is_gte_minimum,
72)
73non_field_validators.add_validator(
74    'maximum', validate_maximum_required_if_exclusive_maximum_set,
75)
76non_field_validators.add_validator(
77    'minimum', validate_minimum_required_if_exclusive_minimum_set,
78)
79non_field_validators.add_validator(
80    'maxLength', validate_max_length_greater_than_or_equal_to_min_length,
81)
82non_field_validators.add_validator(
83    'maxItems', validate_max_items_greater_than_or_equal_to_min_items,
84)
85
86
87type_validators = ValidationDict()
88type_validators.add_validator(
89    'type', validate_type_for_multiple_of,
90)
91type_validators.add_validator(
92    'type', validate_type_for_maximum,
93)
94type_validators.add_validator(
95    'type', validate_type_for_minimum,
96)
97type_validators.add_validator(
98    'type', validate_type_for_max_length,
99)
100type_validators.add_validator(
101    'type', validate_type_for_min_length,
102)
103type_validators.add_validator(
104    'type', validate_type_for_max_items,
105)
106type_validators.add_validator(
107    'type', validate_type_for_min_items,
108)
109type_validators.add_validator(
110    'type', validate_type_for_unique_items,
111)
112