8 from bs4
import BeautifulSoup
25 def prune_dict(list_of_data, keys):
27 for val
in list_of_data:
28 valid_val = dict((j, val[j])
for j
in val
if j
in keys)
29 files.append(valid_val)
32 def string_from_html(data):
33 soup = BeautifulSoup(data,
'lxml')
35 for ptag
in soup.find_all(
'p'):
42 def get_list_of_courses(request_helper):
44 input : object of class RequestHelper
45 output : two dictionaries: 1. course_ids with key value pairs as 'SubjectCode' : 'Id used by moodle for it'
46 2. course_names with key value pairs as 'SubjectCode' : 'Name of the Subject'
48 result = request_helper.post_REST(
'core_webservice_get_site_info')
49 if 'userid' not in result:
50 raise RuntimeError(
'Error could not receive your user ID!')
51 userid = result.get(
'userid',
'')
52 data = {
'userid': userid}
53 result = request_helper.post_REST(
'core_enrol_get_users_courses', data)
57 course_ids[index[
'shortname'][3:6]] = index[
'id']
58 course_names[index[
'shortname'][3:6]] = index[
'fullname']
59 return course_ids,course_names
65 def get_assignments_info(request_helper,course_id,all = True):
67 Returns information of all assignments , if the second aruguement is false it returns info of only the latest assignment
68 input : object of class RequestHelper
69 output : list of all assignments with following attributes {'id','name','course','duedate','intro','introattachments'}
72 courseids = {
"0":course_id}
73 extra_data.update({
'courseids': courseids})
74 result = request_helper.post_REST(
'mod_assign_get_assignments', extra_data)
75 assignments = result[
'courses'][0][
'assignments']
78 for assign
in assignments:
79 data = dict((k, assign[k])
for k
in assign
if k
in [
'id',
'name',
'course',
'duedate',
'timemodified',
'intro',
'introattachments'])
80 soup = BeautifulSoup(data[
'intro'],
'lxml')
83 data[
'intro'] = string_from_html(data[
'intro'])
85 if data[
'introattachments']:
86 data[
'introattachments'] = prune_dict(data[
'introattachments'],[
'filename',
'fileurl'])
100 def get_quizzes_info(request_helper,course_id,all = True):
102 returns information about all quizes if all is true else about the latest quiz
103 input : object of class RequestHelper, couse_id, all flag
104 output : list of all quizzes with following attributes {''id','name','timeopen','timeclose','intro','grade'}
107 courseids = {
"0":course_id}
108 extra_data.update({
'courseids': courseids})
109 result = request_helper.post_REST(
'mod_quiz_get_quizzes_by_courses', extra_data)
110 quizzes = result[
'quizzes']
115 data = dict((k, quiz[k])
for k
in quiz
if k
in [
'id',
'name',
'timeopen',
'timeclose',
'intro',
'grade'])
118 data[
'intro'] = string_from_html(data[
'intro'])
129 def get_course_contents(request_helper,course_id):
131 returns contents of course week wise as uploaded
132 input : object of class RequestHelper
133 output: course contents for all weeks
135 data = {
'courseid': course_id}
136 result = request_helper.post_REST(
'core_course_get_contents', data)
139 data = dict((k, week[k])
for k
in week
if k
in [
'id',
'name',
'modules'])
142 for mod
in data[
'modules']:
143 fl = dict((j, mod[j])
for j
in mod
if j
in [
'url',
'name',
'contents'])
144 if 'contents' in fl.keys():
145 fl[
'contents'] = prune_dict(fl[
'contents'],[
'filename',
'fileurl'])
147 data[
'modules'] = files
155 def get_discussion_forum_id(request_helper,course_id):
157 input : object of class RequestHelper and course id
158 output: dictionary containing id and name of the Announcements forum
161 courseids = {
"0":course_id}
162 extra_data.update({
'courseids': courseids})
163 result = request_helper.post_REST(
'mod_forum_get_forums_by_courses', extra_data)
166 if(forum[
'name']
in [
'Announcements']):
167 forums = dict((k, forum[k])
for k
in forum
if k
in [
'id',
'name'])
174 def get_discussion_forum_discussions(request_helper,forum_id):
176 input : object of class RequestHelper, forum_id
177 output: returns most recent 5 discussions of the discussion forum
182 result = request_helper.post_REST(
'mod_forum_get_forum_discussions', data)
183 discussions = result[
'discussions']
184 if(len(discussions) > 5):
185 discussions = discussions[0:5]
186 discussions = prune_dict(discussions,[
'name',
'created',
'message'])
187 for i
in discussions:
188 i[
'message'] = string_from_html(i[
'message'])
192 def get_discussion_forum_posts():
194 input : object of class RequestHelper
197 'discussionid': 16545,
198 'sortby':
'modified',
199 'sortdirection':
'ASC',
201 posts_result = request_helper.post_REST(
'mod_forum_get_forum_discussion_posts', data)
210 course_ids,course_names = get_list_of_courses(request_helper)
211 print(course_ids,course_names)
216 course_id = 219 #eg for 699
217 assignments = get_assignments_info(request_helper,course_id,False)
223 course_id = 230 #eg for 771 course
224 quizzes = get_quizzes_info(request_helper,course_id,True)
230 course_id = 230 #eg for 771 course
231 quizzes = get_quizzes_info(request_helper,course_id,True)
237 ann_forum = get_discussion_forum_id(request_helper,230)
243 cc = get_course_contents(request_helper,230)
249 discs = get_discussion_forum_discussions(request_helper,229)
252 print(type(discs),discs)