Coverage for webapp/endpoints/publisher/register.py: 78%

45 statements  

« prev     ^ index     » next       coverage.py v7.14.1, created at 2026-06-15 22:43 +0000

1# Packages 

2import bleach 

3import flask 

4from canonicalwebteam.store_api.dashboard import Dashboard 

5from canonicalwebteam.exceptions import StoreApiResponseErrorList 

6from flask.json import jsonify 

7 

8# Local 

9from webapp.helpers import api_publisher_session 

10from webapp.decorators import login_required 

11 

12dashboard = Dashboard(api_publisher_session) 

13 

14 

15@login_required 

16def post_register_name(): 

17 snap_name = flask.request.form.get("snap_name") 

18 res = {} 

19 

20 if not snap_name: 

21 res["success"] = False 

22 res["message"] = "You must define a snap name" 

23 

24 return jsonify(res) 

25 

26 is_private = flask.request.form.get("is_private") == "private" 

27 store = flask.request.form.get("store") 

28 

29 try: 

30 dashboard.post_register_name( 

31 session=flask.session, 

32 snap_name=snap_name, 

33 registrant_comment=None, 

34 is_private=is_private, 

35 store=store, 

36 ) 

37 except StoreApiResponseErrorList as api_response_error_list: 

38 res = { 

39 "success": False, 

40 "data": { 

41 "is_private": is_private, 

42 "snap_name": snap_name, 

43 "store": store, 

44 }, 

45 } 

46 

47 if api_response_error_list.status_code == 409: 

48 for error in api_response_error_list.errors: 

49 res["data"]["error_code"] = error["code"] 

50 

51 return jsonify(res) 

52 

53 if api_response_error_list.status_code == 400: 

54 res["data"]["error_code"] = "no-permission" 

55 res["message"] = """You don't have permission 

56 to register a snap in this store. 

57 Please see store administrator.""" 

58 

59 return jsonify(res) 

60 

61 res["message"] = "Unable to register snap name" 

62 res["data"] = { 

63 "snap_name": snap_name, 

64 "is_private": is_private, 

65 "store": store, 

66 } 

67 

68 return jsonify(res) 

69 

70 return jsonify({"success": True}) 

71 

72 

73@login_required 

74def post_register_name_dispute(): 

75 try: 

76 claim = flask.json.loads(flask.request.data) 

77 snap_name = claim["snap-name"] 

78 claim_comment = claim["claim-comment"] 

79 dashboard.post_register_name_dispute( 

80 flask.session, 

81 bleach.clean(snap_name), 

82 bleach.clean(claim_comment), 

83 ) 

84 except StoreApiResponseErrorList as api_response_error_list: 

85 if api_response_error_list.status_code in [400, 409]: 

86 return jsonify( 

87 { 

88 "success": False, 

89 "data": api_response_error_list.errors, 

90 "message": api_response_error_list.errors[0]["message"], 

91 } 

92 ) 

93 return jsonify({"success": True})