Skip to content

Commit 3c04c2c

Browse files
author
Andy Wu
committed
Changed grader to use the new grading system
1 parent a6b0678 commit 3c04c2c

File tree

9 files changed

+50
-37
lines changed

9 files changed

+50
-37
lines changed

Exercise1/utils.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ def __init__(self):
1919
'Computing Cost (for multiple variables)',
2020
'Gradient Descent (for multiple variables)',
2121
'Normal Equations']
22-
super().__init__('linear-regression', part_names)
22+
part_names_key = ['DCRbJ', 'BGa4S', 'b65eO', 'BbS8u', 'FBlE2', 'RZAZC', '7m5Eu']
23+
assignment_key = 'UkTlA-FyRRKV5ooohuwU6A'
24+
super().__init__('linear-regression', assignment_key, part_names, part_names_key)
2325

2426
def __iter__(self):
2527
for part_id in range(1, 8):

Exercise2/utils.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,9 @@ def __init__(self):
119119
'Predict',
120120
'Regularized Logistic Regression Cost',
121121
'Regularized Logistic Regression Gradient']
122-
super().__init__('logistic-regression', part_names)
122+
part_names_key = ['sFxIn', 'yvXBE', 'HerlY', '9fxV6', 'OddeL', 'aUo3H']
123+
assignment_key = 'JvOPouj-S-ys8KjYcPYqrg'
124+
super().__init__('logistic-regression', assignment_key, part_names, part_names_key)
123125

124126
def __iter__(self):
125127
for part_id in range(1, 7):

Exercise3/utils.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,9 @@ def __init__(self):
7979
'One-vs-All Classifier Training',
8080
'One-vs-All Classifier Prediction',
8181
'Neural Network Prediction Function']
82-
83-
super().__init__('multi-class-classification-and-neural-networks', part_names)
82+
part_names_key = ['jzAIf', 'LjDnh', '3yxcY', 'yNspP']
83+
assignment_key = '2KZRbGlpQnyzVI8Ki4uXjw'
84+
super().__init__('multi-class-classification-and-neural-networks', assignment_key, part_names, part_names_key)
8485

8586
def __iter__(self):
8687
for part_id in range(1, 5):

Exercise4/utils.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,9 @@ def __init__(self):
193193
'Sigmoid Gradient',
194194
'Neural Network Gradient (Backpropagation)',
195195
'Regularized Gradient']
196-
super().__init__('neural-network-learning', part_names)
196+
part_names_key = ['aAiP2', '8ajiz', 'rXsEO', 'TvZch', 'pfIYT']
197+
assignment_key = 'xolSVXukR72JH37bfzo0pg'
198+
super().__init__('neural-network-learning', assignment_key, part_names, part_names_key)
197199

198200
def __iter__(self):
199201
for part_id in range(1, 6):

Exercise5/utils.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,9 @@ def __init__(self):
138138
'Learning Curve',
139139
'Polynomial Feature Mapping',
140140
'Validation Curve']
141-
super().__init__('regularized-linear-regression-and-bias-variance', part_names)
141+
part_names_key = ['a6bvf', 'x4FhA', 'n3zWY', 'lLaa4', 'gyJbG']
142+
assignment_key = '-wEfetVmQgG3j-mtasztYg'
143+
super().__init__('regularized-linear-regression-and-bias-variance', assignment_key, part_names, part_names_key)
142144

143145
def __iter__(self):
144146
for part_id in range(1, 6):

Exercise6/utils.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,9 @@ def __init__(self):
695695
'Parameters (C, sigma) for Dataset 3',
696696
'Email Processing',
697697
'Email Feature Extraction']
698-
super().__init__('support-vector-machines', part_names)
698+
part_names_key = ['drOLk', 'JYt9Q', 'UHwLk', 'RIiFh']
699+
assignment_key = 'xHfBJWXxTdKXrUG7dHTQ3g'
700+
super().__init__('support-vector-machines', assignment_key, part_names, part_names_key)
699701

700702
def __iter__(self):
701703
for part_id in range(1, 5):

Exercise7/utils.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,9 @@ def __init__(self):
211211
'PCA',
212212
'Project Data (PCA)',
213213
'Recover Data (PCA)']
214-
super().__init__('k-means-clustering-and-pca', part_names)
214+
part_names_key = ['7yN0U', 'G1WGM', 'ixOMV', 'AFoJK', 'vf9EL']
215+
assignment_key = 'rGGTuM9gQoaikOnlhLII1A'
216+
super().__init__('k-means-clustering-and-pca', assignment_key, part_names, part_names_key)
215217

216218
def __iter__(self):
217219
for part_id in range(1, 6):

