Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 33 additions & 5 deletions lms/djangoapps/instructor/management/commands/openended_post.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class Command(BaseCommand):
Command to manually re-post open ended submissions to the grader.
"""

help = ("Usage: openended_post <course_id> <problem_location> <student_ids.txt> --dry-run --task-number=<task_number>\n"
help = ("Usage: openended_post <course_id> <problem_location> <student_ids.txt> <hostname> --dry-run --task-number=<task_number>\n"
"The text file should contain a User.id in each line.")

option_list = BaseCommand.option_list + (
Expand All @@ -36,10 +36,11 @@ def handle(self, *args, **options):
dry_run = options['dry_run']
task_number = options['task_number']

if len(args) == 3:
if len(args) == 4:
course_id = args[0]
location = args[1]
students_ids = [line.strip() for line in open(args[2])]
hostname = args[3]
else:
print self.help
return
Expand All @@ -62,15 +63,22 @@ def handle(self, *args, **options):
print "Number of students: {0}".format(students.count())

for student in students:
post_submission_for_student(student, course, location, task_number, dry_run=dry_run)
post_submission_for_student(student, course, location, task_number, dry_run=dry_run, hostname=hostname)


def post_submission_for_student(student, course, location, task_number, dry_run=True):
def post_submission_for_student(student, course, location, task_number, dry_run=True, hostname=None):
"""If the student's task child_state is ASSESSING post submission to grader."""

print "{0}:{1}".format(student.id, student.username)

request = None
if hostname is not None:
request = DummyRequest()
request.user = student
request.host = hostname

try:
module = get_module_for_student(student, course, location)
module = get_module_for_student(student, course, location, request=request)
if module is None:
print " WARNING: No state found."
return False
Expand Down Expand Up @@ -104,3 +112,23 @@ def post_submission_for_student(student, course, location, task_number, dry_run=
print err

return False

class DummyRequest(object):
"""Dummy request"""

META = {}

def __init__(self):
self.session = {}
self.user = None
self.host = None
self.secure = True
return

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why a return at the end of the __init__?


def get_host(self):
"""Return a default host."""
return self.host

def is_secure(self):
"""Always secure."""
return self.secure
7 changes: 4 additions & 3 deletions lms/djangoapps/instructor/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@ def is_secure(self):
return False


def get_module_for_student(student, course, location):
def get_module_for_student(student, course, location, request=None):
"""Return the module for the (student, location) using a DummyRequest."""
request = DummyRequest()
request.user = student
if request is None:
request = DummyRequest()
request.user = student

descriptor = modulestore().get_instance(course.id, location, depth=0)
field_data_cache = FieldDataCache([descriptor], course.id, student)
Expand Down