Coverage for webapp/publisher/snaps/release_views.py: 89%
85 statements
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-26 22:06 +0000
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-26 22:06 +0000
1# Packages
2import flask
3from canonicalwebteam.store_api.dashboard import Dashboard
4from canonicalwebteam.exceptions import StoreApiResponseErrorList
6# Local
7from webapp.helpers import api_publisher_session
8from webapp.decorators import login_required
10dashboard = Dashboard(api_publisher_session)
13@login_required
14def redirect_get_release_history(snap_name):
15 return flask.redirect(
16 flask.url_for(".get_release_history", snap_name=snap_name)
17 )
20@login_required
21def get_releases(snap_name):
22 # If this fails, the page will 404
23 dashboard.get_snap_info(flask.session, snap_name)
24 return flask.render_template("store/publisher.html")
27@login_required
28def redirect_post_release(snap_name):
29 return flask.redirect(
30 flask.url_for(".post_release", snap_name=snap_name), 307
31 )
34@login_required
35def get_release_history_json(snap_name):
36 page = flask.request.args.get("page", default=1, type=int)
38 try:
39 release_history = dashboard.snap_release_history(
40 flask.session, snap_name, page
41 )
42 except StoreApiResponseErrorList as api_response_error_list:
43 if api_response_error_list.status_code == 404:
44 return flask.abort(404, "No snap named {}".format(snap_name))
45 else:
46 return flask.jsonify(api_response_error_list.errors), 400
48 return flask.jsonify(release_history)
51@login_required
52def post_release(snap_name):
53 data = flask.request.json
55 if not data:
56 response = {"errors": ["No changes were submitted"]}
57 return flask.jsonify(response), 400
59 try:
60 response = dashboard.post_snap_release(flask.session, data)
61 except StoreApiResponseErrorList as api_response_error_list:
62 if api_response_error_list.status_code == 404:
63 return flask.abort(404, "No snap named {}".format(snap_name))
64 else:
65 return (
66 flask.jsonify(
67 {
68 "errors": api_response_error_list.errors,
69 }
70 ),
71 400,
72 )
74 return flask.jsonify(response)
77@login_required
78def redirect_post_close_channel(snap_name):
79 return flask.redirect(
80 flask.url_for(".post_close_channel", snap_name=snap_name), 307
81 )
84@login_required
85def post_close_channel(snap_name):
86 data = flask.request.json
88 if not data:
89 return flask.jsonify({}), 400
91 try:
92 snap_id = dashboard.get_snap_id(flask.session, snap_name)
93 except StoreApiResponseErrorList as api_response_error_list:
94 if api_response_error_list.status_code == 404:
95 return flask.abort(404, "No snap named {}".format(snap_name))
96 else:
97 return flask.jsonify(api_response_error_list.errors), 400
99 try:
100 response = dashboard.post_close_channel(flask.session, snap_id, data)
101 except StoreApiResponseErrorList as api_response_error_list:
102 if api_response_error_list.status_code == 404:
103 return flask.abort(404, "No snap named {}".format(snap_name))
104 else:
105 response = {
106 "errors": api_response_error_list.errors,
107 "success": False,
108 }
109 return flask.jsonify(response), 400
111 response["success"] = True
112 return flask.jsonify(response)
115@login_required
116def post_default_track(snap_name):
117 data = flask.request.json
119 if not data:
120 return flask.jsonify({}), 400
122 try:
123 snap_id = dashboard.get_snap_id(flask.session, snap_name)
124 except StoreApiResponseErrorList as api_response_error_list:
125 if api_response_error_list.status_code == 404:
126 return flask.abort(404, "No snap named {}".format(snap_name))
127 else:
128 return flask.jsonify(api_response_error_list.errors), 400
130 try:
131 dashboard.snap_metadata(flask.session, snap_id, data)
132 except StoreApiResponseErrorList as api_response_error_list:
133 if api_response_error_list.status_code == 404:
134 return flask.abort(404, "No snap named {}".format(snap_name))
135 else:
136 response = {
137 "errors": api_response_error_list.errors,
138 "success": False,
139 }
140 return flask.jsonify(response), 400
142 return flask.jsonify({"success": True})
145@login_required
146def get_snap_revision_json(snap_name, revision):
147 """
148 Return JSON object from the publisher API
149 """
150 revision = dashboard.get_snap_revision(flask.session, snap_name, revision)
152 return flask.jsonify(revision)