Exercise8/utils.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,9 @@ def __init__(self):
235235
'Collaborative Filtering Gradient',
236236
'Regularized Cost',
237237
'Regularized Gradient']
238-
super().__init__('anomaly-detection-and-recommender-systems', part_names)
238+
part_names_key = ['WGzrg', '80Tcg', 'KDzSh', 'wZud3', 'BP3th', 'YF0u1']
239+
assignment_key = 'JvOPouj-S-ys8KjYcPYqrg'
240+
super().__init__('anomaly-detection-and-recommender-systems', assignment_key, part_names, part_names_key)
239241

240242
def __iter__(self):
241243
for part_id in range(1, 7):

submission.py

+26-28
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
from urllib.parse import urlencode
2-
from urllib.request import urlopen
3-
import pickle
41
import json
2+
import os
3+
import pickle
54
from collections import OrderedDict
5+
66
import numpy as np
7-
import os
7+
import requests
88

99

1010
class SubmissionBase:
11-
12-
submit_url = 'https://www-origin.coursera.org/api/' \
13-
'onDemandProgrammingImmediateFormSubmissions.v1'
11+
submit_url = 'https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1?includes=evaluation'
1412
save_file = 'token.pkl'
1513

16-
def __init__(self, assignment_slug, part_names):
14+
def __init__(self, assignment_slug, assignment_key, part_names, part_names_key):
1715
self.assignment_slug = assignment_slug
16+
self.assignment_key = assignment_key
1817
self.part_names = part_names
18+
self.part_names_key = part_names_key
1919
self.login = None
2020
self.token = None
2121
self.functions = OrderedDict()
@@ -28,24 +28,25 @@ def grade(self):
2828
# Evaluate the different parts of exercise
2929
parts = OrderedDict()
3030
for part_id, result in self:
31-
parts[str(part_id)] = {'output': sprintf('%0.5f ', result)}
32-
result, response = self.request(parts)
31+
parts[self.part_names_key[part_id - 1]] = {'output': sprintf('%0.5f ', result)}
32+
response = self.request(parts)
3333
response = json.loads(response.decode("utf-8"))
3434

3535
# if an error was returned, print it and stop
36-
if 'errorMessage' in response:
37-
print(response['errorMessage'])
36+
if 'errorCode' in response:
37+
print(response['message'], response['details']['learnerMessage'])
3838
return
3939

4040
# Print the grading table
4141
print('%43s | %9s | %-s' % ('Part Name', 'Score', 'Feedback'))
4242
print('%43s | %9s | %-s' % ('---------', '-----', '--------'))
43-
for part in parts:
44-
part_feedback = response['partFeedbacks'][part]
45-
part_evaluation = response['partEvaluations'][part]
43+
for index, part in enumerate(parts):
44+
part_feedback = response['linked']['onDemandProgrammingScriptEvaluations.v1'][0]['parts'][str(part)][
45+
'feedback']
46+
part_evaluation = response['linked']['onDemandProgrammingScriptEvaluations.v1'][0]['parts'][str(part)]
4647
score = '%d / %3d' % (part_evaluation['score'], part_evaluation['maxScore'])
47-
print('%43s | %9s | %-s' % (self.part_names[int(part) - 1], score, part_feedback))
48-
evaluation = response['evaluation']
48+
print('%43s | %9s | %-s' % (self.part_names[int(index) - 1], score, part_feedback))
49+
evaluation = response['linked']['onDemandProgrammingScriptEvaluations.v1'][0]
4950
total_score = '%d / %d' % (evaluation['score'], evaluation['maxScore'])
5051
print(' --------------------------------')
5152
print('%43s | %9s | %-s\n' % (' ', total_score, ' '))
@@ -71,18 +72,15 @@ def login_prompt(self):
7172
pickle.dump((self.login, self.token), f)
7273

7374
def request(self, parts):
74-
params = {
75-
'assignmentSlug': self.assignment_slug,
75+
payload = {
76+
'assignmentKey': self.assignment_key,
77+
'submitterEmail': self.login,
7678
'secret': self.token,
77-
'parts': parts,
78-
'submitterEmail': self.login}
79-
80-
params = urlencode({'jsonBody': json.dumps(params)}).encode("utf-8")
81-
f = urlopen(self.submit_url, params)
82-
try:
83-
return 0, f.read()
84-
finally:
85-
f.close()
79+
'parts': dict(eval(str(parts)))}
80+
headers = {}
81+
82+
r = requests.post(self.submit_url, data=json.dumps(payload), headers=headers)
83+
return r.content
8684

8785
def __iter__(self):
8886
for part_id in self.functions:

0 commit comments

Comments
 (0)