MCPcopy
hub / github.com/diffgram/diffgram / report_save_api

Function report_save_api

default/methods/report/report_save_api.py:10–70  ·  view source on GitHub ↗

May or may not have an ID if it's new. metadata meaning it's data one level removed from actual report ie how the report should be structured see report_spec for an example

()

Source from the content-addressed store, hash-verified

8 methods = ['POST'])
9@General_permissions.grant_permission_for(['normal_user'])
10def report_save_api():
11 """
12 May or may not have an ID if it's new.
13
14 metadata meaning it's data one level removed from actual report
15 ie how the report should be structured
16 see report_spec for an example
17
18 """
19 spec_list = [
20 {"report_template_id": {
21 'kind': int,
22 'required': False # (ie for first save)
23 }
24 },
25 {'metadata': dict}
26 ]
27
28 log, input, untrusted_input = regular_input.master(request = request,
29 spec_list = spec_list)
30 if len(log["error"].keys()) >= 1:
31 return jsonify(log = log), 400
32
33 with sessionMaker.session_scope() as session:
34
35 report_runner = Report_Runner(
36 session = session,
37 member = None,
38 report_template_id = input['report_template_id'],
39 metadata = input['metadata']
40 )
41
42 if len(report_runner.log["error"].keys()) >= 1:
43 return jsonify(log = report_runner.log), 400
44
45 # TODO abstract this check into a better function to share with running it
46 if input['metadata'].get('diffgram_wide_default') is True:
47
48 # TODO edge case of default wide === false (After
49 # prior being True) is not handled yet
50
51 user = User.get(session)
52 if user is None or user.is_super_admin is not True:
53 log['error']['permission'] = "'diffgram_wide_default' Invalid permission."
54 return jsonify(log = log), 400
55 else:
56 report_runner.validate_report_permissions_scope(
57 scope = input['metadata'].get('scope'),
58 project_string_id = input['metadata'].get('project_string_id'),
59 )
60
61 report_runner.save()
62
63 if len(report_runner.log["error"].keys()) >= 1:
64 return jsonify(log = report_runner.log), 400
65
66 report_runner.log['success'] = True
67

Callers

nothing calls this directly

Calls 5

saveMethod · 0.95
Report_RunnerClass · 0.85
getMethod · 0.45
serializeMethod · 0.45

Tested by

no test coverage detected