def test_term(self): with self.settings( RESTCLIENTS_CANVAS_DAO_CLASS='restclients.dao_implementation.canvas.File', RESTCLIENTS_CANVAS_ACCOUNT_ID='12345'): canvas = Canvas() sis_term_id = "2013-summer" term = canvas.get_term_by_sis_id(sis_term_id) self.assertEquals(term.term_id, 3845, "Has proper term id") self.assertEquals(term.name, "Summer 2013", "Has proper name") self.assertEquals(term.sis_term_id, sis_term_id, "Has proper sis id")
def test_term(self): with self.settings(RESTCLIENTS_CANVAS_DAO_CLASS= 'restclients.dao_implementation.canvas.File', RESTCLIENTS_CANVAS_ACCOUNT_ID='12345'): canvas = Canvas() sis_term_id = "2013-summer" term = canvas.get_term_by_sis_id(sis_term_id) self.assertEquals(term.term_id, 3845, "Has proper term id") self.assertEquals(term.name, "Summer 2013", "Has proper name") self.assertEquals(term.sis_term_id, sis_term_id, "Has proper sis id")
def handle(self, *args, **options): self._canvas = Canvas() self._tools = ExternalTools() self._accounts = Accounts() self._courses = Courses() self._options = options csv.register_dialect("unix_newline", lineterminator="\n") self._writer = csv.writer(sys.stdout, dialect="unix_newline") self._headers = ['tool_name', 'tool_id', 'tool_type', 'account_name', 'account_id'] if self._options['courses']: self._headers.append('course_name') self._headers.append('course_id') self._headers.append('term') if options['sessionless']: self._headers.append('sessionless url') accounter = self._accounts.get_account if re.match(r'^\d+$', options['account_id']) \ else self._accounts.get_account_by_sis_id try: self.report_external_tools(accounter(options['account_id'])) except DataFailureException as err: if err.status == 404: print >> sys.stderr, 'Unknown Sub-Account \"%s\"' % (options['account_id'])
def get_submissions_for_sis_course_id_and_quiz_id(self, sis_course_id, quiz_id): url = "/api/v1/courses/%s/quizzes/%s/submissions" % (self._sis_id( sis_course_id, sis_field="course"), quiz_id) submissions = Canvas()._get_resource(url, data_key="quiz_submissions") return submissions
class Command(BaseCommand): help = "Report externals tools in account" option_list = BaseCommand.option_list + ( make_option('-a', '--account', action='store', dest='account_id', type="string", default=default_account, help='show external tools in account by id or sis_id (default: %s)' % default_account), make_option('-r', '--recurse', action='store_true', dest='recurse', default=False, help='recurse through subaccounts'), make_option('-c', '--courses', action='store_true', dest='courses', default=False, help='include account courses in report'), make_option('-t', '--term', action='store', dest='term', type="string", default='', help='include only courses in given term'), make_option('-s', '--sessionless-url', action='store_true', dest='sessionless', default=False, help='show sessionless url with each external tool'), ) def handle(self, *args, **options): self._canvas = Canvas() self._tools = ExternalTools() self._accounts = Accounts() self._courses = Courses() self._options = options csv.register_dialect("unix_newline", lineterminator="\n") self._writer = csv.writer(sys.stdout, dialect="unix_newline") self._headers = ['tool_name', 'tool_id', 'tool_type', 'account_name', 'account_id'] if self._options['courses']: self._headers.append('course_name') self._headers.append('course_id') self._headers.append('term') if options['sessionless']: self._headers.append('sessionless url') accounter = self._accounts.get_account if re.match(r'^\d+$', options['account_id']) \ else self._accounts.get_account_by_sis_id try: self.report_external_tools(accounter(options['account_id'])) except DataFailureException as err: if err.status == 404: print >> sys.stderr, 'Unknown Sub-Account \"%s\"' % (options['account_id']) def report_external_tools(self, account): tools = self._tools.get_external_tools_in_account(account.account_id) self._print_tools(tools, account) if self._options['courses']: params = { "by_subaccounts":[account.account_id], "include": ["term"] } if self._options['term']: params['enrollment_term_id'] = self._canvas.get_term_by_sis_id(self._options['term']).term_id courses = self._courses.get_published_courses_in_account(account.account_id, params=params) for course in courses: tools = self._tools.get_external_tools_in_course(course.course_id) self._print_tools(tools, account, course) if self._options['recurse']: subaccounts = self._accounts.get_sub_accounts(account.account_id) for account in subaccounts: self.report_external_tools(account) def _print_tools(self, tools, account, course=None): if len(tools): if self._headers: self._writer.writerow(self._headers) self._headers = None for tool in tools: tool_types = [] for tt in ['account', 'course', 'user']: if tool.get("%s_navigation" % tt): tool_types.append(tt) tool_type = ' & '.join(tool_types) line = [tool['name'], tool['id'], tool_type, account.name, account.account_id] if self._options['courses']: if course: line.extend([course.name, course.course_id, course.term.name if course.term else '']) else: line.extend(['','','']) if self._options['sessionless']: try: sessionless = self._tools.get_sessionless_launch_url_from_account(tool['id'], account.account_id) line.append(sessionless['url']) except DataFailureException as ex: line.append('') self._writer.writerow(line)