• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

chiefonboarding / ChiefOnboarding / 6699130485

30 Oct 2023 09:51PM UTC coverage: 93.66% (+0.09%) from 93.566%
6699130485

push

github

web-flow
Manual access logging and revoke access (#381)

6086 of 6498 relevant lines covered (93.66%)

0.94 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.85
back/admin/integrations/serializers.py
1
from django.core.exceptions import ValidationError
1✔
2
from rest_framework import serializers
1✔
3

4
from django_q.models import validate_cron
1✔
5

6

7
# Credit: https://stackoverflow.com/a/42432240
8
class ValidateMixin:
1✔
9
    def validate(self, data):
1✔
10
        if hasattr(self, "initial_data"):
1✔
11
            unknown_keys = set(self.initial_data.keys()) - set(self.fields.keys())
1✔
12
            if unknown_keys:
1✔
13
                raise ValidationError("Got unknown fields: {}".format(unknown_keys))
×
14
        return data
1✔
15

16

17
class ManifestFormSerializer(ValidateMixin, serializers.Serializer):
1✔
18
    id = serializers.CharField()
1✔
19
    url = serializers.CharField(required=False)
1✔
20
    name = serializers.CharField()
1✔
21
    type = serializers.ChoiceField(
1✔
22
        [
23
            ("multiple_choice", "Multiple choice"),
24
            ("choice", "Choice"),
25
            ("input", "Input field"),
26
            ("generate", "Generate random text"),
27
        ]
28
    )
29
    items = serializers.JSONField(required=False)
1✔
30
    data_from = serializers.CharField(required=False)
1✔
31
    choice_value = serializers.CharField(required=False)
1✔
32
    choice_name = serializers.CharField(required=False)
1✔
33

34

35
class ManifestConditionSerializer(ValidateMixin, serializers.Serializer):
1✔
36
    response_notation = serializers.CharField()
1✔
37
    value = serializers.CharField()
1✔
38

39

40
class ManifestPollingSerializer(ValidateMixin, serializers.Serializer):
1✔
41
    interval = serializers.IntegerField(min_value=1, max_value=3600)
1✔
42
    amount = serializers.IntegerField(min_value=1, max_value=100)
1✔
43

44

45
class ManifestExistSerializer(ValidateMixin, serializers.Serializer):
1✔
46
    url = serializers.CharField()
1✔
47
    expected = serializers.CharField()
1✔
48
    fail_when_4xx_response_code = serializers.BooleanField(required=False)
1✔
49
    method = serializers.ChoiceField(
1✔
50
        [
51
            ("GET", "GET"),
52
            ("POST", "POST"),
53
            ("PUT", "PUT"),
54
        ]
55
    )
56

57

58
class ManifestExecuteSerializer(ValidateMixin, serializers.Serializer):
1✔
59
    url = serializers.CharField()
1✔
60
    data = serializers.JSONField(required=False, default=dict)
1✔
61
    headers = serializers.DictField(child=serializers.CharField(), default=dict)
1✔
62
    store_data = serializers.DictField(child=serializers.CharField(), default=dict)
1✔
63
    method = serializers.ChoiceField(
1✔
64
        [
65
            ("HEAD", "HEAD"),
66
            ("GET", "GET"),
67
            ("POST", "POST"),
68
            ("PUT", "PUT"),
69
        ]
70
    )
71
    files = serializers.DictField(child=serializers.CharField(), default=dict)
1✔
72
    save_as_file = serializers.CharField(required=False)
1✔
73
    polling = ManifestPollingSerializer(required=False)
1✔
74
    continue_if = ManifestConditionSerializer(required=False)
1✔
75

76
    def validate(self, data):
1✔
77
        # Check that if polling has been filled, that continue_if is also filled
78
        polling = data.get("polling", False)
1✔
79
        continue_if = data.get("continue_if", False)
1✔
80
        if polling and not continue_if:
1✔
81
            raise serializers.ValidationError(
×
82
                "continue_if must be filled if you use polling"
83
            )
84
        return data
1✔
85

86

87
class ManifestRevokeSerializer(ValidateMixin, serializers.Serializer):
1✔
88
    url = serializers.CharField()
1✔
89
    data = serializers.JSONField(required=False, default=dict)
1✔
90
    headers = serializers.DictField(child=serializers.CharField(), default=dict)
1✔
91
    method = serializers.ChoiceField(
1✔
92
        [
93
            ("HEAD", "HEAD"),
94
            ("GET", "GET"),
95
            ("POST", "POST"),
96
            ("PUT", "PUT"),
97
        ]
98
    )
99

100

101
class ManifestPostExecuteNotificationSerializer(ValidateMixin, serializers.Serializer):
1✔
102
    type = serializers.ChoiceField(
1✔
103
        [
104
            ("email", "Email message"),
105
            ("text", "Text message"),
106
        ]
107
    )
108
    to = serializers.CharField()
1✔
109
    subject = serializers.CharField()
1✔
110
    message = serializers.CharField()
1✔
111

112

113
class ManifestInitialDataFormSerializer(ValidateMixin, serializers.Serializer):
1✔
114
    id = serializers.CharField()
1✔
115
    name = serializers.CharField()
1✔
116
    type = serializers.ChoiceField(
1✔
117
        [
118
            ("generate", "Generate secret"),
119
        ],
120
        required=False,
121
    )
122
    description = serializers.CharField()
1✔
123

124

125
class ManifestExtraUserInfoFormSerializer(ValidateMixin, serializers.Serializer):
1✔
126
    id = serializers.CharField()
1✔
127
    name = serializers.CharField()
1✔
128
    description = serializers.CharField()
1✔
129

130

131
class ManifestOauthSerializer(ValidateMixin, serializers.Serializer):
1✔
132
    authenticate_url = serializers.CharField()
1✔
133
    access_token = ManifestExecuteSerializer(required=True)
1✔
134
    refresh = ManifestExecuteSerializer(required=True)
1✔
135
    without_code = serializers.BooleanField(required=False)
1✔
136

137

138
class WebhookManifestSerializer(ValidateMixin, serializers.Serializer):
1✔
139
    form = ManifestFormSerializer(required=False, many=True)
1✔
140
    exists = ManifestExistSerializer(required=False)
1✔
141
    revoke = ManifestRevokeSerializer(required=False, many=True)
1✔
142
    execute = ManifestExecuteSerializer(many=True)
1✔
143
    post_execute_notification = ManifestPostExecuteNotificationSerializer(
1✔
144
        many=True, required=False
145
    )
146
    initial_data_form = ManifestInitialDataFormSerializer(many=True, required=False)
1✔
147
    extra_user_info = ManifestExtraUserInfoFormSerializer(many=True, required=False)
1✔
148
    headers = serializers.DictField(child=serializers.CharField(), default=dict)
1✔
149
    oauth = ManifestOauthSerializer(required=False)
1✔
150

151

152
class SyncUsersManifestSerializer(ValidateMixin, serializers.Serializer):
1✔
153
    data_from = serializers.CharField(required=False)
1✔
154
    data_structure = serializers.DictField(child=serializers.CharField())
1✔
155
    execute = ManifestExecuteSerializer(many=True)
1✔
156
    next_page_token_from = serializers.CharField(required=False)
1✔
157
    next_page = serializers.CharField(required=False)
1✔
158
    next_page_from = serializers.CharField(required=False)
1✔
159
    schedule = serializers.CharField(required=False, validators=[validate_cron])
1✔
160
    action = serializers.ChoiceField([("create", "create"), ("update", "update")])
1✔
161
    amount_pages_to_fetch = serializers.IntegerField(required=False)
1✔
162
    initial_data_form = ManifestInitialDataFormSerializer(many=True, required=False)
1✔
163
    headers = serializers.DictField(child=serializers.CharField(), default=dict)
1✔
164
    oauth = ManifestOauthSerializer(required=False)
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc