Completed
Push — master ( 7a99b7...e28ec8 )
by Fox
01:25
created

Read.provider()   A

Complexity

Conditions 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 9
rs 9.6666
1
# coding: utf-8
2
from __future__ import unicode_literals
3
from __future__ import absolute_import
4
5
# django
6
from django.utils.log import getLogger
7
8
# trigger happy
9
from django_th.services import default_provider
10
11
logger = getLogger('django_th.trigger_happy')
12
13
14
class Read(object):
15
    """
16
        Extracting the data from any service
17
    """
18
    def provider(self, service_provider, **kwargs):
19
        """
20
            get the data of the provider service
21
            :param service_provider:
22
            :param kwargs:
23
            :return:
24
        """
25
        getattr(service_provider, '__init__')(kwargs.get('token'))
26
        return getattr(service_provider, 'read_data')(**kwargs)
27
28
    def reading(self, service):
29
        """
30
           get the data from the service and put theme in cache
31
           :param service: service object to read
32
           :type service: object
33
        """
34
35
        # flag to know if we have to update
36
        to_update = False
37
        count_new_data = 0
38
        # counting the new data to store to display them in the log
39
        # provider - the service that offer data
40
        provider_token = service.provider.token
41
        default_provider.load_services()
42
        service_provider = default_provider.get_service(
43
            str(service.provider.name.name))
44
45
        # check if the service has already been triggered
46
        # if date_triggered is None, then it's the first run
47
        if service.date_triggered is None:
48
            logger.debug("first time {}".format(service))
49
            to_update = True
50
            # run run run
51
        else:
52
            # 1) get the data from the provider service
53
            # get a timestamp of the last triggered of the service
54
            kwargs = {'token': provider_token,
55
                      'trigger_id': service.id,
56
                      'date_triggered': service.date_triggered}
57
            data = self.provider(service_provider, **kwargs)
58
            # counting the new data to store to display them in the log
59
            count_new_data = len(data) if data else 0
60
            if count_new_data > 0:
61
                to_update = True
62
63
        if to_update:
64
            logger.info("{} - {} new data".format(service, count_new_data))
65