UserServiceForm.save()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
from django import forms
2
from django.forms import TextInput, PasswordInput
3
from django.utils.translation import ugettext_lazy as _
4
5
# trigger happy
6
from django_th.models import User, UserService, \
7
    ServicesActivated, TriggerService
8
9
10
class TriggerServiceForm(forms.ModelForm):
11
12
    """
13
        Form to edit the description
14
    """
15
    class Meta:
16
17
        """
18
            meta to add/override anything we need
19
        """
20
        model = TriggerService
21
        exclude = ['provider', 'consumer', 'user', 'date_triggered',
22
                   'date_created', 'status', 'result', 'date_result',
23
                   'consumer_failed', 'provider_failed', 'counter_ok',
24
                   'counter_ko']
25
        widgets = {
26
            'description': TextInput(attrs={'class': 'form-control'}),
27
        }
28
29
30
class UserServiceForm(forms.ModelForm):
31
32
    """
33
        Form to deal with my own activated service
34
    """
35
36
    def __init__(self, *args, **kwargs):
37
        super(UserServiceForm, self).__init__(*args, **kwargs)
38
        self.fields['token'] = forms.CharField(required=False)
39
        self.fields['name'].choices = activated_services(self.initial['user'])
40
        self.fields['name'].widget.attrs['class'] = 'form-control'
41
42
    def save(self, user=None):
43
        self.myobject = super(UserServiceForm, self).save(commit=False)
44
        self.myobject.user = user
45
        self.myobject.save()
46
47
    def clean(self):
48
        cleaned_data = super(UserServiceForm, self).clean()
49
        sa = ServicesActivated.objects.get(name=cleaned_data.get('name'))
50
        if sa.auth_required and sa.self_hosted:
51
            if cleaned_data.get('host') == '' or \
52
               cleaned_data.get('username') == '' or \
53
               cleaned_data.get('password') == '' or \
54
               cleaned_data.get('client_id') == '' or \
55
               cleaned_data.get('client_secret') == '':
56
                self.add_error(
57
                    'username', 'All the five fields are altogether mandatory')
58
            elif cleaned_data.get('host').endswith('/'):
59
                cleaned_data['host'] = cleaned_data['host'][:-1]
60
61
    class Meta:
62
63
        """
64
            meta to add/override anything we need
65
        """
66
        model = UserService
67
        exclude = ('user', 'counter_ok', 'counter_ko')
68
        widgets = {
69
            'host': TextInput(attrs={'class': 'form-control'}),
70
            'username': TextInput(attrs={'class': 'form-control'}),
71
            'password': PasswordInput(attrs={'class': 'form-control'}),
72
            'client_id': TextInput(attrs={'class': 'form-control'}),
73
            'client_secret': TextInput(attrs={'class': 'form-control'}),
74
            'token': TextInput(attrs={'class': 'form-control'}),
75
        }
76
77
78
class LoginForm(forms.ModelForm):
79
80
    """
81
        Form to manage the login page
82
    """
83
    class Meta:
84
        model = User
85
        widgets = {
86
            'username': TextInput(attrs={'placeholder': _('Username')}),
87
            'password': PasswordInput(attrs={'placeholder': _('Password')}),
88
        }
89
        exclude = ()
90
91
92
def activated_services(user):
93
    """
94
        get the activated services added from the administrator
95
    """
96
    all_datas = ()
97
    data = ()
98
    services = ServicesActivated.objects.filter(status=1)
99
    for class_name in services:
100
        # only display the services that are not already used
101
        if UserService.objects.filter(name__exact=class_name.name,
102
                                      user__exact=user):
103
            continue
104
        # 2nd array position contains the name of the service
105
        else:
106
            data = (class_name.name,
107
                    class_name.name.rsplit('Service', 1)[1])
108
            all_datas = (data,) + all_datas
109
    return all_datas
110