helpers.taskschedule   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 29
dl 0
loc 40
rs 10
c 0
b 0
f 0
wmc 12

4 Methods

Rating   Name   Duplication   Size   Complexity  
A TaskSchedule.__init__() 0 7 1
A TaskSchedule.kick_it_off() 0 4 2
B TaskSchedule.is_time_to_run() 0 18 8
A TaskSchedule.is_disabled() 0 2 1
1
2
import datetime
3
4
class TaskSchedule(object):
5
6
    def __init__(self, run_on_init=False):
7
        self.lastrun = None
8
        self.start = None
9
        self.pending_run = run_on_init
10
    #default to 0 seconds means disabled
11
    #interval is in seconds
12
        self.interval = 0
13
14
    def is_disabled(self):
15
        return self.interval <= 0
16
17
    def is_time_to_run(self):
18
        if self.is_disabled():
19
            return False
20
        now = datetime.datetime.now()
21
        if self.pending_run:
22
            self.pending_run = False
23
            return self.kick_it_off(True)
24
        if self.lastrun is None and self.start is None:
25
            #never run before, run now
26
            return self.kick_it_off(True)
27
        elif self.start is not None and self.lastrun is None:
28
            #never run before and after start time
29
            return self.kick_it_off(now >= self.start)
30
        else:
31
            sincelast = now - self.lastrun
32
            if sincelast.total_seconds() >= self.interval:
33
                return self.kick_it_off(True)
34
        return False
35
36
    def kick_it_off(self, dorun=False):
37
        if dorun:
38
            self.lastrun = datetime.datetime.now()
39
        return dorun
40