Coverage for webapp/endpoints/members.py: 68%

41 statements  

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

1# Packages 

2import json 

3import flask 

4from flask.json import jsonify 

5from canonicalwebteam.exceptions import ( 

6 StoreApiResponseErrorList, 

7) 

8from canonicalwebteam.store_api.dashboard import Dashboard 

9 

10# Local 

11from webapp.decorators import login_required, exchange_required 

12from webapp.helpers import api_session 

13 

14dashboard = Dashboard(api_session) 

15 

16members = flask.Blueprint( 

17 "members", 

18 __name__, 

19) 

20 

21 

22@members.route("/api/store/<store_id>/members") 

23@login_required 

24@exchange_required 

25def get_manage_members(store_id): 

26 members = dashboard.get_store_members(flask.session, store_id) 

27 

28 for item in members: 

29 if item["email"] == flask.session["publisher"]["email"]: 

30 item["current_user"] = True 

31 

32 return jsonify(members) 

33 

34 

35@members.route("/api/store/<store_id>/members", methods=["POST"]) 

36@login_required 

37@exchange_required 

38def post_manage_members(store_id): 

39 members = json.loads(flask.request.form.get("members")) 

40 res = {} 

41 

42 try: 

43 dashboard.update_store_members(flask.session, store_id, members) 

44 res["msg"] = "Changes saved" 

45 except StoreApiResponseErrorList as api_response_error_list: 

46 codes = [error.get("code") for error in api_response_error_list.errors] 

47 

48 msgs = [ 

49 f"{error.get('message', 'An error occurred')}" 

50 for error in api_response_error_list.errors 

51 ] 

52 

53 for code in codes: 

54 account_id = "" 

55 

56 if code == "store-users-no-match": 

57 if account_id: 

58 res["msg"] = code 

59 else: 

60 res["msg"] = "invite" 

61 

62 elif code == "store-users-multiple-matches": 

63 res["msg"] = code 

64 else: 

65 for msg in msgs: 

66 flask.flash(msg, "negative") 

67 

68 return jsonify(res)