Coverage for webapp/endpoints/views.py: 96%
46 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 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/store/<store_id>")
39@login_required
40@exchange_required
41def get_settings(store_id):
42 store = dashboard.get_store(flask.session, store_id)
43 store["links"] = []
45 if any(role["role"] == "admin" for role in store["roles"]):
46 store["links"].append(
47 {"name": "Members", "path": f'/admin/{store["id"]}/members'}
48 )
49 store["links"].append(
50 {"name": "Settings", "path": f'/admin/${store["id"]}/settings'}
51 )
53 res = {"success": True, "data": store}
55 return jsonify(res)
58@endpoints.route("/api/store/<store_id>/brand")
59@login_required
60@exchange_required
61def get_brand_store(store_id: str):
62 brand_id = get_brand_id(flask.session, store_id)
63 res = {}
64 try:
65 brand = publisher_gateway.get_brand(flask.session, brand_id)
67 res["data"] = brand
68 res["success"] = True
70 except StoreApiResponseErrorList as error_list:
71 res["success"] = False
72 res["message"] = " ".join(
73 [
74 f"{error.get('message', 'An error occurred')}"
75 for error in error_list.errors
76 ]
77 )
78 res["data"] = []
80 response = make_response(res)
81 response.cache_control.max_age = 3600
83 return response