Merge branch 'master' into drupal-new
This commit is contained in:
@@ -35,6 +35,7 @@ load-plugins=
|
||||
# it should appear only once).
|
||||
disable=
|
||||
# C0301: Line too long
|
||||
# C0302: Too many lines in module
|
||||
# W0141: Used builtin function 'map'
|
||||
# W0142: Used * or ** magic
|
||||
# R0201: Method could be a function
|
||||
@@ -42,8 +43,11 @@ disable=
|
||||
# R0902: Too many instance attributes
|
||||
# R0903: Too few public methods (1/2)
|
||||
# R0904: Too many public methods
|
||||
# R0911: Too many return statements
|
||||
# R0912: Too many branches
|
||||
# R0913: Too many arguments
|
||||
C0301,W0141,W0142,R0201,R0901,R0902,R0903,R0904,R0913
|
||||
# R0914: Too many local variables
|
||||
C0301,C0302,W0141,W0142,R0201,R0901,R0902,R0903,R0904,R0911,R0912,R0913,R0914
|
||||
|
||||
|
||||
[REPORTS]
|
||||
@@ -92,7 +96,7 @@ zope=no
|
||||
# List of members which are set dynamically and missed by pylint inference
|
||||
# system, and so shouldn't trigger E0201 when accessed. Python regular
|
||||
# expressions are accepted.
|
||||
generated-members=REQUEST,acl_users,aq_parent,objects,DoesNotExist,can_read,can_write,get_url,size
|
||||
generated-members=REQUEST,acl_users,aq_parent,objects,DoesNotExist,can_read,can_write,get_url,size,content
|
||||
|
||||
|
||||
[BASIC]
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
if (!window.CmsUtils) window.CmsUtils = {};
|
||||
|
||||
var $body;
|
||||
var $modal;
|
||||
var $modalCover;
|
||||
@@ -91,7 +93,7 @@ $(document).ready(function () {
|
||||
$('a[rel*="view"][href^="#"]').bind('click', smoothScrollLink);
|
||||
|
||||
// tender feedback window scrolling
|
||||
$('a.show-tender').bind('click', smoothScrollTop);
|
||||
$('a.show-tender').bind('click', window.CmsUtils.smoothScrollTop);
|
||||
|
||||
// toggling footer additional support
|
||||
$('.cta-show-sock').bind('click', toggleSock);
|
||||
@@ -172,7 +174,10 @@ function smoothScrollLink(e) {
|
||||
});
|
||||
}
|
||||
|
||||
function smoothScrollTop(e) {
|
||||
// On AWS instances, this base.js gets wrapped in a separate scope as part of Django static
|
||||
// pipelining (note, this doesn't happen on local runtimes). So if we set it on window,
|
||||
// when we can access it from other scopes (namely Course Advanced Settings).
|
||||
window.CmsUtils.smoothScrollTop = function (e) {
|
||||
(e).preventDefault();
|
||||
|
||||
$.smoothScroll({
|
||||
|
||||
@@ -130,7 +130,7 @@ CMS.Views.Settings.Advanced = CMS.Views.ValidatingView.extend({
|
||||
}
|
||||
},
|
||||
saveView : function(event) {
|
||||
smoothScrollTop(event);
|
||||
window.CmsUtils.smoothScrollTop(event);
|
||||
// TODO one last verification scan:
|
||||
// call validateKey on each to ensure proper format
|
||||
// check for dupes
|
||||
|
||||
@@ -3,17 +3,12 @@
|
||||
# django management command: dump grades to csv files
|
||||
# for use by batch processes
|
||||
|
||||
import os
|
||||
import sys
|
||||
import string
|
||||
import datetime
|
||||
import json
|
||||
import csv
|
||||
|
||||
from instructor.views import *
|
||||
from instructor.views import get_student_grade_summary_data
|
||||
from courseware.courses import get_course_by_id
|
||||
from xmodule.modulestore.django import modulestore
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
|
||||
@@ -45,7 +40,7 @@ class Command(BaseCommand):
|
||||
request = self.DummyRequest()
|
||||
try:
|
||||
course = get_course_by_id(course_id)
|
||||
except Exception as err:
|
||||
except Exception:
|
||||
if course_id in modulestore().courses:
|
||||
course = modulestore().courses[course_id]
|
||||
else:
|
||||
|
||||
@@ -11,7 +11,6 @@ import requests
|
||||
from requests.status_codes import codes
|
||||
import urllib
|
||||
from collections import OrderedDict
|
||||
import json
|
||||
|
||||
from StringIO import StringIO
|
||||
|
||||
@@ -21,7 +20,6 @@ from django.http import HttpResponse
|
||||
from django_future.csrf import ensure_csrf_cookie
|
||||
from django.views.decorators.cache import cache_control
|
||||
from mitxmako.shortcuts import render_to_response
|
||||
import requests
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from courseware import grades
|
||||
@@ -36,11 +34,7 @@ from django_comment_client.models import (Role,
|
||||
from django_comment_client.utils import has_forum_access
|
||||
from psychometrics import psychoanalyze
|
||||
from student.models import CourseEnrollment, CourseEnrollmentAllowed
|
||||
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
|
||||
import xmodule.graders as xmgraders
|
||||
import track.views
|
||||
|
||||
@@ -48,14 +42,15 @@ from .offline_gradecalc import student_grades, offline_grades_available
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
template_imports = {'urllib': urllib}
|
||||
|
||||
# internal commands for managing forum roles:
|
||||
FORUM_ROLE_ADD = 'add'
|
||||
FORUM_ROLE_REMOVE = 'remove'
|
||||
|
||||
|
||||
def split_by_comma_and_whitespace(s):
|
||||
"""
|
||||
Return string s, split by , or whitespace
|
||||
"""
|
||||
return re.split(r'[\s,]', s)
|
||||
|
||||
|
||||
@@ -141,7 +136,7 @@ def instructor_dashboard(request, course_id):
|
||||
# 'beta', so adding it to get_access_group_name doesn't really make
|
||||
# sense.
|
||||
name = course_beta_test_group_name(course.location)
|
||||
(group, created) = Group.objects.get_or_create(name=name)
|
||||
(group, _) = Group.objects.get_or_create(name=name)
|
||||
return group
|
||||
|
||||
# process actions from form POST
|
||||
@@ -237,13 +232,13 @@ def instructor_dashboard(request, course_id):
|
||||
if '/' not in problem_to_reset: # allow state of modules other than problem to be reset
|
||||
problem_to_reset = "problem/" + problem_to_reset # but problem is the default
|
||||
try:
|
||||
(org, course_name, run) = course_id.split("/")
|
||||
(org, course_name, _) = course_id.split("/")
|
||||
module_state_key = "i4x://" + org + "/" + course_name + "/" + problem_to_reset
|
||||
module_to_reset = StudentModule.objects.get(student_id=student_to_reset.id,
|
||||
course_id=course_id,
|
||||
module_state_key=module_state_key)
|
||||
msg += "Found module to reset. "
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
msg += "<font color='red'>Couldn't find module with that urlname. </font>"
|
||||
|
||||
if "Delete student state for problem" in action:
|
||||
@@ -352,7 +347,7 @@ def instructor_dashboard(request, course_id):
|
||||
return_csv('', datatable, fp=fp)
|
||||
fp.seek(0)
|
||||
files = {'datafile': fp}
|
||||
msg2, dataset = _do_remote_gradebook(request.user, course, 'post-grades', files=files)
|
||||
msg2, _ = _do_remote_gradebook(request.user, course, 'post-grades', files=files)
|
||||
msg += msg2
|
||||
|
||||
|
||||
@@ -423,7 +418,7 @@ def instructor_dashboard(request, course_id):
|
||||
datatable = {'header': ['username', 'email'] + profkeys}
|
||||
def getdat(u):
|
||||
p = u.profile
|
||||
return [u.username, u.email] + [getattr(p,x,'') for x in profkeys]
|
||||
return [u.username, u.email] + [getattr(p, x, '') for x in profkeys]
|
||||
|
||||
datatable['data'] = [getdat(u) for u in enrolled_students]
|
||||
datatable['title'] = 'Student profile data for course %s' % course_id
|
||||
@@ -433,17 +428,17 @@ def instructor_dashboard(request, course_id):
|
||||
elif 'Download CSV of all responses to problem' in action:
|
||||
problem_to_dump = request.POST.get('problem_to_dump','')
|
||||
|
||||
if problem_to_dump[-4:]==".xml":
|
||||
problem_to_dump=problem_to_dump[:-4]
|
||||
if problem_to_dump[-4:] == ".xml":
|
||||
problem_to_dump = problem_to_dump[:-4]
|
||||
try:
|
||||
(org, course_name, run)=course_id.split("/")
|
||||
module_state_key="i4x://"+org+"/"+course_name+"/problem/"+problem_to_dump
|
||||
(org, course_name, run) = course_id.split("/")
|
||||
module_state_key = "i4x://" + org + "/" + course_name + "/problem/" + problem_to_dump
|
||||
smdat = StudentModule.objects.filter(course_id=course_id,
|
||||
module_state_key=module_state_key)
|
||||
smdat = smdat.order_by('student')
|
||||
msg += "Found %d records to dump " % len(smdat)
|
||||
except Exception as err:
|
||||
msg+="<font color='red'>Couldn't find module with that urlname. </font>"
|
||||
msg += "<font color='red'>Couldn't find module with that urlname. </font>"
|
||||
msg += "<pre>%s</pre>" % escape(err)
|
||||
smdat = []
|
||||
|
||||
@@ -741,7 +736,7 @@ 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 {0}s in course {1}'.format(rolename, course_id)
|
||||
datatable['data'] = [];
|
||||
datatable['data'] = []
|
||||
try:
|
||||
role = Role.objects.get(name=rolename, course_id=course_id)
|
||||
except Role.DoesNotExist:
|
||||
@@ -923,7 +918,7 @@ def get_student_grade_summary_data(request, course, course_id, get_grades=True,
|
||||
datarow = [student.id, student.username, student.profile.name, student.email]
|
||||
try:
|
||||
datarow.append(student.externalauthmap.external_email)
|
||||
except: # ExternalAuthMap.DoesNotExist
|
||||
except: # ExternalAuthMap.DoesNotExist
|
||||
datarow.append('')
|
||||
|
||||
if get_grades:
|
||||
@@ -1040,7 +1035,8 @@ def _do_enroll_students(course, course_id, students, overload=False):
|
||||
datatable['data'] = [[x, status[x]] for x in status]
|
||||
datatable['title'] = 'Enrollment of students'
|
||||
|
||||
def sf(stat): return [x for x in status if status[x] == stat]
|
||||
def sf(stat):
|
||||
return [x for x in status if status[x] == stat]
|
||||
|
||||
data = dict(added=sf('added'), rejected=sf('rejected') + sf('exists'),
|
||||
deleted=sf('deleted'), datatable=datatable)
|
||||
@@ -1136,7 +1132,7 @@ def dump_grading_context(course):
|
||||
'''
|
||||
msg = "-----------------------------------------------------------------------------\n"
|
||||
msg += "Course grader:\n"
|
||||
|
||||
|
||||
msg += '%s\n' % course.grader.__class__
|
||||
graders = {}
|
||||
if isinstance(course.grader, xmgraders.WeightedSubsectionsGrader):
|
||||
@@ -1151,7 +1147,7 @@ def dump_grading_context(course):
|
||||
|
||||
gc = course.grading_context
|
||||
msg += "graded sections:\n"
|
||||
|
||||
|
||||
msg += '%s\n' % gc['graded_sections'].keys()
|
||||
for (gs, gsvals) in gc['graded_sections'].items():
|
||||
msg += "--> Section %s:\n" % (gs)
|
||||
|
||||
@@ -27,8 +27,6 @@ from mitxmako.shortcuts import render_to_string
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
template_imports = {'urllib': urllib}
|
||||
|
||||
system = ModuleSystem(
|
||||
ajax_url=None,
|
||||
track_function=None,
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 226 KiB |
Reference in New Issue
Block a user