Passed
Push — develop ( 9e1b8b...5d0b21 )
by Dean
03:00
created

SyncIntervalHandler   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Test Coverage

Coverage 17.39%

Importance

Changes 0
Metric Value
wmc 8
c 0
b 0
f 0
dl 0
loc 44
ccs 4
cts 23
cp 0.1739
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A run() 0 20 4
A check() 0 20 4
1 1
from plugin.models import SyncResult
2 1
from plugin.modules.scheduler.handlers.core.base import Handler
3 1
from plugin.preferences.options import SyncIntervalOption
4 1
from plugin.sync.core.enums import SyncMode
5 1
from plugin.sync.core.exceptions import QueueError
6 1
from plugin.sync.main import Sync
7
8 1
from datetime import datetime
9 1
import logging
10
11 1
log = logging.getLogger(__name__)
12
13
14 1
class SyncIntervalHandler(Handler):
15 1
    key = 'sync.interval'
16
17 1
    def check(self, job):
18
        last_result = SyncIntervalOption.get_last_result(job.account, SyncMode.Full)
19
20
        if last_result is None or last_result.started_at <= job.due_at:
21
            return True
22
23
        # Re-schedule job
24
        job.due_at = job.next_at(last_result.started_at)
25
26
        log.debug('Job re-scheduled to %r', job.due_at)
27
28
        # Check if a trigger is required
29
        if job.due_at <= datetime.utcnow():
30
            return True
31
32
        # Trigger ignored, update job
33
        job.save()
34
35
        log.debug('Ignoring scheduled sync interval (already triggered)')
36
        return False
37
38 1
    def run(self, job):
39
        # Ensure sync hasn't already been triggered
40
        if not self.check(job):
41
            return False
42
43
        try:
44
            # Queue sync
45
            Sync.queue(
46
                account=job.account,
47
                mode=SyncMode.Full,
48
49
                priority=100,
50
                trigger=SyncResult.Trigger.Schedule
51
            )
52
        except QueueError, ex:
53
            log.info('Queue error: %s', ex)
54
        except Exception, ex:
55
            log.error('Unable to queue sync: %s', ex, exc_info=True)
56
57
        return True
58