• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

patrickboateng / func-validator / 18208668759

02 Oct 2025 11:51PM UTC coverage: 98.714% (-0.4%) from 99.116%
18208668759

push

github

patrickboateng
refactored code

32 of 33 branches covered (96.97%)

Branch coverage included in aggregate %.

39 of 41 new or added lines in 4 files covered. (95.12%)

1 existing line in 1 file now uncovered.

659 of 667 relevant lines covered (98.8%)

1.98 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.55
/func_validator/validators/__init__.py
1
import enum
2✔
2

3
from mkdocs.config.config_options import Optional
2✔
4

5
from .collection_arg_validators import (
2✔
6
    MustBeEmpty,
7
    MustBeMemberOf,
8
    MustBeNonEmpty,
9
    MustHaveLengthBetween,
10
    MustHaveLengthEqual,
11
    MustHaveLengthGreaterThan,
12
    MustHaveLengthGreaterThanOrEqual,
13
    MustHaveLengthLessThan,
14
    MustHaveLengthLessThanOrEqual,
15
    MustHaveValuesBetween,
16
    MustHaveValuesGreaterThan,
17
    MustHaveValuesGreaterThanOrEqual,
18
    MustHaveValuesLessThan,
19
    MustHaveValuesLessThanOrEqual,
20
)
21
from .datatype_arg_validators import MustBeA
2✔
22
from .numeric_arg_validators import (
2✔
23
    MustBeBetween,
24
    MustBeEqual,
25
    MustNotBeEqual,
26
    MustBeAlmostEqual,
27
    MustBeGreaterThan,
28
    MustBeGreaterThanOrEqual,
29
    MustBeLessThan,
30
    MustBeLessThanOrEqual,
31
    MustBeNegative,
32
    MustBeNonNegative,
33
    MustBeNonPositive,
34
    MustBePositive,
35
)
36
from .text_arg_validators import MustMatchRegex
2✔
37
from ._core import ValidationError, validator
2✔
38

39
__all__ = [
2✔
40
    # Error
41
    "ValidationError",
42
    # Collection Validators
43
    "MustBeMemberOf",
44
    "MustBeEmpty",
45
    "MustBeNonEmpty",
46
    "MustHaveLengthEqual",
47
    "MustHaveLengthGreaterThan",
48
    "MustHaveLengthGreaterThanOrEqual",
49
    "MustHaveLengthLessThan",
50
    "MustHaveLengthLessThanOrEqual",
51
    "MustHaveLengthBetween",
52
    "MustHaveValuesGreaterThan",
53
    "MustHaveValuesGreaterThanOrEqual",
54
    "MustHaveValuesLessThan",
55
    "MustHaveValuesLessThanOrEqual",
56
    "MustHaveValuesBetween",
57
    # DataType Validators
58
    "MustBeA",
59
    # Numeric Validators
60
    "MustBeBetween",
61
    "MustBeEqual",
62
    "MustNotBeEqual",
63
    "MustBeAlmostEqual",
64
    "MustBeGreaterThan",
65
    "MustBeGreaterThanOrEqual",
66
    "MustBeLessThan",
67
    "MustBeLessThanOrEqual",
68
    "MustBeNegative",
69
    "MustBeNonNegative",
70
    "MustBeNonPositive",
71
    "MustBePositive",
72
    # Text Validators
73
    "MustMatchRegex",
74
    # Core
75
    "DependsOn",
76
    "validator",
77
]
78

79

80
class Strategy(enum.StrEnum):
2✔
81
    MUST_NOT_BE_EMPTY = "must_not_be_empty"
2✔
82

83

84
class DependsOn:
2✔
85
    """Class to indicate that a function argument depends on another
86
    argument.
87

88
    When an argument is marked as depending on another, it implies that
89
    the presence or value of one argument may influence the validation
90
    or necessity of the other.
91
    """
92

93
    def __init__(self, strategy=Strategy.MUST_NOT_BE_EMPTY, **kwargs):
2✔
94
        self.strategy = strategy
2✔
95
        self.dependencies = kwargs.items()
2✔
96
        self.arguments: Optional[dict] = None
2✔
97

98
    def __call__(self, arg_val, arg_name: str):
2✔
99
        for dep_arg_name, dep_arg_val in self.dependencies:
2✔
100
            type_checker = MustBeA(dict)
2✔
101
            type_checker(self.arguments, "self.arguments")
2✔
102
            actual_dep_arg_val = self.arguments[dep_arg_name]
2✔
103
            if actual_dep_arg_val == dep_arg_val:
2✔
104
                if callable(self.strategy):
2✔
NEW
105
                    self.strategy(arg_val, arg_name)
×
106
                else:
107
                    if self.strategy == Strategy.MUST_NOT_BE_EMPTY:
2✔
108
                        MustBeNonEmpty(arg_val, arg_name)
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc