Completed
Push — main ( 5d8ea8...d487f1 )
by Jochen
03:24
created

byceps.blueprints.admin.email.views   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 152
Duplicated Lines 0 %

Test Coverage

Coverage 45.59%

Importance

Changes 0
Metric Value
eloc 90
dl 0
loc 152
ccs 31
cts 68
cp 0.4559
rs 10
c 0
b 0
f 0
wmc 13

7 Functions

Rating   Name   Duplication   Size   Complexity  
A update() 0 20 2
A create() 0 23 2
A create_form() 0 9 2
A index() 0 9 1
A update_form() 0 21 2
A _get_config_or_404() 0 7 2
A delete() 0 18 2
1
"""
2
byceps.blueprints.admin.email.views
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
:Copyright: 2006-2020 Jochen Kupperschmidt
6
:License: Modified BSD, see LICENSE for details.
7
"""
8
9 1
from flask import abort, request, url_for
10
11 1
from ....services.email import service as email_service
12 1
from ....util.framework.blueprint import create_blueprint
13 1
from ....util.framework.flash import flash_error, flash_success
14 1
from ....util.framework.templating import templated
15 1
from ....util.views import redirect_to, respond_no_content_with_location
16
17 1
from ...common.authorization.decorators import permission_required
18 1
from ...common.authorization.registry import permission_registry
19
20 1
from .authorization import EmailConfigPermission
21 1
from .forms import CreateForm, UpdateForm
22
23
24 1
blueprint = create_blueprint('email_admin', __name__)
25
26
27 1
permission_registry.register_enum(EmailConfigPermission)
28
29
30 1
@blueprint.route('/')
31 1
@permission_required(EmailConfigPermission.view)
32 1
@templated
33
def index():
34
    """List all e-mail configs."""
35
    configs = email_service.get_all_configs()
36
37
    return {
38
        'configs': configs,
39
    }
40
41
42 1
@blueprint.route('/create')
43 1
@permission_required(EmailConfigPermission.create)
44 1
@templated
45 1
def create_form(erroneous_form=None):
46
    """Show form to create an e-mail config."""
47
    form = erroneous_form if erroneous_form else CreateForm()
48
49
    return {
50
        'form': form,
51
    }
52
53
54 1
@blueprint.route('/', methods=['POST'])
55 1
@permission_required(EmailConfigPermission.create)
56
def create():
57
    """Create an e-mail config."""
58
    form = CreateForm(request.form)
59
60
    if not form.validate():
61
        return create_form(form)
62
63
    config_id = form.config_id.data.strip()
64
    sender_address = form.sender_address.data.strip()
65
    sender_name = form.sender_name.data.strip() or None
66
    contact_address = form.contact_address.data.strip() or None
67
68
    config = email_service.create_config(
69
        config_id,
70
        sender_address,
71
        sender_name=sender_name,
72
        contact_address=contact_address,
73
    )
74
75
    flash_success(f'Die Konfiguration "{config.id}" wurde angelegt.')
76
    return redirect_to('.index')
77
78
79 1
@blueprint.route('/configs/<config_id>/update')
80 1
@permission_required(EmailConfigPermission.update)
81 1
@templated
82 1
def update_form(config_id, erroneous_form=None):
83
    """Show form to update an e-mail config."""
84
    config = _get_config_or_404(config_id)
85
86
    form = (
87
        erroneous_form
88
        if erroneous_form
89
        else UpdateForm(
90
            config_id=config.id,
91
            sender_address=config.sender.address,
92
            sender_name=config.sender.name,
93
            contact_address=config.contact_address,
94
        )
95
    )
96
97
    return {
98
        'config': config,
99
        'form': form,
100
    }
101
102
103 1
@blueprint.route('/configs/<config_id>', methods=['POST'])
104 1
@permission_required(EmailConfigPermission.update)
105
def update(config_id):
106
    """Update an e-mail config."""
107
    config = _get_config_or_404(config_id)
108
109
    form = UpdateForm(request.form)
110
    if not form.validate():
111
        return update_form(config.id, form)
112
113
    sender_address = form.sender_address.data.strip()
114
    sender_name = form.sender_name.data.strip()
115
    contact_address = form.contact_address.data.strip()
116
117
    config = email_service.update_config(
118
        config.id, sender_address, sender_name, contact_address
119
    )
120
121
    flash_success(f'Die Konfiguration "{config.id}" wurde aktualisiert.')
122
    return redirect_to('.index')
123
124
125 1
@blueprint.route('/configs/<config_id>', methods=['DELETE'])
126 1
@permission_required(EmailConfigPermission.delete)
127 1
@respond_no_content_with_location
128
def delete(config_id):
129
    """Delete an e-mail config."""
130
    config = _get_config_or_404(config_id)
131
132
    success = email_service.delete_config(config.id)
133
134
    if success:
135
        flash_success(f'Die Konfiguration "{config_id}" wurde gelöscht.')
136
    else:
137
        flash_error(
138
            f'Die Konfiguration "{config_id}" konnte nicht gelöscht werden. '
139
            'Sie scheint noch in Sites verwendet zu werden.'
140
        )
141
142
    return url_for('.index')
143
144
145 1
def _get_config_or_404(config_id):
146
    config = email_service.find_config(config_id)
147
148
    if config is None:
149
        abort(404)
150
151
    return config
152