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

LeanderCS / flask-inputfilter / #377

28 Apr 2025 08:31AM UTC coverage: 96.411% (-0.2%) from 96.568%
#377

push

coveralls-python

LeanderCS
Added testing for correct error message

5 of 5 new or added lines in 3 files covered. (100.0%)

4 existing lines in 2 files now uncovered.

1800 of 1867 relevant lines covered (96.41%)

0.96 hits per line

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

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

3
from datetime import date, datetime
1✔
4
from typing import Any, Optional, Union
1✔
5

6
from flask_inputfilter.exceptions import ValidationError
1✔
7
from flask_inputfilter.validators import BaseValidator
1✔
8

9

10
class DateRangeValidator(BaseValidator):
1✔
11
    """
12
    Validator that checks if a date is within a specific range.
13
    """
14

15
    __slots__ = ("min_date", "max_date", "error_message")
1✔
16

17
    def __init__(
1✔
18
        self,
19
        min_date: Optional[Union[str, date, datetime]] = None,
20
        max_date: Optional[Union[str, date, datetime]] = None,
21
        error_message: Optional[str] = None,
22
    ) -> None:
23
        self.min_date = min_date
1✔
24
        self.max_date = max_date
1✔
25
        self.error_message = error_message
1✔
26

27
    def validate(self, value: Any) -> None:
1✔
28
        value_date = self.__parse_date(value)
1✔
29
        min_date = self.__parse_date(self.min_date) if self.min_date else None
1✔
30
        max_date = self.__parse_date(self.max_date) if self.max_date else None
1✔
31

32
        if (min_date and value_date < min_date) or (
1✔
33
            max_date and value_date > max_date
34
        ):
35
            raise ValidationError(
1✔
36
                self.error_message
37
                or f"Date '{value}' is not in the range from "
38
                f"'{self.min_date}' to '{self.max_date}'."
39
            )
40

41
    @staticmethod
1✔
42
    def __parse_date(value: Any) -> datetime:
43
        """
44
        Converts a value to a datetime object.
45
        Supports ISO 8601 formatted strings and datetime objects.
46
        """
47

48
        if isinstance(value, datetime):
1✔
49
            return value
1✔
50

51
        elif isinstance(value, str):
1✔
52
            try:
1✔
53
                return datetime.fromisoformat(value)
1✔
54

UNCOV
55
            except ValueError:
×
UNCOV
56
                raise ValidationError(f"Invalid ISO 8601 format '{value}'.")
×
57

58
        elif isinstance(value, date):
1✔
59
            return datetime.combine(value, datetime.min.time())
1✔
60

UNCOV
61
        raise ValidationError(
×
62
            f"Unsupported type for past date validation '{type(value)}'."
63
        )
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

© 2026 Coveralls, Inc