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

41 statements  

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

14 

15dashboard = Dashboard(api_session) 

16 

17members = flask.Blueprint( 

18 "members", 

19 __name__, 

20) 

21 

22 

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

24@login_required 

25@exchange_required 

26def get_manage_members(store_id): 

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

28 

29 for item in members: 

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

31 item["current_user"] = True 

32 

33 return jsonify(members) 

34 

35 

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

37@login_required 

38@exchange_required 

39def post_manage_members(store_id): 

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

41 

42 res = {} 

43 

44 try: 

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

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

47 except StoreApiResponseErrorList as api_response_error_list: 

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

49 

50 msgs = [ 

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

52 for error in api_response_error_list.errors 

53 ] 

54 

55 for code in codes: 

56 account_id = "" 

57 

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

59 if account_id: 

60 res["msg"] = code 

61 else: 

62 res["msg"] = "invite" 

63 

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

65 res["msg"] = code 

66 else: 

67 for msg in msgs: 

68 flask.flash(msg, "negative") 

69 

70 return jsonify(res)