def handle(self, *args, **options): if len(args): sis_term_id = args[0] else: raise CommandError("term_sis_id is required") report_client = Reports() term = report_client.get_term_by_sis_id(sis_term_id) user_report = report_client.create_course_sis_export_report( settings.RESTCLIENTS_CANVAS_ACCOUNT_ID, term_id=term.term_id ) sis_data = report_client.get_report_data(user_report) report_client.delete_report(user_report) ind_study_regexp = re.compile("-[A-F0-9]{32}$") course_client = Courses() print ["course_id", "name", "published", "public_syllabus"] row_count = sum(1 for row in csv.reader(sis_data)) curr_row = 0 for row in csv.reader(sis_data): curr_row += 1 if not len(row): continue sis_course_id = row[0] course_name = row[1] try: valid_academic_course_sis_id(sis_course_id) except CoursePolicyException: continue if ind_study_regexp.match(sis_course_id): continue try: course = course_client.get_course_by_sis_id(sis_course_id, params={"include": "syllabus_body"}) except DataFailureException as ex: print ex continue if course.syllabus_body is None: continue csv_line = [sis_course_id, course_name, str(course.workflow_state), course.public_syllabus] print csv_line print "Remaining: %s" % (row_count - curr_row) print csv_line sleep(1)
def get_unused_course_report_data(term_sis_id): report_client = Reports() term = report_client.get_term_by_sis_id(term_sis_id) unused_course_report = report_client.create_unused_courses_report( settings.RESTCLIENTS_CANVAS_ACCOUNT_ID, term_id=term.term_id) report_data = report_client.get_report_data(unused_course_report) report_client.delete_report(unused_course_report) return report_data
def handle(self, *args, **options): if len(args): sis_term_id = args[0] else: raise CommandError("term_sis_id is required") report_client = Reports() term = report_client.get_term_by_sis_id(sis_term_id) user_report = report_client.create_course_provisioning_report( settings.RESTCLIENTS_CANVAS_ACCOUNT_ID, term_id=term.term_id) sis_data = report_client.get_report_data(user_report) report_client.delete_report(user_report) ind_study_regexp = re.compile("-[A-F0-9]{32}$") course_client = Courses() for row in csv.reader(sis_data): if not len(row): continue sis_course_id = row[1] status = row[8] try: valid_academic_course_sis_id(sis_course_id) except CoursePolicyException: continue if ind_study_regexp.match(sis_course_id): continue if status is not None and status == "active": print sis_course_id
def handle(self, *args, **options): if len(args) == 2: subaccount_id = args[0] sis_term_id = args[1] else: raise CommandError("find_active_instructors <subaccount_id> <term_id>") accounts = Accounts() reports = Reports() pws = PWS() account = accounts.get_account(subaccount_id) term = reports.get_term_by_sis_id(sis_term_id) enrollment_report = reports.create_enrollments_provisioning_report(account.account_id, term.term_id) enrollment_data = reports.get_report_data(enrollment_report) all_instructors = {} enrollment_csv_data = csv.reader(enrollment_data) header = enrollment_csv_data.next() course_id_idx = header.index("course_id") sis_user_id_idx = header.index("user_id") role_idx = header.index("role") status_idx = header.index("status") for row in enrollment_csv_data: if not len(row): continue course_id = row[course_id_idx] sis_user_id = row[sis_user_id_idx] role = row[role_idx] status = row[status_idx] if sis_user_id != "" and role.lower() == "teacher" and status.lower() == "active": if course_id not in all_instructors: all_instructors[course_id] = [] all_instructors[course_id].append(sis_user_id) course_report = reports.create_course_provisioning_report(account.account_id, term.term_id) course_data = reports.get_report_data(course_report) course_csv_data = csv.reader(course_data) header = course_csv_data.next() course_id_idx = header.index("course_id") sis_account_id_idx = header.index("account_id") status_idx = header.index("status") active_instructors = {} for row in course_csv_data: if not len(row): continue course_id = row[course_id_idx] sis_account_id = row[sis_account_id_idx] status = row[status_idx] if sis_account_id != "" and status.lower() == "active" and course_id in all_instructors: for sis_user_id in all_instructors[course_id]: if sis_user_id not in active_instructors: try: person = pws.get_person_by_regid(sis_user_id) email = person.uwnetid + "@uw.edu" active_instructors[sis_user_id] = email except InvalidRegID: continue except DataFailureException as err: if err.status == 404: continue else: raise filename = "-".join(["active-instructors", subaccount_id, sis_term_id]) outpath = dirname(__file__) + "/" + filename + ".txt" f = open(outpath, "w") data = active_instructors.values() data.sort() f.write("\n".join(data)) f.close() reports.delete_report(enrollment_report) reports.delete_report(course_report) print outpath