Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
ff1189c5
Commit
ff1189c5
authored
Apr 12, 2013
by
Diana Huang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pylint and Pep8 fixes
parent
06a54a8c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
88 additions
and
103 deletions
+88
-103
common/lib/capa/capa/inputtypes.py
+29
-32
common/lib/capa/capa/tests/test_inputtypes.py
+59
-71
No files found.
common/lib/capa/capa/inputtypes.py
View file @
ff1189c5
...
...
@@ -150,8 +150,8 @@ class InputTypeBase(object):
## we can swap this around in the future if there's a more logical
## order.
self
.
id
=
state
.
get
(
'id'
,
xml
.
get
(
'id'
))
if
self
.
id
is
None
:
self
.
i
nput_i
d
=
state
.
get
(
'id'
,
xml
.
get
(
'id'
))
if
self
.
i
nput_i
d
is
None
:
raise
ValueError
(
"input id state is None. xml is {0}"
.
format
(
etree
.
tostring
(
xml
)))
...
...
@@ -249,7 +249,7 @@ class InputTypeBase(object):
and don't need to override this method.
"""
context
=
{
'id'
:
self
.
id
,
'id'
:
self
.
i
nput_i
d
,
'value'
:
self
.
value
,
'status'
:
self
.
status
,
'msg'
:
self
.
msg
,
...
...
@@ -457,20 +457,20 @@ class TextLine(InputTypeBase):
"""
A text line input. Can do math preview if "math"="1" is specified.
If "trailing_text" is set to a value, then the textline will be shown with
the value after the text input, and before the checkmark or any input-specific
feedback. HTML will not work, but properly escaped HTML characters will. This
feature is useful if you would like to specify a specific type of units for the
If "trailing_text" is set to a value, then the textline will be shown with
the value after the text input, and before the checkmark or any input-specific
feedback. HTML will not work, but properly escaped HTML characters will. This
feature is useful if you would like to specify a specific type of units for the
text input.
If the hidden attribute is specified, the textline is hidden and the input id
is stored in a div with name equal to the value of the hidden attribute. This
If the hidden attribute is specified, the textline is hidden and the input id
is stored in a div with name equal to the value of the hidden attribute. This
is used e.g. for embedding simulations turned into questions.
Example:
<texline math="1" trailing_text="m/s" />
This example will render out a text line with a math preview and the text 'm/s'
This example will render out a text line with a math preview and the text 'm/s'
after the end of the text line.
"""
...
...
@@ -623,7 +623,6 @@ class CodeInput(InputTypeBase):
self
.
queue_len
=
self
.
msg
self
.
msg
=
self
.
submitted_msg
def
setup
(
self
):
''' setup this input type '''
self
.
setup_code_response_rendering
()
...
...
@@ -655,7 +654,7 @@ class MatlabInput(CodeInput):
tags
=
[
'matlabinput'
]
plot_submitted_msg
=
(
"Submitted. As soon as a response is returned, "
"this message will be replaced by that feedback."
)
"this message will be replaced by that feedback."
)
def
setup
(
self
):
'''
...
...
@@ -676,16 +675,16 @@ class MatlabInput(CodeInput):
self
.
queue_len
=
1
self
.
msg
=
self
.
plot_submitted_msg
def
handle_ajax
(
self
,
dispatch
,
get
):
'''
'''
Handle AJAX calls directed to this input
Args:
- dispatch (str) - indicates how we want this ajax call to be handled
- get (dict) - dictionary of key-value pairs that contain useful data
Returns:
dict - 'success' - whether or not we successfully queued this submission
- 'message' - message to be rendered in case of error
'''
if
dispatch
==
'plot'
:
...
...
@@ -693,7 +692,7 @@ class MatlabInput(CodeInput):
return
{}
def
ungraded_response
(
self
,
queue_msg
,
queuekey
):
'''
'''
Handle the response from the XQueue
Stores the response in the input_state so it can be rendered later
...
...
@@ -705,7 +704,7 @@ class MatlabInput(CodeInput):
nothing
'''
# check the queuekey against the saved queuekey
if
(
'queuestate'
in
self
.
input_state
and
self
.
input_state
[
'queuestate'
]
==
'queued'
if
(
'queuestate'
in
self
.
input_state
and
self
.
input_state
[
'queuestate'
]
==
'queued'
and
self
.
input_state
[
'queuekey'
]
==
queuekey
):
msg
=
self
.
_parse_data
(
queue_msg
)
# save the queue message so that it can be rendered later
...
...
@@ -716,9 +715,9 @@ class MatlabInput(CodeInput):
def
_extra_context
(
self
):
''' Set up additional context variables'''
extra_context
=
{
'queue_len'
:
str
(
self
.
queue_len
),
'queue_msg'
:
self
.
queue_msg
}
'queue_len'
:
str
(
self
.
queue_len
),
'queue_msg'
:
self
.
queue_msg
}
return
extra_context
def
_parse_data
(
self
,
queue_msg
):
...
...
@@ -733,20 +732,19 @@ class MatlabInput(CodeInput):
result
=
json
.
loads
(
queue_msg
)
except
(
TypeError
,
ValueError
):
log
.
error
(
"External message should be a JSON serialized dict."
" Received queue_msg =
%
s"
%
queue_msg
)
" Received queue_msg =
%
s"
%
queue_msg
)
raise
msg
=
result
[
'msg'
]
return
msg
def
_plot_data
(
self
,
get
):
'''
'''
AJAX handler for the plot button
Args:
get (dict) - should have key 'submission' which contains the student submission
Returns:
dict - 'success' - whether or not we successfully queued this submission
- 'message' - message to be rendered in case of error
- 'message' - message to be rendered in case of error
'''
# only send data if xqueue exists
if
self
.
system
.
xqueue
is
None
:
...
...
@@ -762,26 +760,25 @@ class MatlabInput(CodeInput):
anonymous_student_id
=
self
.
system
.
anonymous_student_id
queuekey
=
xqueue_interface
.
make_hashkey
(
str
(
self
.
system
.
seed
)
+
qtime
+
anonymous_student_id
+
self
.
id
)
self
.
i
nput_i
d
)
xheader
=
xqueue_interface
.
make_xheader
(
lms_callback_url
=
callback_url
,
lms_key
=
queuekey
,
queue_name
=
self
.
queuename
)
lms_callback_url
=
callback_url
,
lms_key
=
queuekey
,
queue_name
=
self
.
queuename
)
# save the input state
self
.
input_state
[
'queuekey'
]
=
queuekey
self
.
input_state
[
'queuestate'
]
=
'queued'
# construct xqueue body
student_info
=
{
'anonymous_student_id'
:
anonymous_student_id
,
'submission_time'
:
qtime
}
'submission_time'
:
qtime
}
contents
=
{
'grader_payload'
:
self
.
plot_payload
,
'student_info'
:
json
.
dumps
(
student_info
),
'student_response'
:
response
}
(
error
,
msg
)
=
qinterface
.
send_to_queue
(
header
=
xheader
,
body
=
json
.
dumps
(
contents
))
body
=
json
.
dumps
(
contents
))
return
{
'success'
:
error
==
0
,
'message'
:
msg
}
...
...
@@ -1040,7 +1037,7 @@ class DragAndDropInput(InputTypeBase):
if
tag_type
==
'draggable'
:
dic
[
'target_fields'
]
=
[
parse
(
target
,
'target'
)
for
target
in
tag
.
iterchildren
(
'target'
)]
tag
.
iterchildren
(
'target'
)]
return
dic
...
...
common/lib/capa/capa/tests/test_inputtypes.py
View file @
ff1189c5
...
...
@@ -60,6 +60,7 @@ class OptionInputTest(unittest.TestCase):
def
test_option_parsing
(
self
):
f
=
inputtypes
.
OptionInput
.
parse_options
def
check
(
input
,
options
):
"""Take list of options, confirm that output is in the silly doubled format"""
expected
=
[(
o
,
o
)
for
o
in
options
]
...
...
@@ -120,7 +121,6 @@ class ChoiceGroupTest(unittest.TestCase):
self
.
check_group
(
'checkboxgroup'
,
'checkbox'
,
'[]'
)
class
JavascriptInputTest
(
unittest
.
TestCase
):
'''
The javascript input is a pretty straightforward pass-thru, but test it anyway
...
...
@@ -186,7 +186,6 @@ class TextLineTest(unittest.TestCase):
'preprocessor'
:
None
}
self
.
assertEqual
(
context
,
expected
)
def
test_math_rendering
(
self
):
size
=
"42"
preprocessorClass
=
"preParty"
...
...
@@ -226,11 +225,11 @@ class TextLineTest(unittest.TestCase):
trailing_text
.
append
((
u'
\xc3
'
,
u'
\xc3
'
))
# html escaped trailing text
# this is the only one we expect to change
trailing_text
.
append
((
'a < b'
,
'a < b'
))
trailing_text
.
append
((
'a < b'
,
'a < b'
))
for
xml_text
,
expected_text
in
trailing_text
:
xml_str
=
u"""<textline id="prob_1_2"
size="{size}"
xml_str
=
u"""<textline id="prob_1_2"
size="{size}"
trailing_text="{tt}"
/>"""
.
format
(
size
=
size
,
tt
=
xml_text
)
...
...
@@ -269,7 +268,6 @@ class FileSubmissionTest(unittest.TestCase):
/>"""
.
format
(
af
=
allowed_files
,
rf
=
required_files
,)
element
=
etree
.
fromstring
(
xml_str
)
state
=
{
'value'
:
'BumbleBee.py'
,
...
...
@@ -281,12 +279,12 @@ class FileSubmissionTest(unittest.TestCase):
context
=
the_input
.
_get_render_context
()
expected
=
{
'id'
:
'prob_1_2'
,
'status'
:
'queued'
,
'msg'
:
input_class
.
submitted_msg
,
'value'
:
'BumbleBee.py'
,
'queue_len'
:
'3'
,
'allowed_files'
:
'["runme.py", "nooooo.rb", "ohai.java"]'
,
'required_files'
:
'["cookies.py"]'
}
'status'
:
'queued'
,
'msg'
:
input_class
.
submitted_msg
,
'value'
:
'BumbleBee.py'
,
'queue_len'
:
'3'
,
'allowed_files'
:
'["runme.py", "nooooo.rb", "ohai.java"]'
,
'required_files'
:
'["cookies.py"]'
}
self
.
assertEqual
(
context
,
expected
)
...
...
@@ -327,19 +325,19 @@ class CodeInputTest(unittest.TestCase):
expected
=
{
'id'
:
'prob_1_2'
,
'value'
:
'print "good evening"'
,
'status'
:
'queued'
,
'msg'
:
input_class
.
submitted_msg
,
'mode'
:
mode
,
'linenumbers'
:
linenumbers
,
'rows'
:
rows
,
'cols'
:
cols
,
'hidden'
:
''
,
'tabsize'
:
int
(
tabsize
),
'queue_len'
:
'3'
,
}
'status'
:
'queued'
,
'msg'
:
input_class
.
submitted_msg
,
'mode'
:
mode
,
'linenumbers'
:
linenumbers
,
'rows'
:
rows
,
'cols'
:
cols
,
'hidden'
:
''
,
'tabsize'
:
int
(
tabsize
),
'queue_len'
:
'3'
}
self
.
assertEqual
(
context
,
expected
)
class
MatlabTest
(
unittest
.
TestCase
):
'''
Test Matlab input types
...
...
@@ -352,18 +350,18 @@ class MatlabTest(unittest.TestCase):
self
.
payload
=
"payload"
self
.
linenumbers
=
'true'
self
.
xml
=
"""<matlabinput id="prob_1_2"
rows="{r}" cols="{c}"
rows="{r}" cols="{c}"
tabsize="{tabsize}" mode="{m}"
linenumbers="{ln}">
<plot_payload>
{payload}
</plot_payload>
</matlabinput>"""
.
format
(
r
=
self
.
rows
,
c
=
self
.
cols
,
tabsize
=
self
.
tabsize
,
m
=
self
.
mode
,
payload
=
self
.
payload
,
ln
=
self
.
linenumbers
)
</matlabinput>"""
.
format
(
r
=
self
.
rows
,
c
=
self
.
cols
,
tabsize
=
self
.
tabsize
,
m
=
self
.
mode
,
payload
=
self
.
payload
,
ln
=
self
.
linenumbers
)
elt
=
etree
.
fromstring
(
self
.
xml
)
state
=
{
'value'
:
'print "good evening"'
,
'status'
:
'incomplete'
,
...
...
@@ -372,27 +370,24 @@ class MatlabTest(unittest.TestCase):
self
.
input_class
=
lookup_tag
(
'matlabinput'
)
self
.
the_input
=
self
.
input_class
(
test_system
,
elt
,
state
)
def
test_rendering
(
self
):
context
=
self
.
the_input
.
_get_render_context
()
expected
=
{
'id'
:
'prob_1_2'
,
'value'
:
'print "good evening"'
,
'status'
:
'queued'
,
'msg'
:
self
.
input_class
.
submitted_msg
,
'mode'
:
self
.
mode
,
'rows'
:
self
.
rows
,
'cols'
:
self
.
cols
,
'queue_msg'
:
''
,
'linenumbers'
:
'true'
,
'hidden'
:
''
,
'tabsize'
:
int
(
self
.
tabsize
),
'queue_len'
:
'3'
,
}
'status'
:
'queued'
,
'msg'
:
self
.
input_class
.
submitted_msg
,
'mode'
:
self
.
mode
,
'rows'
:
self
.
rows
,
'cols'
:
self
.
cols
,
'queue_msg'
:
''
,
'linenumbers'
:
'true'
,
'hidden'
:
''
,
'tabsize'
:
int
(
self
.
tabsize
),
'queue_len'
:
'3'
}
self
.
assertEqual
(
context
,
expected
)
def
test_rendering_with_state
(
self
):
state
=
{
'value'
:
'print "good evening"'
,
'status'
:
'incomplete'
,
...
...
@@ -405,17 +400,16 @@ class MatlabTest(unittest.TestCase):
expected
=
{
'id'
:
'prob_1_2'
,
'value'
:
'print "good evening"'
,
'status'
:
'queued'
,
'msg'
:
self
.
input_class
.
submitted_msg
,
'mode'
:
self
.
mode
,
'rows'
:
self
.
rows
,
'cols'
:
self
.
cols
,
'queue_msg'
:
'message'
,
'linenumbers'
:
'true'
,
'hidden'
:
''
,
'tabsize'
:
int
(
self
.
tabsize
),
'queue_len'
:
'3'
,
}
'status'
:
'queued'
,
'msg'
:
self
.
input_class
.
submitted_msg
,
'mode'
:
self
.
mode
,
'rows'
:
self
.
rows
,
'cols'
:
self
.
cols
,
'queue_msg'
:
'message'
,
'linenumbers'
:
'true'
,
'hidden'
:
''
,
'tabsize'
:
int
(
self
.
tabsize
),
'queue_len'
:
'3'
}
self
.
assertEqual
(
context
,
expected
)
...
...
@@ -430,17 +424,16 @@ class MatlabTest(unittest.TestCase):
context
=
the_input
.
_get_render_context
()
expected
=
{
'id'
:
'prob_1_2'
,
'value'
:
'print "good evening"'
,
'status'
:
'queued'
,
'msg'
:
self
.
input_class
.
plot_submitted_msg
,
'mode'
:
self
.
mode
,
'rows'
:
self
.
rows
,
'cols'
:
self
.
cols
,
'queue_msg'
:
''
,
'linenumbers'
:
'true'
,
'hidden'
:
''
,
'tabsize'
:
int
(
self
.
tabsize
),
'queue_len'
:
'1'
,
}
'status'
:
'queued'
,
'msg'
:
self
.
input_class
.
plot_submitted_msg
,
'mode'
:
self
.
mode
,
'rows'
:
self
.
rows
,
'cols'
:
self
.
cols
,
'queue_msg'
:
''
,
'linenumbers'
:
'true'
,
'hidden'
:
''
,
'tabsize'
:
int
(
self
.
tabsize
),
'queue_len'
:
'1'
}
self
.
assertEqual
(
context
,
expected
)
...
...
@@ -449,7 +442,7 @@ class MatlabTest(unittest.TestCase):
response
=
self
.
the_input
.
handle_ajax
(
"plot"
,
get
)
test_system
.
xqueue
[
'interface'
]
.
send_to_queue
.
assert_called_with
(
header
=
ANY
,
body
=
ANY
)
self
.
assertTrue
(
response
[
'success'
])
self
.
assertTrue
(
self
.
the_input
.
input_state
[
'queuekey'
]
is
not
None
)
self
.
assertEqual
(
self
.
the_input
.
input_state
[
'queuestate'
],
'queued'
)
...
...
@@ -491,9 +484,6 @@ class MatlabTest(unittest.TestCase):
self
.
assertFalse
(
'queue_msg'
in
input_state
)
class
SchematicTest
(
unittest
.
TestCase
):
'''
Check that schematic inputs work
...
...
@@ -507,7 +497,6 @@ class SchematicTest(unittest.TestCase):
initial_value
=
'two large batteries'
submit_analyses
=
'maybe'
xml_str
=
"""<schematic id="prob_1_2"
height="{h}"
width="{w}"
...
...
@@ -537,8 +526,7 @@ class SchematicTest(unittest.TestCase):
'height'
:
height
,
'parts'
:
parts
,
'analyses'
:
analyses
,
'submit_analyses'
:
submit_analyses
,
}
'submit_analyses'
:
submit_analyses
}
self
.
assertEqual
(
context
,
expected
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment