7
7
import settings
8
8
9
9
10
+ def get_tool_info (whitelist , tool_name ):
11
+ """
12
+ Search the whitelist by tool name.
13
+
14
+ :returns: A dictionary , or none if no tool matching that name was found.
15
+ :rtype: dict or None
16
+ """
17
+ for category , category_tools in whitelist .items ():
18
+ for tool_info in category_tools :
19
+ print (tool_info )
20
+ if tool_info .get ("name" ) == tool_name :
21
+ tool_info .update ({"category" : category })
22
+ return tool_info
23
+
24
+ return None
25
+
26
+
10
27
def filter_tool_list (course_id , access_token ):
11
28
"""
12
29
Filter tool list down to those on whitelist and sort by category.
@@ -31,38 +48,45 @@ def filter_tool_list(course_id, access_token):
31
48
32
49
course = canvas .get_course (course_id )
33
50
installed_tools = course .get_external_tools (include_parents = True )
34
-
35
51
tools_by_category = defaultdict (list )
36
52
for installed_tool in installed_tools :
37
- for tool in whitelist :
38
- if installed_tool .name != tool .get ("name" ):
39
- continue
40
-
41
- is_course_navigation = hasattr (installed_tool , "course_navigation" )
42
-
43
- if tool .get ("is_launchable" , False ):
44
- if is_course_navigation :
45
- sessionless_launch_url = installed_tool .get_sessionless_launch_url (
46
- launch_type = "course_navigation"
47
- )
48
- else :
49
- sessionless_launch_url = installed_tool .get_sessionless_launch_url ()
50
- else :
51
- sessionless_launch_url = None
53
+ tool_info = get_tool_info (whitelist , installed_tool .name )
54
+ if not tool_info :
55
+ continue
52
56
53
- tool_info = tool
54
- tool_info .update (
55
- {
56
- "id" : installed_tool .id ,
57
- "lti_course_navigation" : is_course_navigation ,
58
- "sessionless_launch_url" : sessionless_launch_url ,
59
- "screenshot" : "screenshots/" + tool ["screenshot" ],
60
- }
61
- )
57
+ is_course_navigation = hasattr (installed_tool , "course_navigation" )
62
58
63
- tools_by_category [tool .get ("category" , "Uncategorized" )].append (tool_info )
64
-
65
- return tools_by_category
59
+ if tool_info .get ("is_launchable" , False ):
60
+ if is_course_navigation :
61
+ sessionless_launch_url = installed_tool .get_sessionless_launch_url (
62
+ launch_type = "course_navigation"
63
+ )
64
+ else :
65
+ sessionless_launch_url = installed_tool .get_sessionless_launch_url ()
66
+ else :
67
+ sessionless_launch_url = None
68
+
69
+ tool_info .update (
70
+ {
71
+ "id" : installed_tool .id ,
72
+ "lti_course_navigation" : is_course_navigation ,
73
+ "sessionless_launch_url" : sessionless_launch_url ,
74
+ "screenshot" : "screenshots/" + tool_info ["screenshot" ],
75
+ }
76
+ )
77
+
78
+ tools_by_category [tool_info .get ("category" , "Uncategorized" )].append (tool_info )
79
+
80
+ for category , tools in tools_by_category .items ():
81
+ # Determine tool order based on order in whitelist
82
+ order = {
83
+ tool .get ("display_name" ): i for i , tool in enumerate (whitelist [category ])
84
+ }
85
+ tools_by_category [category ] = sorted (
86
+ tools , key = lambda k : order [k ["display_name" ]]
87
+ )
88
+
89
+ return tools_by_category , list (whitelist .keys ())
66
90
67
91
68
92
def slugify (value ):
0 commit comments