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
« 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
10# Local
11from webapp.decorators import login_required, exchange_required
12from webapp.helpers import api_session
14dashboard = Dashboard(api_session)
16members = flask.Blueprint(
17 "members",
18 __name__,
19)
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)
28 for item in members:
29 if item["email"] == flask.session["publisher"]["email"]:
30 item["current_user"] = True
32 return jsonify(members)
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 = {}
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]
48 msgs = [
49 f"{error.get('message', 'An error occurred')}"
50 for error in api_response_error_list.errors
51 ]
53 for code in codes:
54 account_id = ""
56 if code == "store-users-no-match":
57 if account_id:
58 res["msg"] = code
59 else:
60 res["msg"] = "invite"
62 elif code == "store-users-multiple-matches":
63 res["msg"] = code
64 else:
65 for msg in msgs:
66 flask.flash(msg, "negative")
68 return jsonify(res)