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

LeanderCS / flask-inputfilter / #419

02 Jul 2025 08:04PM UTC coverage: 94.487% (-1.3%) from 95.792%
#419

Pull #60

coveralls-python

LeanderCS
Move complex logic outside of base InputFilter class
Pull Request #60: Optimize

292 of 328 new or added lines in 108 files covered. (89.02%)

10 existing lines in 2 files now uncovered.

1868 of 1977 relevant lines covered (94.49%)

0.94 hits per line

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

94.12
/flask_inputfilter/validators/date_range_validator.py
1
from __future__ import annotations
1✔
2

3
from typing import TYPE_CHECKING, Any, Optional, Union
1✔
4

5
from flask_inputfilter.exceptions import ValidationError
1✔
6
from flask_inputfilter.helpers import parse_date
1✔
7
from flask_inputfilter.models import BaseValidator
1✔
8

9
if TYPE_CHECKING:
1✔
NEW
10
    from datetime import date, datetime
×
11

12

13
class DateRangeValidator(BaseValidator):
1✔
14
    """
15
    Checks if a date falls within a specified range.
16

17
    **Parameters:**
18

19
    - **min_date** (*Optional[Union[str, date, datetime]]*): The lower bound
20
      of the date range.
21
    - **max_date** (*Optional[Union[str, date, datetime]]*): The upper bound
22
      of the date range.
23
    - **error_message** (*Optional[str]*): Custom error message if the date
24
      is outside the range.
25

26
    **Expected Behavior:**
27

28
    Ensures the input date is not earlier than ``min_date`` and not later
29
    than ``max_date``. A ``ValidationError`` is raised if the check fails.
30

31
    **Example Usage:**
32

33
    .. code-block:: python
34

35
        class BookingInputFilter(InputFilter):
36
            def __init__(self):
37
                super().__init__()
38

39
                self.add('booking_date', validators=[
40
                    DateRangeValidator(
41
                        min_date="2023-01-01",
42
                        max_date="2023-01-31"
43
                    )
44
                ])
45
    """
46

47
    __slots__ = ("error_message", "max_date", "min_date")
1✔
48

49
    def __init__(
1✔
50
        self,
51
        min_date: Optional[Union[str, date, datetime]] = None,
52
        max_date: Optional[Union[str, date, datetime]] = None,
53
        error_message: Optional[str] = None,
54
    ) -> None:
55
        self.min_date = parse_date(min_date) if min_date else None
1✔
56
        self.max_date = parse_date(max_date) if max_date else None
1✔
57
        self.error_message = error_message
1✔
58

59
    def validate(self, value: Any) -> None:
1✔
60
        value_date = parse_date(value)
1✔
61

62
        if (self.min_date and value_date < self.min_date) or (
1✔
63
            self.max_date and value_date > self.max_date
64
        ):
65
            raise ValidationError(
1✔
66
                self.error_message
67
                or f"Date '{value}' is not in the range from "
68
                f"'{self.min_date}' to '{self.max_date}'."
69
            )
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