Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/isoduration/formatter/checking.py: 23%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

22 statements  

1from __future__ import annotations 

2 

3from typing import TYPE_CHECKING 

4 

5from isoduration.formatter.exceptions import DurationFormattingException 

6 

7if TYPE_CHECKING: # pragma: no cover 

8 from isoduration.types import DateDuration, Duration 

9 

10 

11def check_global_sign(duration: Duration) -> int: 

12 is_date_zero = ( 

13 duration.date.years == 0 

14 and duration.date.months == 0 

15 and duration.date.days == 0 

16 and duration.date.weeks == 0 

17 ) 

18 is_time_zero = ( 

19 duration.time.hours == 0 

20 and duration.time.minutes == 0 

21 and duration.time.seconds == 0 

22 ) 

23 

24 is_date_negative = ( 

25 duration.date.years <= 0 

26 and duration.date.months <= 0 

27 and duration.date.days <= 0 

28 and duration.date.weeks <= 0 

29 ) 

30 is_time_negative = ( 

31 duration.time.hours <= 0 

32 and duration.time.minutes <= 0 

33 and duration.time.seconds <= 0 

34 ) 

35 

36 if not is_date_zero and not is_time_zero: 

37 if is_date_negative and is_time_negative: 

38 return -1 

39 elif not is_date_zero: 

40 if is_date_negative: 

41 return -1 

42 elif not is_time_zero: 

43 if is_time_negative: 

44 return -1 

45 

46 return +1 

47 

48 

49def validate_date_duration(date_duration: DateDuration) -> None: 

50 if date_duration.weeks: 

51 if date_duration.years or date_duration.months or date_duration.days: 

52 raise DurationFormattingException( 

53 "Weeks are incompatible with other date designators" 

54 )