1 import datetime
4 """
5 Activity and inactivity time schedule.
6
7 We Assume that the time axis consists of two types of periods: activity and
8 inactivity. Each time point belongs either to activity or inactivity
9 period.
10 """
11
13 """
14 @param now: current time, by default, it is the value of
15 L{datetime.datetime.now()}
16 @type now: L{datetime.datetime}
17 @return: activity information relative to C{now}
18 @rtype: L{ActivityInfo}
19 """
20 raise NotImplementedError()
21
23 - def __init__(self, is_in_activity_period, time_to_mode_change):
24 self.is_in_activity_period = is_in_activity_period
25 """C{True} iff we are in activity period"""
26
27 self.future_mode_change = time_to_mode_change
28 """Time (L{date.datetime}) of the closest future mode change
29 (i.e. change from the activity to inactivity period or
30 from inactivity to activity period). It can have C{None} value when
31 the mode will not change in the future."""
32
36
38
39 - def __init__(self, activity_start_time, activity_end_time):
40 """
41 @type activity_start_time: L{datetime.time}
42 @type activity_end_time: L{datetime.time}
43 """
44 self.__start = activity_start_time
45 self.__end = activity_end_time
46
48 """
49 Return current event interval (if C{now} lies in event interval) or
50 future closest event interval (if C{now} doesn't lie in event interval)
51
52 @param now: current time (L{datetime.datetime})
53 @return: (start, end), where both values are of type
54 L{date.datetime}.
55 """
56
57
58
59
60
61
62
63 today = now
64 tomorrow = today+datetime.timedelta(1)
65 yesterday = today-datetime.timedelta(1)
66
67 if self.__start < self.__end :
68 if ((today.time() < self.__start) or
69 (today.time() > self.__start and today.time() < self.__end)):
70 return (self.__get_datetime(today, self.__start),
71 self.__get_datetime(today, self.__end))
72 else:
73 return (self.__get_datetime(tomorrow, self.__start),
74 self.__get_datetime(tomorrow, self.__end))
75
76 else:
77 if ((today.time() > self.__end and today.time() < self.__start) or
78 today.time() > self.__start):
79 return (self.__get_datetime(today, self.__start),
80 self.__get_datetime(tomorrow, self.__end))
81 else:
82 return (self.__get_datetime(yesterday, self.__start),
83 self.__get_datetime(today, self.__end))
84
93
94 @staticmethod
96 return datetime.datetime(date.year, date.month, date.day,
97 time_.hour, time_.minute, time_.second, time_.microsecond)
98