argus-alm 0.12.10__py3-none-any.whl → 0.13.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. argus/client/base.py +1 -1
  2. argus/client/driver_matrix_tests/cli.py +2 -2
  3. argus/client/driver_matrix_tests/client.py +1 -1
  4. argus/client/generic/cli.py +22 -2
  5. argus/client/generic/client.py +22 -0
  6. argus/client/generic_result.py +3 -3
  7. argus/client/sct/client.py +5 -4
  8. argus/client/sirenada/client.py +1 -1
  9. {argus_alm-0.12.10.dist-info → argus_alm-0.13.1.dist-info}/METADATA +2 -4
  10. argus_alm-0.13.1.dist-info/RECORD +20 -0
  11. argus/backend/.gitkeep +0 -0
  12. argus/backend/cli.py +0 -41
  13. argus/backend/controller/__init__.py +0 -0
  14. argus/backend/controller/admin.py +0 -20
  15. argus/backend/controller/admin_api.py +0 -354
  16. argus/backend/controller/api.py +0 -529
  17. argus/backend/controller/auth.py +0 -67
  18. argus/backend/controller/client_api.py +0 -108
  19. argus/backend/controller/main.py +0 -274
  20. argus/backend/controller/notification_api.py +0 -72
  21. argus/backend/controller/notifications.py +0 -13
  22. argus/backend/controller/team.py +0 -126
  23. argus/backend/controller/team_ui.py +0 -18
  24. argus/backend/controller/testrun_api.py +0 -482
  25. argus/backend/controller/view_api.py +0 -162
  26. argus/backend/db.py +0 -100
  27. argus/backend/error_handlers.py +0 -21
  28. argus/backend/events/event_processors.py +0 -34
  29. argus/backend/models/__init__.py +0 -0
  30. argus/backend/models/result.py +0 -138
  31. argus/backend/models/web.py +0 -389
  32. argus/backend/plugins/__init__.py +0 -0
  33. argus/backend/plugins/core.py +0 -225
  34. argus/backend/plugins/driver_matrix_tests/controller.py +0 -63
  35. argus/backend/plugins/driver_matrix_tests/model.py +0 -421
  36. argus/backend/plugins/driver_matrix_tests/plugin.py +0 -22
  37. argus/backend/plugins/driver_matrix_tests/raw_types.py +0 -62
  38. argus/backend/plugins/driver_matrix_tests/service.py +0 -60
  39. argus/backend/plugins/driver_matrix_tests/udt.py +0 -42
  40. argus/backend/plugins/generic/model.py +0 -79
  41. argus/backend/plugins/generic/plugin.py +0 -16
  42. argus/backend/plugins/generic/types.py +0 -13
  43. argus/backend/plugins/loader.py +0 -40
  44. argus/backend/plugins/sct/controller.py +0 -185
  45. argus/backend/plugins/sct/plugin.py +0 -38
  46. argus/backend/plugins/sct/resource_setup.py +0 -178
  47. argus/backend/plugins/sct/service.py +0 -491
  48. argus/backend/plugins/sct/testrun.py +0 -272
  49. argus/backend/plugins/sct/udt.py +0 -101
  50. argus/backend/plugins/sirenada/model.py +0 -113
  51. argus/backend/plugins/sirenada/plugin.py +0 -17
  52. argus/backend/service/admin.py +0 -27
  53. argus/backend/service/argus_service.py +0 -688
  54. argus/backend/service/build_system_monitor.py +0 -188
  55. argus/backend/service/client_service.py +0 -122
  56. argus/backend/service/event_service.py +0 -18
  57. argus/backend/service/jenkins_service.py +0 -240
  58. argus/backend/service/notification_manager.py +0 -150
  59. argus/backend/service/release_manager.py +0 -230
  60. argus/backend/service/results_service.py +0 -317
  61. argus/backend/service/stats.py +0 -540
  62. argus/backend/service/team_manager_service.py +0 -83
  63. argus/backend/service/testrun.py +0 -559
  64. argus/backend/service/user.py +0 -307
  65. argus/backend/service/views.py +0 -258
  66. argus/backend/template_filters.py +0 -27
  67. argus/backend/tests/__init__.py +0 -0
  68. argus/backend/tests/argus_web.test.yaml +0 -39
  69. argus/backend/tests/conftest.py +0 -44
  70. argus/backend/tests/results_service/__init__.py +0 -0
  71. argus/backend/tests/results_service/test_best_results.py +0 -70
  72. argus/backend/util/common.py +0 -65
  73. argus/backend/util/config.py +0 -38
  74. argus/backend/util/encoders.py +0 -41
  75. argus/backend/util/logsetup.py +0 -81
  76. argus/backend/util/module_loaders.py +0 -30
  77. argus/backend/util/send_email.py +0 -91
  78. argus/client/generic_result_old.py +0 -143
  79. argus/db/.gitkeep +0 -0
  80. argus/db/argus_json.py +0 -14
  81. argus/db/cloud_types.py +0 -125
  82. argus/db/config.py +0 -135
  83. argus/db/db_types.py +0 -139
  84. argus/db/interface.py +0 -370
  85. argus/db/testrun.py +0 -740
  86. argus/db/utils.py +0 -15
  87. argus_alm-0.12.10.dist-info/RECORD +0 -96
  88. /argus/{backend → common}/__init__.py +0 -0
  89. /argus/{backend/util → common}/enums.py +0 -0
  90. /argus/{backend/plugins/sct/types.py → common/sct_types.py} +0 -0
  91. /argus/{backend/plugins/sirenada/types.py → common/sirenada_types.py} +0 -0
  92. {argus_alm-0.12.10.dist-info → argus_alm-0.13.1.dist-info}/LICENSE +0 -0
  93. {argus_alm-0.12.10.dist-info → argus_alm-0.13.1.dist-info}/WHEEL +0 -0
  94. {argus_alm-0.12.10.dist-info → argus_alm-0.13.1.dist-info}/entry_points.txt +0 -0
