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

scoringengine / scoringengine / 23385248069

21 Mar 2026 05:50PM UTC coverage: 73.202% (-2.5%) from 75.69%
23385248069

push

github

RustyBower
Fix test to match DB fallback behavior for missing output files

The endpoint now returns check.output from DB (200) instead of 404
when the on-disk file doesn't exist.

3726 of 5090 relevant lines covered (73.2%)

0.73 hits per line

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

68.99
/scoring_engine/web/views/admin.py
1
from operator import itemgetter
1✔
2

3
from flask import Blueprint, redirect, render_template, url_for
1✔
4
from flask_login import current_user, login_required
1✔
5

6
from scoring_engine.db import db
1✔
7
from scoring_engine.models.inject import Inject
1✔
8
from scoring_engine.models.service import Service
1✔
9
from scoring_engine.models.setting import Setting
1✔
10
from scoring_engine.models.team import Team
1✔
11
from scoring_engine.models.user import User
1✔
12

13
mod = Blueprint("admin", __name__)
1✔
14

15

16
@mod.route("/admin")
1✔
17
@mod.route("/admin/status")
1✔
18
@login_required
1✔
19
def status():
1✔
20
    if current_user.is_white_team:
1✔
21
        blue_teams = Team.get_all_blue_teams()
1✔
22
        return render_template("admin/status.html", blue_teams=blue_teams)
1✔
23
    else:
24
        return redirect(url_for("auth.unauthorized"))
1✔
25

26

27
@mod.route("/admin/workers")
1✔
28
@login_required
1✔
29
def workers():
1✔
30
    if current_user.is_white_team:
1✔
31
        blue_teams = Team.get_all_blue_teams()
1✔
32
        return render_template("admin/workers.html", blue_teams=blue_teams)
1✔
33
    else:
34
        return redirect(url_for("auth.unauthorized"))
1✔
35

36

37
@mod.route("/admin/queues")
1✔
38
@login_required
1✔
39
def queues():
1✔
40
    if current_user.is_white_team:
1✔
41
        blue_teams = Team.get_all_blue_teams()
1✔
42
        return render_template("admin/queues.html", blue_teams=blue_teams)
1✔
43
    else:
44
        return redirect(url_for("auth.unauthorized"))
1✔
45

46

47
@mod.route("/admin/manage")
1✔
48
@login_required
1✔
49
def manage():
1✔
50
    if current_user.is_white_team:
1✔
51
        users = db.session.query(User).with_entities(User.id, User.username).all()
1✔
52
        teams = db.session.query(Team).with_entities(Team.id, Team.name).all()
1✔
53
        blue_teams = Team.get_all_blue_teams()
1✔
54
        return render_template(
1✔
55
            "admin/manage.html",
56
            users=sorted(users, key=itemgetter(0)),
57
            teams=teams,
58
            blue_teams=blue_teams,
59
        )
60
    else:
61
        return redirect(url_for("auth.unauthorized"))
1✔
62

63

64
@mod.route("/admin/injects/templates")
1✔
65
@login_required
1✔
66
def inject_templates():
1✔
67
    if current_user.is_white_team:
×
68
        blue_teams = Team.get_all_blue_teams()
×
69
        red_teams = Team.get_all_red_teams()
×
70
        return render_template("admin/templates.html", blue_teams=blue_teams, red_teams=red_teams)
×
71
    else:
72
        return redirect(url_for("auth.unauthorized"))
×
73

74

75
@mod.route("/admin/injects/scores")
1✔
76
@login_required
1✔
77
def inject_scores():
1✔
78
    if current_user.is_white_team:
×
79
        blue_teams = Team.get_all_blue_teams()
×
80
        return render_template("admin/injects.html", blue_teams=blue_teams)
×
81
    else:
82
        return redirect(url_for("auth.unauthorized"))
×
83

84

85
@mod.route("/admin/injects/<int:inject_id>")
1✔
86
@login_required
1✔
87
def inject_inject(inject_id):
1✔
88
    if current_user.is_white_team:
×
89
        inject = db.session.get(Inject, inject_id)
×
90
        return render_template("admin/inject.html", inject=inject)
×
91
    else:
92
        return redirect(url_for("auth.unauthorized"))
×
93

94

95
@mod.route("/admin/injects/template/<int:template_id>/submissions")
1✔
96
@login_required
1✔
97
def template_submissions(template_id):
1✔
98
    if current_user.is_white_team:
×
99
        return render_template("admin/template_submissions.html", template_id=template_id)
×
100
    else:
101
        return redirect(url_for("auth.unauthorized"))
×
102

103

104
@mod.route("/admin/service/<id>")
1✔
105
@login_required
1✔
106
def service(id):
1✔
107
    if current_user.is_white_team:
1✔
108
        service = db.session.get(Service, id)
1✔
109
        blue_teams = Team.get_all_blue_teams()
1✔
110
        if service is None:
1✔
111
            return redirect(url_for("auth.unauthorized"))
1✔
112

