1from flex.error_messages import MESSAGES
2from flex.exceptions import ValidationError
3from flex.constants import (
4    ARRAY,
5    INTEGER,
6)
7from flex.utils import pluralize
8from flex.validation.common import (
9    generate_object_validator,
10)
11from flex.validation.schema import (
12    construct_schema_validators,
13)
14from flex.decorators import (
15    pull_keys_from_obj,
16    suffix_reserved_words,
17    skip_if_any_kwargs_empty,
18)
19
20
21@pull_keys_from_obj('type', 'minItems')
22@suffix_reserved_words
23@skip_if_any_kwargs_empty('type_', 'minItems')
24def validate_type_for_min_items(type_, minItems, **kwargs):
25    types = pluralize(type_)
26
27    if not set(types).intersection((ARRAY,)):
28        raise ValidationError(
29            MESSAGES['type']['invalid_type_for_min_items'],
30        )
31
32
33min_items_schema = {
34    'type': INTEGER,
35    'minimum': 0,
36}
37min_items_validators = construct_schema_validators(min_items_schema, {})
38
39min_items_validator = generate_object_validator(
40    field_validators=min_items_validators,
41)
42