Completed
Push — master ( 87da46...4a8668 )
by Fox
01:29
created

ServicePushbullet.__init__()   A

Complexity

Conditions 2

Size

Total Lines 13

Duplication

Lines 13
Ratio 100 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 2
c 2
b 0
f 0
dl 13
loc 13
rs 9.4285
1
# coding: utf-8
2
import arrow
3
# Pushbullet
4
from pushbullet import Pushbullet as Pushb
5
6
# django classes
7
from django.conf import settings
8
from django.utils.log import getLogger
9
from django.core.cache import caches
10
11
# django_th classes
12
from django_th.services.services import ServicesMgr
13
from th_pushbullet.models import Pushbullet
14
15
16
"""
17
    handle process with pushbullet
18
    put the following in settings.py
19
20
    TH_PUSHBULLET = {
21
        'client_id': 'abcdefghijklmnopqrstuvwxyz',
22
        'client_secret': 'abcdefghijklmnopqrstuvwxyz',
23
    }
24
    TH_SERVICES = (
25
        ...
26
        'th_pushbullet.my_pushbullet.ServicePushbullet',
27
        ...
28
    )
29
"""
30
31
logger = getLogger('django_th.trigger_happy')
32
33
cache = caches['th_pushbullet']
34
35
36
class ServicePushbullet(ServicesMgr):
37
38 View Code Duplication
    def __init__(self, token=None, **kwargs):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
39
        super(ServicePushbullet, self).__init__(token, **kwargs)
40
        self.AUTH_URL = 'https://pushbullet.com/authorize'
41
        self.ACC_TOKEN = 'https://pushbullet.com/access_token'
42
        self.REQ_TOKEN = 'https://api.pushbullet.com/oauth2/token'
43
        self.consumer_key = settings.TH_PUSHBULLET['client_id']
44
        self.consumer_secret = settings.TH_PUSHBULLET['client_secret']
45
        self.scope = 'everything'
46
        self.service = 'ServicePushbullet'
47
        self.oauth = 'oauth2'
48
        if token:
49
            self.token = token
50
            self.pushb = Pushb(token)
51
52
    def read_data(self, **kwargs):
53
        """
54
            get the data from the service
55
            as the pushbullet service does not have any date
56
            in its API linked to the note,
57
            add the triggered date to the dict data
58
            thus the service will be triggered when data will be found
59
60
            :param kwargs: contain keyword args : trigger_id at least
61
            :type kwargs: dict
62
63
            :rtype: list
64
        """
65
        trigger_id = kwargs.get('trigger_id')
66
        trigger = Pushbullet.objects.get(trigger_id=trigger_id)
67
        date_triggered = kwargs.get('date_triggered')
68
        data = list()
69
        pushes = self.pushb.get_pushes()
70
        for p in pushes:
71
            title = 'From Pushbullet'
72
            created = arrow.get(p.get('created'))
73
            if created > date_triggered and p.get('type') == trigger.type:
74
                title = title + ' Channel' if p.get('channel_iden') and \
75
                                              p.get('title') is None else title
76
                # if sender_email and receiver_email are the same ;
77
                # that means that "I" made a note or something
78
                # if sender_email is None, then "an API" does the post
79
                if p.get('sender_email') == p.get('receiver_email')\
80
                        or p.get('sender_email') is None:
81
                    body = p.get('body')
82
                    data.append({'title': title, 'content': body})
83
84
        cache.set('th_pushbullet_' + str(trigger_id), data)
85
        return data
86
87
    def save_data(self, trigger_id, **data):
88
        """
89
            let's save the data
90
            :param trigger_id: trigger ID from which to save data
91
            :param data: the data to check to be used and save
92
            :type trigger_id: int
93
            :type data:  dict
94
            :return: the status of the save statement
95
            :rtype: boolean
96
        """
97
        kwargs = {}
98
99
        title, content = super(ServicePushbullet, self).save_data(trigger_id,
100
                                                                  data,
101
                                                                  **kwargs)
102
103
        if self.token:
104
            trigger = Pushbullet.objects.get(trigger_id=trigger_id)
105
            if trigger.type == 'note':
106
                status = self.pushb.push_note(title=title, body=content)
107
            elif trigger.type == 'link':
108
                status = self.pushb.push_link(title=title, body=content,
109
                                              url=data.get('link'))
110
                sentence = str('pushbullet {} created').format(title)
111
                logger.debug(sentence)
112
            else:
113
                # no valid type of pushbullet specified
114
                logger.critical("no valid type of pushbullet specified")
115
                status = False
116
        else:
117
            logger.critical("no token or link provided for "
118
                            "trigger ID {} ".format(trigger_id))
119
            status = False
120
        return status
121