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
b71233fd
Commit
b71233fd
authored
Dec 12, 2012
by
Vik Paruchuri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add in message passing pipeline
parent
ce3b84d0
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
79 additions
and
9 deletions
+79
-9
common/lib/capa/capa/capa_problem.py
+12
-2
common/lib/capa/capa/responsetypes.py
+59
-3
common/lib/xmodule/xmodule/capa_module.py
+2
-2
common/lib/xmodule/xmodule/js/src/capa/display.coffee
+6
-2
No files found.
common/lib/capa/capa/capa_problem.py
View file @
b71233fd
...
@@ -189,10 +189,20 @@ class LoncapaProblem(object):
...
@@ -189,10 +189,20 @@ class LoncapaProblem(object):
def
message_post
(
self
,
event_info
):
def
message_post
(
self
,
event_info
):
"""
"""
Handle an ajax post that contains feedback on feedback
Handle an ajax post that contains feedback on feedback
Returns a boolean success variable
Note: This only allows for feedback to be posted back to the grading controller for the first
open ended response problem on each page. Multiple problems will cause some sync issues.
TODO: Handle multiple problems on one page sync issues.
"""
"""
success
=
False
message
=
""
log
.
debug
(
"in lcp"
)
for
responder
in
self
.
responders
.
values
():
for
responder
in
self
.
responders
.
values
():
if
hasattr
(
responder
,
'message_post'
):
if
hasattr
(
responder
,
'handle_message_post'
):
responder
.
message_post
(
event_info
)
success
,
message
=
responder
.
handle_message_post
(
event_info
)
if
success
:
break
return
success
,
message
def
get_score
(
self
):
def
get_score
(
self
):
"""
"""
...
...
common/lib/capa/capa/responsetypes.py
View file @
b71233fd
...
@@ -1848,6 +1848,7 @@ class OpenEndedResponse(LoncapaResponse):
...
@@ -1848,6 +1848,7 @@ class OpenEndedResponse(LoncapaResponse):
xml
=
self
.
xml
xml
=
self
.
xml
self
.
url
=
xml
.
get
(
'url'
,
None
)
self
.
url
=
xml
.
get
(
'url'
,
None
)
self
.
queue_name
=
xml
.
get
(
'queuename'
,
self
.
DEFAULT_QUEUE
)
self
.
queue_name
=
xml
.
get
(
'queuename'
,
self
.
DEFAULT_QUEUE
)
self
.
message_queue_name
=
xml
.
get
(
'message-queuename'
,
self
.
DEFAULT_MESSAGE_QUEUE
)
# The openendedparam tag encapsulates all grader settings
# The openendedparam tag encapsulates all grader settings
oeparam
=
self
.
xml
.
find
(
'openendedparam'
)
oeparam
=
self
.
xml
.
find
(
'openendedparam'
)
...
@@ -1921,6 +1922,52 @@ class OpenEndedResponse(LoncapaResponse):
...
@@ -1921,6 +1922,52 @@ class OpenEndedResponse(LoncapaResponse):
except
ValueError
:
except
ValueError
:
self
.
max_score
=
1
self
.
max_score
=
1
def
handle_message_post
(
self
,
event_info
):
"""
Handles a student message post (a reaction to the grade they received from an open ended grader type)
Returns a boolean success/fail and an error message
"""
survey_responses
=
event_info
[
'survey_responses'
]
for
tag
in
[
'feedback'
,
'submission_id'
,
'grader_id'
]:
if
tag
not
in
survey_responses
:
return
False
,
"Could not find needed tag {0}"
.
format
(
tag
)
try
:
submission_id
=
int
(
survey_responses
[
'submission_id'
][
0
])
grader_id
=
int
(
survey_responses
[
'grader_id'
][
0
])
feedback
=
str
(
survey_responses
[
'feedback'
][
0
])
except
:
error_message
=
"Could not parse submission id, grader id, or feedback from message_post ajax call."
log
.
exception
(
error_message
)
return
False
,
error_message
qinterface
=
self
.
system
.
xqueue
[
'interface'
]
qtime
=
datetime
.
strftime
(
datetime
.
now
(),
xqueue_interface
.
dateformat
)
anonymous_student_id
=
self
.
system
.
anonymous_student_id
queuekey
=
xqueue_interface
.
make_hashkey
(
str
(
self
.
system
.
seed
)
+
qtime
+
anonymous_student_id
+
self
.
answer_id
)
xheader
=
xqueue_interface
.
make_xheader
(
lms_key
=
queuekey
,
queue_name
=
self
.
message_queue_name
)
student_info
=
{
'anonymous_student_id'
:
anonymous_student_id
,
'submission_time'
:
qtime
,
}
contents
=
{
'feedback'
:
feedback
,
'submission_id'
:
submission_id
,
'grader_id'
:
grader_id
,
'student_info'
:
json
.
dumps
(
student_info
),
}
(
error
,
msg
)
=
qinterface
.
send_to_queue
(
header
=
xheader
,
body
=
json
.
dumps
(
contents
))
#Convert error to a success value
success
=
True
if
error
:
success
=
False
return
success
,
"Successfully sent to queue."
def
get_score
(
self
,
student_answers
):
def
get_score
(
self
,
student_answers
):
try
:
try
:
...
@@ -2068,11 +2115,18 @@ class OpenEndedResponse(LoncapaResponse):
...
@@ -2068,11 +2115,18 @@ class OpenEndedResponse(LoncapaResponse):
</div>
</div>
"""
.
format
(
feedback_type
=
feedback_type
,
value
=
value
)
"""
.
format
(
feedback_type
=
feedback_type
,
value
=
value
)
def
format_feedback_hidden
(
feedback_type
,
value
):
return
"""
<div class="{feedback_type}" style="display: none;">
{value}
</div>
"""
.
format
(
feedback_type
=
feedback_type
,
value
=
value
)
# TODO (vshnayder): design and document the details of this format so
# TODO (vshnayder): design and document the details of this format so
# that we can do proper escaping here (e.g. are the graders allowed to
# that we can do proper escaping here (e.g. are the graders allowed to
# include HTML?)
# include HTML?)
for
tag
in
[
'success'
,
'feedback'
]:
for
tag
in
[
'success'
,
'feedback'
,
'submission_id'
,
'grader_id'
]:
if
tag
not
in
response_items
:
if
tag
not
in
response_items
:
return
format_feedback
(
'errors'
,
'Error getting feedback'
)
return
format_feedback
(
'errors'
,
'Error getting feedback'
)
...
@@ -2088,10 +2142,12 @@ class OpenEndedResponse(LoncapaResponse):
...
@@ -2088,10 +2142,12 @@ class OpenEndedResponse(LoncapaResponse):
return
format_feedback
(
'errors'
,
'No feedback available'
)
return
format_feedback
(
'errors'
,
'No feedback available'
)
feedback_lst
=
sorted
(
feedback
.
items
(),
key
=
get_priority
)
feedback_lst
=
sorted
(
feedback
.
items
(),
key
=
get_priority
)
return
u"
\n
"
.
join
(
format_feedback
(
k
,
v
)
for
k
,
v
in
feedback_lst
)
feedback_list_part1
=
u"
\n
"
.
join
(
format_feedback
(
k
,
v
)
for
k
,
v
in
feedback_lst
)
else
:
else
:
return
format_feedback
(
'errors'
,
response_items
[
'feedback'
])
feedback_list_part1
=
format_feedback
(
'errors'
,
response_items
[
'feedback'
])
feedback_list_part2
=
u"
\n
"
.
join
([
format_feedback_hidden
(
k
,
response_items
[
k
])
for
k
in
response_items
.
keys
()
if
k
in
[
'submission_id'
,
'grader_id'
]])
return
u"
\n
"
.
join
([
feedback_list_part1
,
feedback_list_part2
])
def
_format_feedback
(
self
,
response_items
):
def
_format_feedback
(
self
,
response_items
):
"""
"""
...
...
common/lib/xmodule/xmodule/capa_module.py
View file @
b71233fd
...
@@ -405,9 +405,9 @@ class CapaModule(XModule):
...
@@ -405,9 +405,9 @@ class CapaModule(XModule):
event_info
[
'student_id'
]
=
self
.
system
.
anonymous_student_id
event_info
[
'student_id'
]
=
self
.
system
.
anonymous_student_id
event_info
[
'survey_responses'
]
=
get
event_info
[
'survey_responses'
]
=
get
success
_dict
=
self
.
lcp
.
message_post
(
event_info
)
success
,
message
=
self
.
lcp
.
message_post
(
event_info
)
return
{
'success'
:
True
}
return
{
'success'
:
success
}
def
closed
(
self
):
def
closed
(
self
):
''' Is the student still allowed to submit answers? '''
''' Is the student still allowed to submit answers? '''
...
...
common/lib/xmodule/xmodule/js/src/capa/display.coffee
View file @
b71233fd
...
@@ -202,8 +202,12 @@ class @Problem
...
@@ -202,8 +202,12 @@ class @Problem
Logger
.
log
'message_post'
,
@
answers
Logger
.
log
'message_post'
,
@
answers
fd
=
new
FormData
()
fd
=
new
FormData
()
feedback
=
@
$
(
'section.evaluation textarea.feedback-on-feedback'
)[
0
]
feedback
=
@
$
(
'section.evaluation textarea.feedback-on-feedback'
)[
0
].
value
fd
.
append
(
'feedback'
,
feedback
.
value
)
submission_id
=
$
(
'div.external-grader-message div.submission_id'
)[
0
].
innerHTML
grader_id
=
$
(
'div.external-grader-message div.grader_id'
)[
0
].
innerHTML
fd
.
append
(
'feedback'
,
feedback
)
fd
.
append
(
'submission_id'
,
submission_id
)
fd
.
append
(
'grader_id'
,
grader_id
)
settings
=
settings
=
type
:
"POST"
type
:
"POST"
...
...
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