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

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 

15 

16dashboard = Dashboard(api_session) 

17publisher_gateway = PublisherGW("snap", api_publisher_session) 

18 

19endpoints = flask.Blueprint( 

20 "endpoints", 

21 __name__, 

22) 

23 

24 

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) 

33 

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

35 

36 return jsonify(res) 

37 

38 

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

45 

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 ) 

53 

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

55 

56 return jsonify(res) 

57 

58 

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) 

67 

68 res["data"] = brand 

69 res["success"] = True 

70 

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

80 

81 response = make_response(res) 

82 response.cache_control.max_age = 3600 

83 

84 return response