Skip to content

Instantly share code, notes, and snippets.

@davestgermain
Created August 12, 2014 20:19
Show Gist options
  • Save davestgermain/1a3a723c1de2bcea0448 to your computer and use it in GitHub Desktop.
Save davestgermain/1a3a723c1de2bcea0448 to your computer and use it in GitHub Desktop.
import requests
import json
import socket
import sys
from wsgiref.simple_server import make_server
import cgi
from pprint import pprint
def submit_to_xqueue(xqueue_server, queue_name, grader, submission, username='lms', password='lms'):
my_address = socket.gethostbyname(socket.gethostname())
my_port = 19000
def callback_app(environ, start_response):
post_data = cgi.parse_qs(environ['wsgi.input'].read(int(environ['CONTENT_LENGTH'])))
print "\n\nXQUEUE CALLBACK:"
pprint(json.loads(post_data['xqueue_body'][0]))
start_response("200 OK", [('Content-Type','text/plain')])
return ['ok']
httpd = make_server(my_address, my_port, callback_app)
post_data = {}
post_data['xqueue_header'] = json.dumps({
'lms_callback_url': 'http://{}:{}/'.format(my_address, my_port),
'lms_key': '',
'queue_name': queue_name
})
post_data['xqueue_body'] = json.dumps({
'student_response': submission,
'grader_payload': json.dumps({
'grader': grader,
})
})
session = requests.Session()
print session.post('{}/xqueue/login/'.format(xqueue_server), data={
'username': username,
'password': password,
}).json()
print "POSTING:\n{}".format(post_data)
response = session.post('{}/xqueue/submit/'.format(xqueue_server), data=post_data).json()
if response['return_code'] != 0:
print response
httpd.handle_request()
if __name__ == '__main__':
import sys
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--submission', required=True, help='submission', type=argparse.FileType('rb'))
parser.add_argument('-g', '--grader', required=True, help='grader name')
parser.add_argument('-x', '--xqueue', default='http://localhost:18040', help='xqueue server')
parser.add_argument('-q', '--queue-name', default='7qbwx', help='queue name')
args = parser.parse_args(sys.argv[1:])
submit_to_xqueue(args.xqueue, args.queue_name, args.grader, args.submission.read())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment