Coverage for webapp/publisher/snaps/listing_views.py: 82%

50 statements  

« prev     ^ index     » next       coverage.py v7.10.5, created at 2025-08-26 22:06 +0000

1# Standard library 

2from json import loads 

3 

4# Packages 

5import bleach 

6import flask 

7from canonicalwebteam.store_api.dashboard import Dashboard 

8 

9# Local 

10from webapp import helpers 

11from webapp.helpers import api_session 

12from webapp.decorators import login_required 

13from webapp.markdown import parse_markdown_description 

14from webapp.publisher.snaps import preview_data 

15from webapp.store.logic import ( 

16 filter_screenshots, 

17 get_video, 

18) 

19 

20dashboard = Dashboard(api_session) 

21 

22 

23def get_market_snap(snap_name): 

24 return flask.redirect( 

25 flask.url_for(".get_listing_data", snap_name=snap_name) 

26 ) 

27 

28 

29def redirect_post_market_snap(snap_name): 

30 return flask.redirect( 

31 flask.url_for(".post_listing_data", snap_name=snap_name) 

32 ) 

33 

34 

35@login_required 

36def get_listing_snap(snap_name): 

37 snap_details = dashboard.get_snap_info(flask.session, snap_name) 

38 token = "" 

39 if snap_details["links"]["website"]: 

40 token = helpers.get_dns_verification_token( 

41 snap_details["snap_name"], snap_details["links"]["website"][0] 

42 ) 

43 return flask.render_template( 

44 "store/publisher.html", 

45 snap_name=snap_name, 

46 dns_verification_token=token, 

47 ) 

48 

49 

50@login_required 

51def post_preview(snap_name): 

52 snap_details = dashboard.get_snap_info(flask.session, snap_name) 

53 

54 context = { 

55 "publisher": snap_details["publisher"]["display-name"], 

56 "username": snap_details["publisher"]["username"], 

57 "developer_validation": snap_details["publisher"]["validation"], 

58 "categories": [], 

59 } 

60 

61 state = loads(flask.request.form["state"]) 

62 

63 for item in state: 

64 if item == "description": 

65 context[item] = parse_markdown_description( 

66 bleach.clean(state[item], tags=[]) 

67 ) 

68 else: 

69 context[item] = state[item] 

70 

71 context["is_preview"] = True 

72 context["package_name"] = context["snap_name"] 

73 context["snap_title"] = context["title"] 

74 context["appliances"] = [] 

75 

76 # Images 

77 icon = helpers.get_icon(context["images"]) 

78 context["screenshots"] = filter_screenshots(context["images"]) 

79 context["icon_url"] = icon 

80 

81 if context["video"]: 

82 context["video"] = get_video(context["video"]) 

83 

84 # Channel map 

85 context["channel_map"] = [] 

86 context["default_track"] = "latest" 

87 context["lowest_risk_available"] = "stable" 

88 context["version"] = "test" 

89 context["has_stable"] = True 

90 

91 # metadata 

92 context["last_updated"] = "Preview" 

93 context["filesize"] = "1mb" 

94 

95 # maps 

96 context["countries"] = preview_data.get_countries() 

97 context["normalized_os"] = preview_data.get_normalised_oses() 

98 

99 return flask.render_template("store/snap-details.html", **context)