Coverage for src/dtexp/addition.py: 100%

1"""Handle addition to datetimes."""

2

3 import datetime

4

5 import pendulum

6

7

8 def apply_addition_via_pendulum(

9 dt: datetime.datetime,

10 years: int = 0,

11 months: int = 0,

12 weeks: int = 0,

13 days: int = 0,

14 hours: int = 0,

15 minutes: int = 0,

16 seconds: int = 0,

17 microseconds: int = 0,

18) -> datetime.datetime:

19 """Use pendulum to add (or substract) from datetime intelligently.

20

21 Using pendulum's add method provided human-expected results when

22 adding or substracting e.g. months or years.

23 """

24 pendulum_result = pendulum.instance(dt).add(

25 years=years,

26 months=months,

27 weeks=weeks,

28 days=days,

29 hours=hours,

30 minutes=minutes,

31 seconds=seconds,

32 microseconds=microseconds,

33 )

34

35 return datetime.datetime(

36 pendulum_result.year,

37 pendulum_result.month,

38 pendulum_result.day,

39 pendulum_result.hour,

40 pendulum_result.minute,

41 pendulum_result.second,

42 pendulum_result.microsecond,

43 tzinfo=dt.tzinfo, # re-attach original timezone info

44 )