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

45 statements  

« prev     ^ index     » next       coverage.py v7.10.5, created at 2025-08-26 22:06 +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[ 

56 "message" 

57 ] = """You don't have permission 

58 to register a snap in this store. 

59 Please see store administrator.""" 

60 

61 return jsonify(res) 

62 

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

64 res["data"] = { 

65 "snap_name": snap_name, 

66 "is_private": is_private, 

67 "store": store, 

68 } 

69 

70 return jsonify(res) 

71 

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

73 

74 

75@login_required 

76def post_register_name_dispute(): 

77 try: 

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

79 snap_name = claim["snap-name"] 

80 claim_comment = claim["claim-comment"] 

81 dashboard.post_register_name_dispute( 

82 flask.session, 

83 bleach.clean(snap_name), 

84 bleach.clean(claim_comment), 

85 ) 

86 except StoreApiResponseErrorList as api_response_error_list: 

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

88 return jsonify( 

89 { 

90 "success": False, 

91 "data": api_response_error_list.errors, 

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

93 } 

94 ) 

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