Files
edx-platform/lms/djangoapps/discussion_api/api.py
Greg Price ebff94af3f Add discussion topic API
This is the first stage of the new Discussion API.

JIRA: MA-604
2015-04-30 14:25:05 -04:00

66 lines
1.8 KiB
Python

"""
Discussion API internal interface
"""
from collections import defaultdict
from django_comment_client.utils import get_accessible_discussion_modules
def get_course_topics(course, user):
"""
Return the course topic listing for the given course and user.
Parameters:
course: The course to get topics for
user: The requesting user, for access control
Returns:
A course topic listing dictionary; see discussion_api.views.CourseTopicViews
for more detail.
"""
def get_module_sort_key(module):
"""
Get the sort key for the module (falling back to the discussion_target
setting if absent)
"""
return module.sort_key or module.discussion_target
discussion_modules = get_accessible_discussion_modules(course, user)
modules_by_category = defaultdict(list)
for module in discussion_modules:
modules_by_category[module.discussion_category].append(module)
courseware_topics = [
{
"id": None,
"name": category,
"children": [
{
"id": module.discussion_id,
"name": module.discussion_target,
"children": [],
}
for module in sorted(modules_by_category[category], key=get_module_sort_key)
],
}
for category in sorted(modules_by_category.keys())
]
non_courseware_topics = [
{
"id": entry["id"],
"name": name,
"children": [],
}
for name, entry in sorted(
course.discussion_topics.items(),
key=lambda item: item[1].get("sort_key", item[0])
)
]
return {
"courseware_topics": courseware_topics,
"non_courseware_topics": non_courseware_topics,
}