113
        return render_template("admin/service.html", service=service, blue_teams=blue_teams)
1✔
114
    else:
115
        return redirect(url_for("auth.unauthorized"))
1✔
116

117

118
@mod.route("/admin/settings")
1✔
119
@login_required
1✔
120
def settings():
1✔
121
    if current_user.is_white_team:
1✔
122
        about_page_content = Setting.get_setting("about_page_content").value
1✔
123
        target_round_time = Setting.get_setting("target_round_time").value
1✔
124
        worker_refresh_time = Setting.get_setting("worker_refresh_time").value
1✔
125
        blue_teams = Team.get_all_blue_teams()
1✔
126
        return render_template(
1✔
127
            "admin/settings.html",
128
            blue_teams=blue_teams,
129
            target_round_time=target_round_time,
130
            worker_refresh_time=worker_refresh_time,
131
            about_page_content=about_page_content,
132
        )
133
    else:
134
        return redirect(url_for("auth.unauthorized"))
1✔
135

136

137
@mod.route("/admin/permissions")
1✔
138
@login_required
1✔
139
def permissions():
1✔
140
    if current_user.is_white_team:
1✔
141
        blue_teams = Team.get_all_blue_teams()
1✔
142
        return render_template(
1✔
143
            "admin/permissions.html",
144
            blue_teams=blue_teams,
145
            blue_team_update_hostname=Setting.get_setting("blue_team_update_hostname").value,
146
            blue_team_update_port=Setting.get_setting("blue_team_update_port").value,
147
            blue_team_update_account_usernames=Setting.get_setting("blue_team_update_account_usernames").value,
148
            blue_team_update_account_passwords=Setting.get_setting("blue_team_update_account_passwords").value,
149
            blue_team_view_check_output=Setting.get_setting("blue_team_view_check_output").value,
150
            anonymize_team_names=(
151
                Setting.get_setting("anonymize_team_names").value
152
                if Setting.get_setting("anonymize_team_names")
153
                else False
154
            ),
155
            inject_scores_visible=Setting.get_setting("inject_scores_visible").value,
156
        )
157
    else:
158
        return redirect(url_for("auth.unauthorized"))
1✔
159

160

161
@mod.route("/admin/announcements")
1✔
162
@login_required
1✔
163
def announcements():
1✔
164
    if current_user.is_white_team:
×
165
        blue_teams = Team.get_all_blue_teams()
×
166
        return render_template("admin/announcements.html", blue_teams=blue_teams)
×
167
    else:
168
        return redirect(url_for("auth.unauthorized"))
×
169

170

171
@mod.route("/admin/welcome")
1✔
172
@login_required
1✔
173
def welcome():
1✔
174
    if current_user.is_white_team:
×
175
        blue_teams = Team.get_all_blue_teams()
×
176
        return render_template("admin/welcome.html", blue_teams=blue_teams)
×
177
    else:
178
        return redirect(url_for("auth.unauthorized"))
×
179

180

181
@mod.route("/admin/sla")
1✔
182
@login_required
1✔
183
def sla():
1✔
184
    if current_user.is_white_team:
×
185
        blue_teams = Team.get_all_blue_teams()
×
186

187
        # Get SLA settings with defaults
188
        def get_setting_value(name, default):
×
189
            setting = Setting.get_setting(name)
×
190
            return setting.value if setting else default
×
191

192
        def get_setting_bool(name, default):
×
193
            setting = Setting.get_setting(name)
×
194
            if setting:
×
195
                val = setting.value
×
196
                if isinstance(val, bool):
×
197
                    return val
×
198
                if isinstance(val, str):
×
199
                    return val.lower() in ("true", "1", "yes")
×
200
            return default
×
201

202
        return render_template(
×
203
            "admin/sla.html",
204
            blue_teams=blue_teams,
205
            # SLA Penalty settings
206
            sla_enabled=get_setting_bool("sla_enabled", False),
207
            sla_penalty_threshold=get_setting_value("sla_penalty_threshold", "5"),
208
            sla_penalty_percent=get_setting_value("sla_penalty_percent", "10"),
209
            sla_penalty_max_percent=get_setting_value("sla_penalty_max_percent", "50"),
210
            sla_penalty_mode=get_setting_value("sla_penalty_mode", "additive"),
211
            sla_allow_negative=get_setting_bool("sla_allow_negative", False),
212
            # Dynamic scoring settings
213
            dynamic_scoring_enabled=get_setting_bool("dynamic_scoring_enabled", False),
214
            dynamic_scoring_early_rounds=get_setting_value("dynamic_scoring_early_rounds", "10"),
215
            dynamic_scoring_early_multiplier=get_setting_value("dynamic_scoring_early_multiplier", "2.0"),
216
            dynamic_scoring_late_start_round=get_setting_value("dynamic_scoring_late_start_round", "50"),
217
            dynamic_scoring_late_multiplier=get_setting_value("dynamic_scoring_late_multiplier", "0.5"),
218
        )
219
    else:
220
        return redirect(url_for("auth.unauthorized"))
×
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