Coverage for webapp/endpoints/views.py: 96%
46 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 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
16dashboard = Dashboard(api_session)
17publisher_gateway = PublisherGW("snap", api_publisher_session)
19endpoints = flask.Blueprint(
20 "endpoints",
21 __name__,
22)
25@endpoints.route("/api/stores")
26@login_required
27@exchange_required
28def get_stores():
29 """
30 In this view we get all the stores the user has access to or we show a 403
31 """
32 stores = dashboard.get_stores(flask.session)
34 res = {"success": True, "data": stores}
36 return jsonify(res)
39@endpoints.route("/api/store/<store_id>")
40@login_required
41@exchange_required
42def get_settings(store_id):
43 store = dashboard.get_store(flask.session, store_id)
44 store["links"] = []
46 if any(role["role"] == "admin" for role in store["roles"]):
47 store["links"].append(
48 {"name": "Members", "path": f'/admin/{store["id"]}/members'}
49 )
50 store["links"].append(
51 {"name": "Settings", "path": f'/admin/${store["id"]}/settings'}
52 )
54 res = {"success": True, "data": store}
56 return jsonify(res)
59@endpoints.route("/api/store/<store_id>/brand")
60@login_required
61@exchange_required
62def get_brand_store(store_id: str):
63 brand_id = get_brand_id(flask.session, store_id)
64 res = {}
65 try:
66 brand = publisher_gateway.get_brand(flask.session, brand_id)
68 res["data"] = brand
69 res["success"] = True
71 except StoreApiResponseErrorList as error_list:
72 res["success"] = False
73 res["message"] = " ".join(
74 [
75 f"{error.get('message', 'An error occurred')}"
76 for error in error_list.errors
77 ]
78 )
79 res["data"] = []
81 response = make_response(res)
82 response.cache_control.max_age = 3600
84 return response