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
« 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
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"))
41 res = {}
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]
49 msgs = [
50 f"{error.get('message', 'An error occurred')}"
51 for error in api_response_error_list.errors
52 ]
54 for code in codes:
55 account_id = ""
57 if code == "store-users-no-match":
58 if account_id:
59 res["msg"] = code
60 else:
61 res["msg"] = "invite"
63 elif code == "store-users-multiple-matches":
64 res["msg"] = code
65 else:
66 for msg in msgs:
67 flask.flash(msg, "negative")
69 return jsonify(res)