From 8d0eb7f1a184059e1425f36337ccd38f638fa49f Mon Sep 17 00:00:00 2001
From: Brian Wilson " % data_dir
- msg += "%s ' % header)>0)
- self.assertTrue(response.content.find('%s ' % username)>=0)
+ self.assertTrue(response.content.find('{0} '.format(header))>0)
+ self.assertTrue(response.content.find('{0} '.format(username))>=0)
# concatenate all roles for user, in sorted order:
added_roles.append(rolename)
added_roles.sort()
roles = ', '.join(added_roles)
- self.assertTrue(response.content.find('%s ' % roles)>=0, 'not finding roles "%s"' % roles)
+ self.assertTrue(response.content.find('{0} '.format(roles))>=0, 'not finding roles "{0}"'.format(roles))
diff --git a/lms/djangoapps/instructor/views.py b/lms/djangoapps/instructor/views.py
index 2ae383e25b..f985cc43a0 100644
--- a/lms/djangoapps/instructor/views.py
+++ b/lms/djangoapps/instructor/views.py
@@ -1,34 +1,31 @@
# ======== Instructor views =============================================================================
+from collections import defaultdict
import csv
import logging
import os
import urllib
-import track.views
-
-from collections import defaultdict
-
from django.conf import settings
from django.contrib.auth.models import User, Group
from django.http import HttpResponse
-from mitxmako.shortcuts import render_to_response
from django_future.csrf import ensure_csrf_cookie
from django.views.decorators.cache import cache_control
+from mitxmako.shortcuts import render_to_response
from courseware import grades
from courseware.access import has_access, get_access_group_name
from courseware.courses import get_course_with_access
+from django_comment_client.models import Role, FORUM_ROLE_ADMINISTRATOR, FORUM_ROLE_MODERATOR, FORUM_ROLE_COMMUNITY_TA
+from django_comment_client.utils import has_forum_access
from psychometrics import psychoanalyze
-
from student.models import CourseEnrollment
from xmodule.course_module import CourseDescriptor
from xmodule.modulestore import Location
from xmodule.modulestore.django import modulestore
from xmodule.modulestore.exceptions import InvalidLocationError, ItemNotFoundError, NoPathToItem
from xmodule.modulestore.search import path_to_location
-from django_comment_client.models import Role, FORUM_ROLE_ADMINISTRATOR, FORUM_ROLE_MODERATOR, FORUM_ROLE_COMMUNITY_TA
-from django_comment_client.utils import has_forum_access
+import track.views
log = logging.getLogger("mitx.courseware")
@@ -50,8 +47,6 @@ def instructor_dashboard(request, course_id):
forum_admin_access = has_forum_access(request.user, course_id, FORUM_ROLE_ADMINISTRATOR)
msg = ''
- #msg += ('POST=%s' % dict(request.POST)).replace('<','<')
-
problems = []
plots = []
@@ -79,7 +74,7 @@ def instructor_dashboard(request, course_id):
def return_csv(fn, datatable):
response = HttpResponse(mimetype='text/csv')
- response['Content-Disposition'] = 'attachment; filename=%s' % fn
+ response['Content-Disposition'] = 'attachment; filename={0}'.format(fn)
writer = csv.writer(response, dialect='excel', quotechar='"', quoting=csv.QUOTE_ALL)
writer.writerow(datatable['header'])
for datarow in datatable['data']:
@@ -102,75 +97,75 @@ def instructor_dashboard(request, course_id):
if settings.MITX_FEATURES['ENABLE_MANUAL_GIT_RELOAD']:
if 'GIT pull' in action:
data_dir = course.metadata['data_dir']
- log.debug('git pull %s' % (data_dir))
+ log.debug('git pull {0}'.format(data_dir))
gdir = settings.DATA_DIR / data_dir
if not os.path.exists(gdir):
- msg += "====> ERROR in gitreload - no such directory %s" % gdir
+ msg += "====> ERROR in gitreload - no such directory {0}".format(gdir)
else:
- cmd = "cd %s; git reset --hard HEAD; git clean -f -d; git pull origin; chmod g+w course.xml" % gdir
- msg += "git pull on %s:%s
".format(data_dir) + msg += "
{0}".format(escape(os.popen(cmd).read()))
+ track.views.server_track(request, 'git pull {0}'.format(data_dir), {}, page='idashboard')
if 'Reload course' in action:
- log.debug('reloading %s (%s)' % (course_id, course))
+ log.debug('reloading {0} ({1})'.format(course_id, course))
try:
data_dir = course.metadata['data_dir']
modulestore().try_load_course(data_dir)
- msg += "Course reloaded from %s
" % data_dir - track.views.server_track(request, 'reload %s' % data_dir, {}, page='idashboard') + msg += "Course reloaded from {0}
".format(data_dir) + track.views.server_track(request, 'reload {0}'.format(data_dir), {}, page='idashboard') course_errors = modulestore().get_item_errors(course.location) msg += '%s" % (cmsg,escape(cerr)) + msg += "
{1}".format(cmsg,escape(cerr))
msg += 'Error: %s
' % escape(err) + msg += 'Error: {0}
'.format(escape(err)) if action == 'Dump list of enrolled students': log.debug(action) datatable = get_student_grade_summary_data(request, course, course_id, get_grades=False) - datatable['title'] = 'List of students enrolled in %s' % course_id + datatable['title'] = 'List of students enrolled in {0}'.format(course_id) track.views.server_track(request, 'list-students', {}, page='idashboard') elif 'Dump Grades' in action: log.debug(action) datatable = get_student_grade_summary_data(request, course, course_id, get_grades=True) - datatable['title'] = 'Summary Grades of students enrolled in %s' % course_id + datatable['title'] = 'Summary Grades of students enrolled in {0}'.format(course_id) track.views.server_track(request, 'dump-grades', {}, page='idashboard') elif 'Dump all RAW grades' in action: log.debug(action) datatable = get_student_grade_summary_data(request, course, course_id, get_grades=True, get_raw_scores=True) - datatable['title'] = 'Raw Grades of students enrolled in %s' % course_id + datatable['title'] = 'Raw Grades of students enrolled in {0}'.format(course_id) track.views.server_track(request, 'dump-grades-raw', {}, page='idashboard') elif 'Download CSV of all student grades' in action: track.views.server_track(request, 'dump-grades-csv', {}, page='idashboard') - return return_csv('grades_%s.csv' % course_id, + return return_csv('grades_{0}.csv'.format(course_id), get_student_grade_summary_data(request, course, course_id)) elif 'Download CSV of all RAW grades' in action: track.views.server_track(request, 'dump-grades-csv-raw', {}, page='idashboard') - return return_csv('grades_%s_raw.csv' % course_id, + return return_csv('grades_{0}_raw.csv'.format(course_id), get_student_grade_summary_data(request, course, course_id, get_raw_scores=True)) elif 'Download CSV of answer distributions' in action: track.views.server_track(request, 'dump-answer-dist-csv', {}, page='idashboard') - return return_csv('answer_dist_%s.csv' % course_id, get_answers_distribution(request, course_id)) + return return_csv('answer_dist_{0}.csv'.format(course_id), get_answers_distribution(request, course_id)) #---------------------------------------- # Admin elif 'List course staff' in action: group = get_staff_group(course) - msg += 'Staff group = %s' % group.name - log.debug('staffgrp=%s' % group.name) + msg += 'Staff group = {0}'.format(group.name) + log.debug('staffgrp={0}'.format(group.name)) uset = group.user_set.all() datatable = {'header': ['Username', 'Full name']} datatable['data'] = [[x.username, x.profile.name] for x in uset] - datatable['title'] = 'List of Staff in course %s' % course_id + datatable['title'] = 'List of Staff in course {0}'.format(course_id) track.views.server_track(request, 'list-staff', {}, page='idashboard') elif action == 'Add course staff': @@ -178,28 +173,28 @@ def instructor_dashboard(request, course_id): try: user = User.objects.get(username=uname) except User.DoesNotExist: - msg += 'Error: unknown username "%s"' % uname + msg += 'Error: unknown username "{0}"'.format(uname) user = None if user is not None: group = get_staff_group(course) - msg += 'Added %s to staff group = %s' % (user, group.name) - log.debug('staffgrp=%s' % group.name) + msg += 'Added {0} to staff group = {1}'.format(user, group.name) + log.debug('staffgrp={0}'.format(group.name)) user.groups.add(group) - track.views.server_track(request, 'add-staff %s' % user, {}, page='idashboard') + track.views.server_track(request, 'add-staff {0}'.format(user), {}, page='idashboard') elif action == 'Remove course staff': uname = request.POST['staffuser'] try: user = User.objects.get(username=uname) except User.DoesNotExist: - msg += 'Error: unknown username "%s"' % uname + msg += 'Error: unknown username "{0}"'.format(uname) user = None if user is not None: group = get_staff_group(course) - msg += 'Removed %s from staff group = %s' % (user, group.name) - log.debug('staffgrp=%s' % group.name) + msg += 'Removed {0} from staff group = {1}'.format(user, group.name) + log.debug('staffgrp={0}'.format(group.name)) user.groups.remove(group) - track.views.server_track(request, 'remove-staff %s' % user, {}, page='idashboard') + track.views.server_track(request, 'remove-staff {0}'.format(user), {}, page='idashboard') #---------------------------------------- # forum administration @@ -208,55 +203,55 @@ def instructor_dashboard(request, course_id): rolename = FORUM_ROLE_ADMINISTRATOR datatable = {} msg += _list_course_forum_members(course_id, rolename, datatable) - track.views.server_track(request, 'list-%s' % rolename, {}, page='idashboard') + track.views.server_track(request, 'list-{0}'.format(rolename), {}, page='idashboard') elif action == 'Remove forum admin': uname = request.POST['forumadmin'] msg += _update_forum_role_membership(uname, course, FORUM_ROLE_ADMINISTRATOR, FORUM_ROLE_REMOVE) - track.views.server_track(request, '%s %s as %s for %s' % (FORUM_ROLE_REMOVE, uname, FORUM_ROLE_ADMINISTRATOR, course_id), + track.views.server_track(request, '{0} {1} as {2} for {3}'.format(FORUM_ROLE_REMOVE, uname, FORUM_ROLE_ADMINISTRATOR, course_id), {}, page='idashboard') elif action == 'Add forum admin': uname = request.POST['forumadmin'] msg += _update_forum_role_membership(uname, course, FORUM_ROLE_ADMINISTRATOR, FORUM_ROLE_ADD) - track.views.server_track(request, '%s %s as %s for %s' % (FORUM_ROLE_ADD, uname, FORUM_ROLE_ADMINISTRATOR, course_id), + track.views.server_track(request, '{0} {1} as {2} for {3}'.format(FORUM_ROLE_ADD, uname, FORUM_ROLE_ADMINISTRATOR, course_id), {}, page='idashboard') elif action == 'List course forum moderators': rolename = FORUM_ROLE_MODERATOR datatable = {} msg += _list_course_forum_members(course_id, rolename, datatable) - track.views.server_track(request, 'list-%s' % rolename, {}, page='idashboard') + track.views.server_track(request, 'list-{0}'.format(rolename), {}, page='idashboard') elif action == 'Remove forum moderator': uname = request.POST['forummoderator'] msg += _update_forum_role_membership(uname, course, FORUM_ROLE_MODERATOR, FORUM_ROLE_REMOVE) - track.views.server_track(request, '%s %s as %s for %s' % (FORUM_ROLE_REMOVE, uname, FORUM_ROLE_MODERATOR, course_id), + track.views.server_track(request, '{0} {1} as {2} for {3}'.format(FORUM_ROLE_REMOVE, uname, FORUM_ROLE_MODERATOR, course_id), {}, page='idashboard') elif action == 'Add forum moderator': uname = request.POST['forummoderator'] msg += _update_forum_role_membership(uname, course, FORUM_ROLE_MODERATOR, FORUM_ROLE_ADD) - track.views.server_track(request, '%s %s as %s for %s' % (FORUM_ROLE_ADD, uname, FORUM_ROLE_MODERATOR, course_id), + track.views.server_track(request, '{0} {1} as {2} for {3}'.format(FORUM_ROLE_ADD, uname, FORUM_ROLE_MODERATOR, course_id), {}, page='idashboard') elif action == 'List course forum community TAs': rolename = FORUM_ROLE_COMMUNITY_TA datatable = {} msg += _list_course_forum_members(course_id, rolename, datatable) - track.views.server_track(request, 'list-%s' % rolename, {}, page='idashboard') + track.views.server_track(request, 'list-{0}'.format(rolename), {}, page='idashboard') elif action == 'Remove forum community TA': uname = request.POST['forummoderator'] msg += _update_forum_role_membership(uname, course, FORUM_ROLE_COMMUNITY_TA, FORUM_ROLE_REMOVE) - track.views.server_track(request, '%s %s as %s for %s' % (FORUM_ROLE_REMOVE, uname, FORUM_ROLE_COMMUNITY_TA, course_id), + track.views.server_track(request, '{0} {1} as {2} for {3}'.format(FORUM_ROLE_REMOVE, uname, FORUM_ROLE_COMMUNITY_TA, course_id), {}, page='idashboard') elif action == 'Add forum community TA': uname = request.POST['forummoderator'] msg += _update_forum_role_membership(uname, course, FORUM_ROLE_COMMUNITY_TA, FORUM_ROLE_ADD) - track.views.server_track(request, '%s %s as %s for %s' % (FORUM_ROLE_ADD, uname, FORUM_ROLE_COMMUNITY_TA, course_id), + track.views.server_track(request, '{0} {1} as {2} for {3}'.format(FORUM_ROLE_ADD, uname, FORUM_ROLE_COMMUNITY_TA, course_id), {}, page='idashboard') #---------------------------------------- @@ -266,7 +261,7 @@ def instructor_dashboard(request, course_id): problem = request.POST['Problem'] nmsg, plots = psychoanalyze.generate_plots_for_problem(problem) msg += nmsg - track.views.server_track(request, 'psychometrics %s' % problem, {}, page='idashboard') + track.views.server_track(request, 'psychometrics {0}'.format(problem), {}, page='idashboard') if idash_mode=='Psychometrics': problems = psychoanalyze.problems_with_psychometric_data(course_id) @@ -303,15 +298,15 @@ def _list_course_forum_members(course_id, rolename, datatable): ''' # make sure datatable is set up properly for display first, before checking for errors datatable['header'] = ['Username', 'Full name', 'Roles'] - datatable['title'] = 'List of Forum %ss in course %s' % (rolename, course_id) + datatable['title'] = 'List of Forum {0}s in course {1}'.format(rolename, course_id) datatable['data'] = []; try: role = Role.objects.get(name=rolename, course_id=course_id) except Role.DoesNotExist: - return 'Error: unknown rolename "%s"' % rolename + return 'Error: unknown rolename "{0}"'.format(rolename) uset = role.users.all().order_by('username') - msg = 'Role = %s' % rolename - log.debug('role=%s' % rolename) + msg = 'Role = {0}'.format(rolename) + log.debug('role={0}'.format(rolename)) datatable['data'] = [[x.username, x.profile.name, ', '.join([r.name for r in x.roles.filter(course_id=course_id).order_by('name')])] for x in uset] return msg @@ -332,31 +327,31 @@ def _update_forum_role_membership(uname, course, rolename, add_or_remove): try: user = User.objects.get(username=uname) except User.DoesNotExist: - return 'Error: unknown username "%s"' % uname + return 'Error: unknown username "{0}"'.format(uname) try: role = Role.objects.get(name=rolename, course_id=course.id) except Role.DoesNotExist: - return 'Error: unknown rolename "%s"' % rolename + return 'Error: unknown rolename "{0}"'.format(rolename) # check whether role already has the specified user: alreadyexists = role.users.filter(username=uname).exists() msg = '' - log.debug('rolename=%s' % rolename) - if (add_or_remove == FORUM_ROLE_REMOVE): - if (not alreadyexists): - msg ='Error: user "%s" does not have rolename "%s", cannot remove' % (uname, rolename) + log.debug('rolename={0}'.format(rolename)) + if add_or_remove == FORUM_ROLE_REMOVE: + if not alreadyexists: + msg ='Error: user "{0}" does not have rolename "{1}", cannot remove'.format(uname, rolename) else: user.roles.remove(role) - msg = 'Removed "%s" from "%s" forum role = "%s"' % (user, course.id, rolename) + msg = 'Removed "{0}" from "{1}" forum role = "{2}"'.format(user, course.id, rolename) else: - if (alreadyexists): - msg = 'Error: user "%s" already has rolename "%s", cannot add' % (uname, rolename) + if alreadyexists: + msg = 'Error: user "{0}" already has rolename "{1}", cannot add'.format(uname, rolename) else: if (rolename == FORUM_ROLE_ADMINISTRATOR and not has_access(user, course, 'staff')): - msg = 'Error: user "%s" should first be added as staff before adding as a forum administrator, cannot add' % uname + msg = 'Error: user "{0}" should first be added as staff before adding as a forum administrator, cannot add'.format(uname) else: user.roles.add(role) - msg = 'Added "%s" to "%s" forum role = "%s"' % (user, course.id, rolename) + msg = 'Added "{0}" to "{1}" forum role = "{2}"'.format(user, course.id, rolename) return msg @@ -385,7 +380,7 @@ def get_student_grade_summary_data(request, course, course_id, get_grades=True, if get_grades: # just to construct the header gradeset = grades.grade(enrolled_students[0], request, course, keep_raw_scores=get_raw_scores) - # log.debug('student %s gradeset %s' % (enrolled_students[0], gradeset)) + # log.debug('student {0} gradeset {1}'.format(enrolled_students[0], gradeset)) if get_raw_scores: header += [score.section for score in gradeset['raw_scores']] else: @@ -403,7 +398,7 @@ def get_student_grade_summary_data(request, course, course_id, get_grades=True, if get_grades: gradeset = grades.grade(student, request, course, keep_raw_scores=get_raw_scores) - # log.debug('student=%s, gradeset=%s' % (student,gradeset)) + # log.debug('student={0}, gradeset={1}'.format(student,gradeset)) if get_raw_scores: datarow += [score.earned for score in gradeset['raw_scores']] else: