Coverage for webapp/endpoints/views.py: 96%
53 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-20 22:09 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-20 22:09 +0000
1# Packages
2import flask
3from flask import make_response
4from canonicalwebteam.exceptions import (
5 StoreApiResponseErrorList,
6)
7from canonicalwebteam.store_api.dashboard import Dashboard
8from canonicalwebteam.store_api.publishergw import PublisherGW
9from flask.json import jsonify
11# Local
12from webapp.decorators import login_required, exchange_required
13from webapp.helpers import api_publisher_session, api_session, get_brand_id
15dashboard = Dashboard(api_session)
16publisher_gateway = PublisherGW("snap", api_publisher_session)
18endpoints = flask.Blueprint(
19 "endpoints",
20 __name__,
21)
24@endpoints.route("/api/stores")
25@login_required
26@exchange_required
27def get_stores():
28 """
29 In this view we get all the stores the user has access to or we show a 403
30 """
31 stores = dashboard.get_stores(flask.session)
33 res = {"success": True, "data": stores}
35 return jsonify(res)
38@endpoints.route("/api/whoami")
39@login_required
40@exchange_required
41def get_macaroon_info():
42 macaroon_info = publisher_gateway.macaroon_info(
43 flask.session["developer_token"]
44 )
46 res = {"success": True, "data": macaroon_info}
48 return jsonify(res)
51@endpoints.route("/api/store/<store_id>")
52@login_required
53@exchange_required
54def get_settings(store_id):
55 store = dashboard.get_store(flask.session, store_id)
56 store["links"] = []
58 if any(role["role"] == "admin" for role in store["roles"]):
59 store["links"].append(
60 {"name": "Members", "path": f'/admin/{store["id"]}/members'}
61 )
62 store["links"].append(
63 {"name": "Settings", "path": f'/admin/${store["id"]}/settings'}
64 )
66 res = {"success": True, "data": store}
68 return jsonify(res)
71@endpoints.route("/api/store/<store_id>/brand")
72@login_required
73@exchange_required
74def get_brand_store(store_id: str):
75 brand_id = get_brand_id(flask.session, store_id)
76 res = {}
77 try:
78 brand = publisher_gateway.get_brand(flask.session, brand_id)
80 res["data"] = brand
81 res["success"] = True
83 except StoreApiResponseErrorList as error_list:
84 res["success"] = False
85 res["message"] = " ".join(
86 [
87 f"{error.get('message', 'An error occurred')}"
88 for error in error_list.errors
89 ]
90 )
91 res["data"] = []
93 response = make_response(res)
94 response.cache_control.max_age = 3600
96 return response