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

41 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2025-12-29 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 res = {} 

42 

43 try: 

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

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

46 except StoreApiResponseErrorList as api_response_error_list: 

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

48 

49 msgs = [ 

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

51 for error in api_response_error_list.errors 

52 ] 

53 

54 for code in codes: 

55 account_id = "" 

56 

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

58 if account_id: 

59 res["msg"] = code 

60 else: 

61 res["msg"] = "invite" 

62 

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

64 res["msg"] = code 

65 else: 

66 for msg in msgs: 

67 flask.flash(msg, "negative") 

68 

69 return jsonify(res)