@@ -1,529 +0,0 @@
1
- import logging
2
- from uuid import UUID
3
- import requests
4
- from flask import (
5
- Blueprint,
6
- g,
7
- request, Response
8
- )
9
- from flask.json import jsonify
10
- from argus.backend.error_handlers import handle_api_exception
11
- from argus.backend.controller.notification_api import bp as notifications_bp
12
- from argus.backend.controller.client_api import bp as client_bp
13
- from argus.backend.controller.testrun_api import bp as testrun_bp
14
- from argus.backend.controller.team import bp as team_bp
15
- from argus.backend.controller.view_api import bp as view_bp
16
- from argus.backend.service.argus_service import ArgusService, ScheduleUpdateRequest
17
- from argus.backend.service.results_service import ResultsService
18
- from argus.backend.service.user import UserService, api_login_required
19
- from argus.backend.service.stats import ReleaseStatsCollector
20
- from argus.backend.models.web import ArgusRelease, ArgusGroup, ArgusTest, User, UserOauthToken
21
- from argus.backend.util.common import get_payload
22
-
23
- bp = Blueprint('api', __name__, url_prefix='/api/v1')
24
- bp.register_blueprint(notifications_bp)
25
- bp.register_blueprint(client_bp)
26
- bp.register_blueprint(testrun_bp)
27
- bp.register_blueprint(team_bp)
28
- bp.register_blueprint(view_bp)
29
- bp.register_error_handler(Exception, handle_api_exception)
30
- LOGGER = logging.getLogger(__name__)
31
-
32
-
33
- @bp.route("/version")
34
- def app_version():
35
- service = ArgusService()
36
- argus_version = service.get_version()
37
- return jsonify({
38
- "status": "ok",
39
- "response": {
40
- "commit_id": argus_version
41
- }
42
- })
43
-
44
-
45
- @bp.route("/profile/github/token")
46
- @api_login_required
47
- def get_github_oauth_token():
48
- user_tokens = UserOauthToken.filter(user_id=g.user.id).all()
49
- token = None
50
- for tok in user_tokens:
51
- if tok.kind == "github":
52
- token = tok.token
53
- break
54
- if not token:
55
- raise Exception("Github token not found")
56
-
57
- res = jsonify({
58
- "status": "ok",
59
- "response": token
60
- })
61
- res.cache_control.max_age = 300
62
-
63
- return res
64
-
65
-
66
- @bp.route("/releases")
67
- @api_login_required
68
- def releases():
69
- service = ArgusService()
70
- force_all = request.args.get("all", False)
71
- all_releases = service.get_releases()
72
- response = jsonify({
73
- "status": "ok",
74
- "response": [dict(d.items()) for d in all_releases if d.enabled or force_all]
75
- })
76
-
77
- response.cache_control.max_age = 60
78
- return response
79
-
80
-
81
- @bp.route("/release/activity", methods=["GET"])
82
- @api_login_required
83
- def release_activity():
84
- release_name = request.args.get("releaseName")
85
- if not release_name:
86
- raise Exception("Release name not specified in the request")
87
- service = ArgusService()
88
- activity_data = service.fetch_release_activity(release_name)
89
-
90
- return jsonify({
91
- "status": "ok",
92
- "response": activity_data
93
- })
94
-
95
-
96
- @bp.route("/release/planner/data", methods=["GET"])
97
- @api_login_required
98
- def release_planner_data():
99
-
100
- release_id = request.args.get("releaseId")
101
- if not release_id:
102
- raise Exception("Release Id not specified")
103
- service = ArgusService()
104
- planner_data = service.get_planner_data(release_id)
105
- return jsonify({
106
- "status": "ok",
107
- "response": planner_data
108
- })
109
-
110
-
111
- @bp.route("/release/<string:release_id>/versions")
112
- @api_login_required
113
- def release_versions(release_id: str):
114
- release_id = UUID(release_id)
115
- service = ArgusService()
116
- distinct_versions = service.get_distinct_release_versions(release_id=release_id)
117
-
118
- return jsonify({
119
- "status": "ok",
120
- "response": distinct_versions
121
- })
122
-
123
-
124
- @bp.route("/release/planner/comment/get/test")
125
- def get_planner_comment_by_test():
126
- test_id = request.args.get("id")
127
- if not test_id:
128
- raise Exception("TestId was not specified")
129
- service = ArgusService()
130
- planner_comments_by_test = service.get_planner_comment_by_test(UUID(test_id))
131
-
132
- response = jsonify({
133
- "status": "ok",
134
- "response": planner_comments_by_test
135
- })
136
- response.cache_control.max_age = 60
137
- return response
138
-
139
-
140
- @bp.route("/release/schedules/comment/update", methods=["POST"])
141
- @api_login_required
142
- def release_schedules_comment_update():
143
- if not request.is_json:
144
- raise Exception(
145
- "Content-Type mismatch, expected application/json, got:", request.content_type)
146
- request_payload = request.get_json()
147
- service = ArgusService()
148
- comment_update_result = service.update_schedule_comment(request_payload)
149
-
150
- return jsonify({
151
- "status": "ok",
152
- "response": comment_update_result
153
- })
154
-
155
-
156
- @bp.route("/release/schedules", methods=["GET"])
157
- @api_login_required
158
- def release_schedules():
159
- release = request.args.get("releaseId")
160
- if not release:
161
- raise Exception("No releaseId provided")
162
- service = ArgusService()
163
- release_schedules_data = service.get_schedules_for_release(release)
164
-
165
- return jsonify({
166
- "status": "ok",
167
- "response": release_schedules_data
168
- })
169
-
170
-
171
- @bp.route("/release/schedules/assignee/update", methods=["POST"])
172
- @api_login_required
173
- def release_schedules_assignee_update():
174
- if not request.is_json:
175
- raise Exception(
176
- "Content-Type mismatch, expected application/json, got:", request.content_type)
177
- request_payload = request.get_json()
178
- service = ArgusService()
179
- assignee_update_status = service.update_schedule_assignees(request_payload)
180
-
181
- return jsonify({
182
- "status": "ok",
183
- "response": assignee_update_status
184
- })
185
-
186
-
187
- @bp.route("/release/assignees/groups", methods=["GET"])
188
- @api_login_required
189
- def group_assignees():
190
- release_id = request.args.get("releaseId")
191
- if not release_id:
192
- raise Exception("Missing releaseId")
193
- service = ArgusService()
194
- group_assignees_list = service.get_groups_assignees(release_id)
195
-
196
- return jsonify({
197
- "status": "ok",
198
- "response": group_assignees_list
199
- })
200
-
201
-
202
- @bp.route("/release/assignees/tests", methods=["GET"])
203
- @api_login_required
204
- def tests_assignees():
205
- group_id = request.args.get("groupId")
206
- if not group_id:
207
- raise Exception("Missing groupId")
208
- service = ArgusService()
209
- tests_assignees_list = service.get_tests_assignees(group_id)
210
-
211
- return jsonify({
212
- "status": "ok",
213
- "response": tests_assignees_list
214
- })
215
-
216
-
217
- @bp.route("/release/schedules/submit", methods=["POST"])
218
- @api_login_required
219
- def release_schedules_submit():
220
- if not request.is_json:
221
- raise Exception(
222
- "Content-Type mismatch, expected application/json, got:", request.content_type)
223
- payload = request.get_json()
224
- service = ArgusService()
225
- schedule_submit_result = service.submit_new_schedule(
226
- release=payload["releaseId"],
227
- start_time=payload["start"],
228
- end_time=payload["end"],
229
- tests=payload["tests"],
230
- groups=payload["groups"],
231
- assignees=payload["assignees"],
232
- tag=payload["tag"],
233
- comments=payload.get("comments"),
234
- group_ids=payload.get("groupIds"),
235
- )
236
-
237
- return jsonify({
238
- "status": "ok",
239
- "response": schedule_submit_result
240
- })
241
-
242
-
243
- @bp.route("/release/schedules/delete", methods=["POST"])
244
- @api_login_required
245
- def release_schedules_delete():
246
- if not request.is_json:
247
- raise Exception(
248
- "Content-Type mismatch, expected application/json, got:", request.content_type)
249
- request_payload = request.get_json()
250
- service = ArgusService()
251
- schedule_delete_result = service.delete_schedule(request_payload)
252
-
253
- return jsonify({
254
- "status": "ok",
255
- "response": schedule_delete_result
256
- })
257
-
258
-
259
- @bp.route("/release/schedules/update", methods=["POST"])
260
- @api_login_required
261
- def release_schedule_update():
262
- payload = get_payload(request)
263
- req = ScheduleUpdateRequest(**payload)
264
- service = ArgusService()
265
- update_result = service.update_schedule(
266
- release_id=req.release_id,
267
- schedule_id=req.schedule_id,
268
- old_tests=req.old_tests,
269
- new_tests=req.new_tests,
270
- comments=req.comments,
271
- assignee=req.assignee
272
- )
273
-
274
- return jsonify({
275
- "status": "ok",
276
- "response": update_result
277
- })
278
-
279
-
280
- @bp.route("/groups", methods=["GET"])
281
- @api_login_required
282
- def argus_groups():
283
- release_id = request.args.get("releaseId")
284
- if not release_id:
285
- raise Exception("No releaseId provided")
286
-
287
- force_all = request.args.get("all", False)
288
- service = ArgusService()
289
- groups = service.get_groups(UUID(release_id))
290
- result_groups = [dict(g.items()) for g in groups if g.enabled or force_all]
291
-
292
- response = jsonify({
293
- "status": "ok",
294
- "response": result_groups
295
- })
296
- response.cache_control.max_age = 60
297
- return response
298
-
299
-
300
- @bp.route("/tests", methods=["GET"])
301
- @api_login_required
302
- def argus_tests():
303
- group_id = request.args.get("groupId")
304
- if not group_id:
305
- raise Exception("No groupId provided")
306
- force_all = request.args.get("all", False)
307
- service = ArgusService()
308
- tests = service.get_tests(group_id=group_id)
309
- result_tests = [dict(t.items()) for t in tests if t.enabled or force_all]
310
-
311
- response = jsonify({
312
- "status": "ok",
313
- "response": result_tests
314
- })
315
- response.cache_control.max_age = 60
316
- return response
317
-
318
-
319
- @bp.route("/release/<string:release_id>/details", methods=["GET"])
320
- @api_login_required
321
- def get_release_details(release_id: str):
322
- release = ArgusRelease.get(id=UUID(release_id))
323
- response = jsonify({
324
- "status": "ok",
325
- "response": release,
326
- })
327
- response.cache_control.max_age = 60
328
- return response
329
-
330
-
331
- @bp.route("/group/<string:group_id>/details", methods=["GET"])
332
- @api_login_required
333
- def get_group_details(group_id: str):
334
- group = ArgusGroup.get(id=UUID(group_id))
335
- response = jsonify({
336
- "status": "ok",
337
- "response": group,
338
- })
339
- response.cache_control.max_age = 60
340
- return response
341
-
342
-
343
- @bp.route("/test/<string:test_id>/details", methods=["GET"])
344
- @api_login_required
345
- def get_test_details(test_id: str):
346
- test = ArgusTest.get(id=UUID(test_id))
347
- response = jsonify({
348
- "status": "ok",
349
- "response": test
350
- })
351
- response.cache_control.max_age = 60
352
- return response
353
-
354
-
355
- @bp.route("/test/<string:test_id>/set_plugin", methods=["POST"])
356
- @api_login_required
357
- def set_test_plugin(test_id: str):
358
- payload = get_payload(request)
359
-
360
- current_user: User = g.user
361
- test: ArgusTest = ArgusTest.get(id=UUID(test_id))
362
- test.plugin_name = payload["plugin_name"]
363
- test.save()
364
-
365
- return {
366
- "status": "ok",
367
- "response": test
368
- }
369
-
370
-
371
- @bp.route("/test-info", methods=["GET"])
372
- @api_login_required
373
- def test_info():
374
- test_id = request.args.get("testId")
375
- if not test_id:
376
- raise Exception("No testId provided")
377
- service = ArgusService()
378
- info = service.get_test_info(test_id=UUID(test_id))
379
-
380
- return {
381
- "status": "ok",
382
- "response": info
383
- }
384
-
385
- @bp.route("/test-results", methods=["GET", "HEAD"])
386
- @api_login_required
387
- def test_results():
388
- test_id = request.args.get("testId")
389
- if not test_id:
390
- raise Exception("No testId provided")
391
- service = ResultsService()
392
- if request.method == 'HEAD':
393
- exists = service.is_results_exist(test_id=UUID(test_id))
394
- return Response(status=200 if exists else 404)
395
- graphs, ticks = service.get_test_graphs(test_id=UUID(test_id))
396
-
397
- return {
398
- "status": "ok",
399
- "response": {"graphs": graphs, "ticks": ticks}
400
- }
401
-
402
- @bp.route("/test_run/comment/get", methods=["GET"]) # TODO: remove
403
- @api_login_required
404
- def get_test_run_comment():
405
- comment_id = request.args.get("commentId")
406
- if not comment_id:
407
- raise Exception("commentId wasn't specified in the request")
408
- service = ArgusService()
409
- comment = service.get_comment(comment_id=UUID(comment_id))
410
- return jsonify({
411
- "status": "ok",
412
- "response": comment if comment else False
413
- })
414
-
415
-
416
- @bp.route("/users", methods=["GET"])
417
- @api_login_required
418
- def user_info():
419
- result = UserService().get_users()
420
-
421
- return jsonify({
422
- "status": "ok",
423
- "response": result
424
- })
425
-
426
-
427
- @bp.route("/release/stats/v2", methods=["GET"])
428
- @api_login_required
429
- def release_stats_v2():
430
- request.query_string.decode(encoding="UTF-8")
431
- release = request.args.get("release")
432
- limited = bool(int(request.args.get("limited")))
433
- version = request.args.get("productVersion", None)
434
- include_no_version = bool(int(request.args.get("includeNoVersion", True)))
435
- force = bool(int(request.args.get("force")))
436
- stats = ReleaseStatsCollector(
437
- release_name=release, release_version=version).collect(limited=limited, force=force, include_no_version=include_no_version)
438
-
439
- res = jsonify({
440
- "status": "ok",
441
- "response": stats
442
- })
443
- res.cache_control.max_age = 300
444
- return res
445
-
446
-
447
- @bp.route("/test_runs/poll", methods=["GET"])
448
- @api_login_required
449
- def test_runs_poll():
450
- limit = request.args.get("limit")
451
- if not limit:
452
- limit = 10
453
- else:
454
- limit = int(limit)
455
- test_id = UUID(request.args.get('testId'))
456
- additional_runs = [UUID(run) for run in request.args.getlist('additionalRuns[]')]
457
- service = ArgusService()
458
- runs = service.poll_test_runs(test_id=test_id, additional_runs=additional_runs, limit=limit)
459
-
460
- return jsonify({
461
- "status": "ok",
462
- "response": runs
463
- })
464
-
465
-
466
- @bp.route("/test_run/poll", methods=["GET"])
467
- @api_login_required
468
- def test_run_poll_single():
469
- runs = request.args.get("runs", "")
470
- runs = [UUID(r) for r in runs.split(",") if r]
471
- service = ArgusService()
472
- test_runs = service.poll_test_runs_single(runs=runs)
473
-
474
- return jsonify({
475
- "status": "ok",
476
- "response": test_runs
477
- })
478
-
479
-
480
- @bp.route("/release/create", methods=["POST"])
481
- @api_login_required
482
- def release_create():
483
- if not request.is_json:
484
- raise Exception(
485
- "Content-Type mismatch, expected application/json, got:", request.content_type)
486
- request_payload = request.get_json()
487
- service = ArgusService()
488
- result = service.create_release(request_payload)
489
-
490
- return jsonify({
491
- "status": "ok",
492
- "response": result
493
- })
494
-
495
-
496
- @bp.route("/artifact/resolveSize")
497
- @api_login_required
498
- def resolve_artifact_size():
499
- link = request.args.get("l")
500
- if not link:
501
- raise Exception("No link provided")
502
-
503
- res = requests.head(link)
504
-
505
- if res.status_code != 200:
506
- raise Exception("Error requesting resource")
507
-
508
- length = res.headers.get("Content-Length")
509
- if length:
510
- length = int(length)
511
-
512
- return {
513
- "status": "ok",
514
- "response": {
515
- "artifactSize": length,
516
- }
517
- }
518
-
519
-
520
- @bp.route("/user/jobs")
521
- @api_login_required
522
- def user_jobs():
523
- service = ArgusService()
524
- result = list(service.get_jobs_for_user(user=g.user))
525
-
526
- return {
527
- "status": "ok",
528
- "response": result
529
- }
@@ -1,67 +0,0 @@
1
- import os
2
- import hashlib
3
- from flask import (
4
- Blueprint, flash, g, redirect, render_template, request, session, url_for, current_app
5
- )
6
- from werkzeug.security import check_password_hash
7
- from argus.backend.models.web import User
8
- from argus.backend.service.user import UserService, UserServiceException, load_logged_in_user, login_required
9
-
10
- bp = Blueprint('auth', __name__, url_prefix='/auth')
11
-
12
-
13
- @bp.route('/register', methods=('GET', 'POST'))
14
- def register():
15
- return redirect(url_for("auth.login"))
16
-
17
-
18
- @bp.route('/login', methods=('GET', 'POST'))
19
- def login():
20
- token = hashlib.sha256((os.urandom(64))).hexdigest()
21
- session["csrf_token"] = token
22
-
23
- if request.method == 'POST':
24
- try:
25
- if "password" not in current_app.config.get("LOGIN_METHODS", []):
26
- raise UserServiceException("Password Login is disabled")
27
- username = request.form["username"]
28
- password = request.form["password"]
29
-
30
- try:
31
- user: User = User.get(username=username)
32
- except User.DoesNotExist:
33
- raise UserServiceException("User not found")
34
-
35
- if not check_password_hash(user.password, password):
36
- raise UserServiceException("Incorrect Password")
37
-
38
- session.clear()
39
- session["user_id"] = str(user.id)
40
- session["csrf_token"] = token
41
- except UserServiceException as exc:
42
- flash(next(iter(exc.args), "No message"), category="error")
43
-
44
- return redirect(url_for('main.home'))
45
-
46
- return render_template('auth/login.html.j2',
47
- csrf_token=token,
48
- github_cid=current_app.config.get("GITHUB_CLIENT_ID", "NO_CLIENT_ID"),
49
- github_scopes=current_app.config.get("GITHUB_SCOPES", "user:email read:user read:org repo")
50
- )
51
-
52
-
53
- @bp.route("/profile/api/token/generate", methods=("POST",))
54
- @login_required
55
- def generate_api_token():
56
- new_token = UserService().generate_token(g.user)
57
- session["token_generated"] = new_token
58
- return redirect(url_for('main.profile'))
59
-
60
-
61
- @bp.route('/logout', methods=("POST",))
62
- def logout():
63
- session.clear()
64
- return redirect(url_for('auth.login'))
65
-
66
-
67
- bp.before_app_request(load_logged_in_user)
@@ -1,108 +0,0 @@
1
- from flask import Blueprint, request
2
-
3
- from argus.backend.error_handlers import handle_api_exception
4
- from argus.backend.service.user import api_login_required
5
- from argus.backend.service.client_service import ClientService
6
- from argus.backend.util.common import get_payload
7
- from argus.backend.plugins.loader import AVAILABLE_PLUGINS
8
-
9
- bp = Blueprint("client_api", __name__, url_prefix="/client")
10
- bp.register_error_handler(Exception, handle_api_exception)
11
- for plugin in AVAILABLE_PLUGINS.values():
12
- if plugin.controller:
13
- bp.register_blueprint(plugin.controller)
14
-
15
-
16
- @bp.route("/testrun/<string:run_type>/submit", methods=["POST"])
17
- @api_login_required
18
- def submit_run(run_type: str):
19
- payload = get_payload(request)
20
- result = ClientService().submit_run(run_type=run_type, request_data=payload)
21
- return {
22
- "status": "ok",
23
- "response": result
24
- }
25
-
26
- @bp.route("/testrun/<string:run_type>/<string:run_id>/get", methods=["GET"])
27
- @api_login_required
28
- def get_run(run_type: str, run_id: str):
29
- result = ClientService().get_run(run_type=run_type, run_id=run_id)
30
- return {
31
- "status": "ok",
32
- "response": result
33
- }
34
-
35
-
36
- @bp.route("/testrun/<string:run_type>/<string:run_id>/heartbeat", methods=["POST"])
37
- @api_login_required
38
- def run_heartbeat(run_type: str, run_id: str):
39
- result = ClientService().heartbeat(run_type=run_type, run_id=run_id)
40
- return {
41
- "status": "ok",
42
- "response": result
43
- }
44
-
45
-
46
- @bp.route("/testrun/<string:run_type>/<string:run_id>/get_status")
47
- @api_login_required
48
- def run_get_status(run_type: str, run_id: str):
49
- result = ClientService().get_run_status(run_type=run_type, run_id=run_id)
50
- return {
51
- "status": "ok",
52
- "response": result
53
- }
54
-
55
-
56
- @bp.route("/testrun/<string:run_type>/<string:run_id>/set_status", methods=["POST"])
57
- @api_login_required
58
- def run_set_status(run_type: str, run_id: str):
59
- payload = get_payload(request)
60
- result = ClientService().update_run_status(run_type=run_type, run_id=run_id, new_status=payload["new_status"])
61
- return {
62
- "status": "ok",
63
- "response": result
64
- }
65
-
66
-
67
- @bp.route("/testrun/<string:run_type>/<string:run_id>/update_product_version", methods=["POST"])
68
- @api_login_required
69
- def run_update_product_version(run_type: str, run_id: str):
70
- payload = get_payload(request)
71
- result = ClientService().submit_product_version(
72
- run_type=run_type, run_id=run_id, version=payload["product_version"])
73
- return {
74
- "status": "ok",
75
- "response": result
76
- }
77
-
78
-
79
- @bp.route("/testrun/<string:run_type>/<string:run_id>/logs/submit", methods=["POST"])
80
- @api_login_required
81
- def run_submit_logs(run_type: str, run_id: str):
82
- payload = get_payload(request)
83
- result = ClientService().submit_logs(run_type=run_type, run_id=run_id, logs=payload["logs"])
84
- return {
85
- "status": "ok",
86
- "response": result
87
- }
88
-
89
-
90
- @bp.route("/testrun/<string:run_type>/<string:run_id>/finalize", methods=["POST"])
91
- @api_login_required
92
- def run_finalize(run_type: str, run_id: str):
93
- try:
94
- payload = get_payload(request)
95
- except Exception:
96
- payload = None
97
- result = ClientService().finish_run(run_type=run_type, run_id=run_id, payload=payload)
98
- return {
99
- "status": "ok",
100
- "response": result
101
- }
102
-
103
-
104
- @bp.route("/testrun/<string:run_type>/<string:run_id>/submit_results", methods=["POST"])
105
- @api_login_required
106
- def submit_results(run_type: str, run_id: str):
107
- payload = get_payload(request)
108
- return ClientService().submit_results(run_type=run_type, run_id=run_id, results=payload)