Coverage for webapp/tutorials/views.py : 48%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from os import getenv
3import flask
4import talisker
6from canonicalwebteam.discourse import DiscourseAPI, TutorialParser, Tutorials
8DISCOURSE_API_KEY = getenv("DISCOURSE_API_KEY")
9DISCOURSE_API_USERNAME = getenv("DISCOURSE_API_USERNAME")
12def init_tutorials(app, url_prefix):
13 session = talisker.requests.get_session()
14 tutorials_discourse = Tutorials(
15 parser=TutorialParser(
16 api=DiscourseAPI(
17 base_url="https://forum.snapcraft.io/",
18 session=session,
19 api_key=DISCOURSE_API_KEY,
20 api_username=DISCOURSE_API_USERNAME,
21 get_topics_query_id=2,
22 ),
23 index_topic_id=15409,
24 url_prefix=url_prefix,
25 ),
26 document_template="tutorials/tutorial.html",
27 url_prefix=url_prefix,
28 blueprint_name="tutorials",
29 )
31 @app.route(url_prefix)
32 def index():
33 tutorials_discourse.parser.parse()
34 tutorials_discourse.parser.parse_topic(
35 tutorials_discourse.parser.index_topic
36 )
38 tutorials = tutorials_discourse.parser.tutorials
39 topic_list = []
41 for item in tutorials:
42 if item["categories"] not in topic_list:
43 topic_list.append(item["categories"])
44 item["categories"] = {
45 "slug": item["categories"],
46 "name": " ".join(
47 [
48 word.capitalize()
49 for word in item["categories"].split("-")
50 ]
51 ),
52 }
54 topic_list.sort()
55 topics = []
57 for topic in topic_list:
58 topics.append(
59 {
60 "slug": topic,
61 "name": " ".join(
62 [word.capitalize() for word in topic.split("-")]
63 ),
64 }
65 )
67 return flask.render_template(
68 "tutorials/index.html",
69 tutorials=tutorials,
70 topics=topics,
71 )
73 tutorials_discourse.init_app(app)