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

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 

10 

11# Local 

12from webapp.decorators import login_required, exchange_required 

13from webapp.helpers import api_publisher_session, api_session, get_brand_id 

14 

15dashboard = Dashboard(api_session) 

16publisher_gateway = PublisherGW("snap", api_publisher_session) 

17 

18endpoints = flask.Blueprint( 

19 "endpoints", 

20 __name__, 

21) 

22 

23 

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) 

32 

33 res = {"success": True, "data": stores} 

34 

35 return jsonify(res) 

36 

37 

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"] = [] 

44 

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 ) 

52 

53 res = {"success": True, "data": store} 

54 

55 return jsonify(res) 

56 

57 

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) 

66 

67 res["data"] = brand 

68 res["success"] = True 

69 

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"] = [] 

79 

80 response = make_response(res) 

81 response.cache_control.max_age = 3600 

82 

83 return response