Completed
Push — master ( 67628d...df2d16 )
by Fox
01:28
created

update_result()   B

Complexity

Conditions 3

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
c 1
b 0
f 0
dl 0
loc 25
rs 8.8571
1
# coding: utf-8
2
3
from django.conf import settings
4
from django.contrib.auth.models import User
5
from django.db import models
6
from django.utils.timezone import now
7
from django.utils.translation import ugettext_lazy as _
8
9
from django_th.tools import warn_user_and_admin
10
11
12
class ServicesActivated(models.Model):
13
14
    """
15
        Services Activated from the admin
16
    """
17
    name = models.CharField(max_length=200, unique=True)
18
    status = models.BooleanField(default=False)
19
    auth_required = models.BooleanField(default=True)
20
    self_hosted = models.BooleanField(default=False)
21
    description = models.CharField(max_length=200)
22
23
    class Meta:
24
        verbose_name = 'Services'
25
        verbose_name_plural = 'Services'
26
27
    def show(self):
28
        """
29
30
        :return: string representing object
31
        """
32
        return "Service Activated %s %s %s %s" % (self.name, self.status,
33
                                                  self.auth_required,
34
                                                  self.description)
35
36
    def __str__(self):
37
        return self.name
38
39
40
class UserService(models.Model):
41
42
    """
43
        UserService a model to link service and user
44
    """
45
    user = models.ForeignKey(User)
46
    token = models.CharField(max_length=255, blank=True)
47
    name = models.ForeignKey(
48
        ServicesActivated, to_field='name', related_name='+')
49
    username = models.CharField(
50
        _('username'), max_length=255, default='', blank=True)
51
    password = models.CharField(
52
        _('password'), max_length=128, default='', blank=True)
53
    host = models.CharField(_('host'), max_length=255, default='', blank=True)
54
    client_id = models.CharField(
55
        _('client id'), max_length=255, default='', blank=True)
56
    client_secret = models.CharField(
57
        _('client secret'), max_length=255, default='', blank=True)
58
59
    def show(self):
60
        """
61
62
        :return: string representing object
63
        """
64
        return "User Service %s %s %s" % (self.user, self.token, self.name)
65
66
    def __str__(self):
67
        return self.name.name
68
69
70
class TriggerService(models.Model):
71
72
    """
73
        TriggerService
74
    """
75
    provider = models.ForeignKey(UserService, related_name='+', blank=True)
76
    consumer = models.ForeignKey(UserService, related_name='+', blank=True)
77
    description = models.CharField(max_length=200)
78
    user = models.ForeignKey(User)
79
    date_created = models.DateField(auto_now_add=True)
80
    date_triggered = models.DateTimeField(null=True)
81
    status = models.BooleanField(default=False)
82
    result = models.CharField(max_length=255, default='')
83
    date_result = models.DateTimeField(auto_now=True, null=True)
84
    provider_failed = models.IntegerField(db_index=True, default=0)
85
    consumer_failed = models.IntegerField(db_index=True, default=0)
86
87
    def show(self):
88
        """
89
90
        :return: string representing object
91
        """
92
        return "My Service %s - %s - %s - %s" % (self.user,
93
                                                 self.provider.name,
94
                                                 self.consumer.name,
95
                                                 self.description)
96
97
    def __str__(self):
98
        return "%s - %s - %s - %s" % (self.user,
99
                                      self.provider.name,
100
                                      self.consumer.name,
101
                                      self.description)
102
103
104
def update_result(trigger_id, msg, status):
105
    """
106
    :param trigger_id: trigger id
107
    :param msg: result msg
108
    :param status: status of the handling of the current trigger
109
    :return:
110
    """
111
    # if status is True, reset *_failed counter
112
    if status:
113
        TriggerService.objects.filter(id=trigger_id).update(result=msg,
114
                                                            date_result=now(),
115
                                                            provider_failed=0,
116
                                                            consumer_failed=0)
117
    # otherwise, add 1 to the consumer_failed
118
    else:
119
        service = TriggerService.objects.get(id=trigger_id)
120
        failed = service.consumer_failed + 1
121
        if failed > settings.DJANGO_TH.get('failed_tries', 5):
122
            TriggerService.objects.filter(id=trigger_id).\
123
                update(result=msg, date_result=now(), status=False)
124
        else:
125
            TriggerService.objects.filter(id=trigger_id).\
126
                update(result=msg, date_result=now(), consumer_failed=failed)
127
128
        warn_user_and_admin('consumer', service)
129