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

1# Packages 

2import flask 

3from canonicalwebteam.store_api.dashboard import Dashboard 

4from canonicalwebteam.exceptions import StoreApiResponseErrorList 

5 

6# Local 

7from webapp.helpers import api_publisher_session 

8from webapp.decorators import login_required 

9 

10dashboard = Dashboard(api_publisher_session) 

11 

12 

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 ) 

18 

19 

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") 

25 

26 

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 ) 

32 

33 

34@login_required 

35def get_release_history_json(snap_name): 

36 page = flask.request.args.get("page", default=1, type=int) 

37 

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 

47 

48 return flask.jsonify(release_history) 

49 

50 

51@login_required 

52def post_release(snap_name): 

53 data = flask.request.json 

54 

55 if not data: 

56 response = {"errors": ["No changes were submitted"]} 

57 return flask.jsonify(response), 400 

58 

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 ) 

73 

74 return flask.jsonify(response) 

75 

76 

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 ) 

82 

83 

84@login_required 

85def post_close_channel(snap_name): 

86 data = flask.request.json 

87 

88 if not data: 

89 return flask.jsonify({}), 400 

90 

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 

98 

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 

110 

111 response["success"] = True 

112 return flask.jsonify(response) 

113 

114 

115@login_required 

116def post_default_track(snap_name): 

117 data = flask.request.json 

118 

119 if not data: 

120 return flask.jsonify({}), 400 

121 

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 

129 

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 

141 

142 return flask.jsonify({"success": True}) 

143 

144 

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) 

151 

152 return flask.jsonify(revision)