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