Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-ora2
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-ora2
Commits
65ebba35
Commit
65ebba35
authored
Oct 05, 2017
by
John Eskew
Committed by
GitHub
Oct 05, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1051 from edx/jeskew/more_django1.11_changes
Another import move to support Django 1.11
parents
b0cc7c69
b5d7a8c2
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
29 additions
and
5 deletions
+29
-5
openassessment/xblock/course_items_listing_mixin.py
+1
-0
openassessment/xblock/grade_mixin.py
+5
-0
openassessment/xblock/leaderboard_mixin.py
+2
-0
openassessment/xblock/peer_assessment_mixin.py
+6
-1
openassessment/xblock/self_assessment_mixin.py
+1
-0
openassessment/xblock/staff_area_mixin.py
+6
-0
openassessment/xblock/submission_mixin.py
+3
-0
openassessment/xblock/test/test_peer.py
+3
-3
openassessment/xblock/validation.py
+1
-0
setup.py
+1
-1
No files found.
openassessment/xblock/course_items_listing_mixin.py
View file @
65ebba35
...
@@ -24,6 +24,7 @@ class CourseItemsListingMixin(object):
...
@@ -24,6 +24,7 @@ class CourseItemsListingMixin(object):
Get information about all ora2 blocks in the course with response count for each step.
Get information about all ora2 blocks in the course with response count for each step.
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.data
import
OraAggregateData
from
openassessment.data
import
OraAggregateData
responses
=
OraAggregateData
.
collect_ora2_responses
(
unicode
(
self
.
course_id
))
responses
=
OraAggregateData
.
collect_ora2_responses
(
unicode
(
self
.
course_id
))
return
Response
(
json
.
dumps
(
responses
),
content_type
=
'application/json'
)
return
Response
(
json
.
dumps
(
responses
),
content_type
=
'application/json'
)
openassessment/xblock/grade_mixin.py
View file @
65ebba35
...
@@ -37,6 +37,7 @@ class GradeMixin(object):
...
@@ -37,6 +37,7 @@ class GradeMixin(object):
Returns:
Returns:
unicode: HTML content of the grade step.
unicode: HTML content of the grade step.
"""
"""
# Import is placed here to avoid model import at project startup.
from
submissions
import
api
as
sub_api
from
submissions
import
api
as
sub_api
# Retrieve the status of the workflow. If no workflows have been
# Retrieve the status of the workflow. If no workflows have been
...
@@ -82,6 +83,7 @@ class GradeMixin(object):
...
@@ -82,6 +83,7 @@ class GradeMixin(object):
Returns:
Returns:
tuple of context (dict), template_path (string)
tuple of context (dict), template_path (string)
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
peer
as
peer_api
from
openassessment.assessment.api
import
peer
as
peer_api
from
openassessment.assessment.api
import
self
as
self_api
from
openassessment.assessment.api
import
self
as
self_api
from
openassessment.assessment.api
import
staff
as
staff_api
from
openassessment.assessment.api
import
staff
as
staff_api
...
@@ -189,6 +191,7 @@ class GradeMixin(object):
...
@@ -189,6 +191,7 @@ class GradeMixin(object):
Dict with keys 'success' (bool) and 'msg' (unicode)
Dict with keys 'success' (bool) and 'msg' (unicode)
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
peer
as
peer_api
from
openassessment.assessment.api
import
peer
as
peer_api
feedback_text
=
data
.
get
(
'feedback_text'
,
u''
)
feedback_text
=
data
.
get
(
'feedback_text'
,
u''
)
...
@@ -250,6 +253,7 @@ class GradeMixin(object):
...
@@ -250,6 +253,7 @@ class GradeMixin(object):
...
...
}
}
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
peer
as
peer_api
from
openassessment.assessment.api
import
peer
as
peer_api
from
openassessment.assessment.api
import
self
as
self_api
from
openassessment.assessment.api
import
self
as
self_api
from
openassessment.assessment.api
import
staff
as
staff_api
from
openassessment.assessment.api
import
staff
as
staff_api
...
@@ -400,6 +404,7 @@ class GradeMixin(object):
...
@@ -400,6 +404,7 @@ class GradeMixin(object):
The option for the median peer grade.
The option for the median peer grade.
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
peer
as
peer_api
from
openassessment.assessment.api
import
peer
as
peer_api
median_scores
=
peer_api
.
get_assessment_median_scores
(
submission_uuid
)
median_scores
=
peer_api
.
get_assessment_median_scores
(
submission_uuid
)
...
...
openassessment/xblock/leaderboard_mixin.py
View file @
65ebba35
...
@@ -36,6 +36,7 @@ class LeaderboardMixin(object):
...
@@ -36,6 +36,7 @@ class LeaderboardMixin(object):
Returns:
Returns:
unicode: HTML content of the leaderboard.
unicode: HTML content of the leaderboard.
"""
"""
# Import is placed here to avoid model import at project startup.
from
submissions
import
api
as
sub_api
from
submissions
import
api
as
sub_api
# Retrieve the status of the workflow. If no workflows have been
# Retrieve the status of the workflow. If no workflows have been
# started this will be an empty dict, so status will be None.
# started this will be an empty dict, so status will be None.
...
@@ -63,6 +64,7 @@ class LeaderboardMixin(object):
...
@@ -63,6 +64,7 @@ class LeaderboardMixin(object):
Returns:
Returns:
template_path (string), tuple of context (dict)
template_path (string), tuple of context (dict)
"""
"""
# Import is placed here to avoid model import at project startup.
from
submissions
import
api
as
sub_api
from
submissions
import
api
as
sub_api
# Retrieve top scores from the submissions API
# Retrieve top scores from the submissions API
...
...
openassessment/xblock/peer_assessment_mixin.py
View file @
65ebba35
...
@@ -8,7 +8,6 @@ import logging
...
@@ -8,7 +8,6 @@ import logging
from
webob
import
Response
from
webob
import
Response
from
xblock.core
import
XBlock
from
xblock.core
import
XBlock
from
openassessment.assessment.api
import
peer
as
peer_api
from
openassessment.assessment.errors
import
(
PeerAssessmentInternalError
,
PeerAssessmentRequestError
,
from
openassessment.assessment.errors
import
(
PeerAssessmentInternalError
,
PeerAssessmentRequestError
,
PeerAssessmentWorkflowError
)
PeerAssessmentWorkflowError
)
from
openassessment.workflow.errors
import
AssessmentWorkflowError
from
openassessment.workflow.errors
import
AssessmentWorkflowError
...
@@ -56,6 +55,8 @@ class PeerAssessmentMixin(object):
...
@@ -56,6 +55,8 @@ class PeerAssessmentMixin(object):
and "msg" (unicode) containing additional information if an error occurs.
and "msg" (unicode) containing additional information if an error occurs.
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
peer
as
peer_api
if
self
.
submission_uuid
is
None
:
if
self
.
submission_uuid
is
None
:
return
{
return
{
'success'
:
False
,
'msg'
:
self
.
_
(
'You must submit a response before you can perform a peer assessment.'
)
'success'
:
False
,
'msg'
:
self
.
_
(
'You must submit a response before you can perform a peer assessment.'
)
...
@@ -164,6 +165,8 @@ class PeerAssessmentMixin(object):
...
@@ -164,6 +165,8 @@ class PeerAssessmentMixin(object):
tuple of (template_path, context_dict)
tuple of (template_path, context_dict)
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
peer
as
peer_api
path
=
'openassessmentblock/peer/oa_peer_unavailable.html'
path
=
'openassessmentblock/peer/oa_peer_unavailable.html'
finished
=
False
finished
=
False
problem_closed
,
reason
,
start_date
,
due_date
=
self
.
is_closed
(
step
=
"peer-assessment"
)
problem_closed
,
reason
,
start_date
,
due_date
=
self
.
is_closed
(
step
=
"peer-assessment"
)
...
@@ -274,6 +277,8 @@ class PeerAssessmentMixin(object):
...
@@ -274,6 +277,8 @@ class PeerAssessmentMixin(object):
dict: The serialized submission model.
dict: The serialized submission model.
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
peer
as
peer_api
peer_submission
=
False
peer_submission
=
False
try
:
try
:
peer_submission
=
peer_api
.
get_submission_to_assess
(
peer_submission
=
peer_api
.
get_submission_to_assess
(
...
...
openassessment/xblock/self_assessment_mixin.py
View file @
65ebba35
...
@@ -52,6 +52,7 @@ class SelfAssessmentMixin(object):
...
@@ -52,6 +52,7 @@ class SelfAssessmentMixin(object):
SubmissionError: Error occurred while retrieving the current submission.
SubmissionError: Error occurred while retrieving the current submission.
SelfAssessmentRequestError: Error occurred while checking if we had a self-assessment.
SelfAssessmentRequestError: Error occurred while checking if we had a self-assessment.
"""
"""
# Import is placed here to avoid model import at project startup.
from
submissions
import
api
as
submission_api
from
submissions
import
api
as
submission_api
path
=
'openassessmentblock/self/oa_self_unavailable.html'
path
=
'openassessmentblock/self/oa_self_unavailable.html'
...
...
openassessment/xblock/staff_area_mixin.py
View file @
65ebba35
...
@@ -147,6 +147,7 @@ class StaffAreaMixin(object):
...
@@ -147,6 +147,7 @@ class StaffAreaMixin(object):
"""
"""
Returns a context with staff assessment "ungraded" and "in-progress" counts.
Returns a context with staff assessment "ungraded" and "in-progress" counts.
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
staff
as
staff_api
from
openassessment.assessment.api
import
staff
as
staff_api
grading_stats
=
staff_api
.
get_staff_grading_statistics
(
course_id
,
item_id
)
grading_stats
=
staff_api
.
get_staff_grading_statistics
(
course_id
,
item_id
)
...
@@ -183,6 +184,7 @@ class StaffAreaMixin(object):
...
@@ -183,6 +184,7 @@ class StaffAreaMixin(object):
Must be course staff to render this view.
Must be course staff to render this view.
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
staff
as
staff_api
from
openassessment.assessment.api
import
staff
as
staff_api
from
submissions
import
api
as
submission_api
from
submissions
import
api
as
submission_api
try
:
try
:
...
@@ -284,6 +286,7 @@ class StaffAreaMixin(object):
...
@@ -284,6 +286,7 @@ class StaffAreaMixin(object):
Args:
Args:
student_username (unicode): The username of the student to report.
student_username (unicode): The username of the student to report.
"""
"""
# Import is placed here to avoid model import at project startup.
from
submissions
import
api
as
submission_api
from
submissions
import
api
as
submission_api
anonymous_user_id
=
None
anonymous_user_id
=
None
...
@@ -323,6 +326,7 @@ class StaffAreaMixin(object):
...
@@ -323,6 +326,7 @@ class StaffAreaMixin(object):
submission_uuid (unicode): The uuid of the submission, should NOT be None.
submission_uuid (unicode): The uuid of the submission, should NOT be None.
context: the context to update with additional information
context: the context to update with additional information
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.assessment.api
import
peer
as
peer_api
from
openassessment.assessment.api
import
peer
as
peer_api
from
openassessment.assessment.api
import
self
as
self_api
from
openassessment.assessment.api
import
self
as
self_api
from
openassessment.assessment.api
import
staff
as
staff_api
from
openassessment.assessment.api
import
staff
as
staff_api
...
@@ -396,6 +400,7 @@ class StaffAreaMixin(object):
...
@@ -396,6 +400,7 @@ class StaffAreaMixin(object):
for a given problem. It will cancel the workflow using traditional methods to remove it from the grading pools,
for a given problem. It will cancel the workflow using traditional methods to remove it from the grading pools,
and pass through to the submissions API to orphan the submission so that the user can create a new one.
and pass through to the submissions API to orphan the submission so that the user can create a new one.
"""
"""
# Import is placed here to avoid model import at project startup.
from
submissions
import
api
as
submission_api
from
submissions
import
api
as
submission_api
# Note that student_item cannot be constructed using get_student_item_dict, since we're in a staff context
# Note that student_item cannot be constructed using get_student_item_dict, since we're in a staff context
student_item
=
{
student_item
=
{
...
@@ -452,6 +457,7 @@ class StaffAreaMixin(object):
...
@@ -452,6 +457,7 @@ class StaffAreaMixin(object):
If requesting_user is not provided, we will use the user to which this xblock is currently bound.
If requesting_user is not provided, we will use the user to which this xblock is currently bound.
"""
"""
# Import is placed here to avoid model import at project startup.
from
openassessment.workflow
import
api
as
workflow_api
from
openassessment.workflow
import
api
as
workflow_api
try
:
try
:
assessment_requirements
=
self
.
workflow_requirements
()
assessment_requirements
=
self
.
workflow_requirements
()
...
...
openassessment/xblock/submission_mixin.py
View file @
65ebba35
...
@@ -68,6 +68,7 @@ class SubmissionMixin(object):
...
@@ -68,6 +68,7 @@ class SubmissionMixin(object):
associated status tag (str), and status text (unicode).
associated status tag (str), and status text (unicode).
"""
"""
# Import is placed here to avoid model import at project startup.
from
submissions
import
api
from
submissions
import
api
if
'submission'
not
in
data
:
if
'submission'
not
in
data
:
return
(
return
(
...
@@ -225,6 +226,7 @@ class SubmissionMixin(object):
...
@@ -225,6 +226,7 @@ class SubmissionMixin(object):
return
{
'success'
:
False
,
'msg'
:
self
.
_
(
u"Files descriptions were not submitted."
)}
return
{
'success'
:
False
,
'msg'
:
self
.
_
(
u"Files descriptions were not submitted."
)}
def
create_submission
(
self
,
student_item_dict
,
student_sub_data
,
files_descriptions
=
None
):
def
create_submission
(
self
,
student_item_dict
,
student_sub_data
,
files_descriptions
=
None
):
# Import is placed here to avoid model import at project startup.
from
submissions
import
api
from
submissions
import
api
# Store the student's response text in a JSON-encodable dict
# Store the student's response text in a JSON-encodable dict
...
@@ -434,6 +436,7 @@ class SubmissionMixin(object):
...
@@ -434,6 +436,7 @@ class SubmissionMixin(object):
the front end.
the front end.
"""
"""
# Import is placed here to avoid model import at project startup.
from
submissions
import
api
from
submissions
import
api
try
:
try
:
return
api
.
get_submission
(
submission_uuid
)
return
api
.
get_submission
(
submission_uuid
)
...
...
openassessment/xblock/test/test_peer.py
View file @
65ebba35
...
@@ -645,7 +645,7 @@ class TestPeerAssessmentRender(XBlockHandlerTestCase):
...
@@ -645,7 +645,7 @@ class TestPeerAssessmentRender(XBlockHandlerTestCase):
xblock
.
get_workflow_info
=
mock
.
Mock
(
return_value
=
workflow_info
)
xblock
.
get_workflow_info
=
mock
.
Mock
(
return_value
=
workflow_info
)
# Simulate that we've either finished or not finished required grading
# Simulate that we've either finished or not finished required grading
patched_module
=
'openassessment.
xblock.peer_assessment_mixin.peer_api
'
patched_module
=
'openassessment.
assessment.api.peer
'
with
mock
.
patch
(
patched_module
+
'.has_finished_required_evaluating'
)
as
mock_finished
:
with
mock
.
patch
(
patched_module
+
'.has_finished_required_evaluating'
)
as
mock_finished
:
mock_finished
.
return_value
=
(
was_graded_enough
,
1
)
mock_finished
.
return_value
=
(
was_graded_enough
,
1
)
path
,
context
=
xblock
.
peer_path_and_context
(
continue_grading
)
path
,
context
=
xblock
.
peer_path_and_context
(
continue_grading
)
...
@@ -775,13 +775,13 @@ class TestPeerAssessHandler(XBlockHandlerTestCase):
...
@@ -775,13 +775,13 @@ class TestPeerAssessHandler(XBlockHandlerTestCase):
expect_failure
=
True
expect_failure
=
True
)
)
@mock.patch
(
'openassessment.
xblock.peer_assessment_mixin.peer_api
'
)
@mock.patch
(
'openassessment.
assessment.api.peer
'
)
@scenario
(
'data/peer_assessment_scenario.xml'
,
user_id
=
'Bob'
)
@scenario
(
'data/peer_assessment_scenario.xml'
,
user_id
=
'Bob'
)
def
test_peer_api_request_error
(
self
,
xblock
,
mock_api
):
def
test_peer_api_request_error
(
self
,
xblock
,
mock_api
):
mock_api
.
create_assessment
.
side_effect
=
peer_api
.
PeerAssessmentRequestError
mock_api
.
create_assessment
.
side_effect
=
peer_api
.
PeerAssessmentRequestError
self
.
_submit_peer_assessment
(
xblock
,
u"Sally"
,
u"Bob"
,
self
.
ASSESSMENT
,
expect_failure
=
True
)
self
.
_submit_peer_assessment
(
xblock
,
u"Sally"
,
u"Bob"
,
self
.
ASSESSMENT
,
expect_failure
=
True
)
@mock.patch
(
'openassessment.
xblock.peer_assessment_mixin.peer_api
'
)
@mock.patch
(
'openassessment.
assessment.api.peer
'
)
@scenario
(
'data/peer_assessment_scenario.xml'
,
user_id
=
'Bob'
)
@scenario
(
'data/peer_assessment_scenario.xml'
,
user_id
=
'Bob'
)
def
test_peer_api_internal_error
(
self
,
xblock
,
mock_api
):
def
test_peer_api_internal_error
(
self
,
xblock
,
mock_api
):
mock_api
.
create_assessment
.
side_effect
=
peer_api
.
PeerAssessmentInternalError
mock_api
.
create_assessment
.
side_effect
=
peer_api
.
PeerAssessmentInternalError
...
...
openassessment/xblock/validation.py
View file @
65ebba35
...
@@ -314,6 +314,7 @@ def validator(oa_block, _, strict_post_release=True):
...
@@ -314,6 +314,7 @@ def validator(oa_block, _, strict_post_release=True):
Returns:
Returns:
callable, of a form that can be passed to `update_from_xml`.
callable, of a form that can be passed to `update_from_xml`.
"""
"""
# Import is placed here to avoid model import at project startup.
from
submissions.api
import
MAX_TOP_SUBMISSIONS
from
submissions.api
import
MAX_TOP_SUBMISSIONS
def
_inner
(
rubric_dict
,
assessments
,
leaderboard_show
=
0
,
submission_start
=
None
,
submission_due
=
None
):
def
_inner
(
rubric_dict
,
assessments
,
leaderboard_show
=
0
,
submission_start
=
None
,
submission_due
=
None
):
...
...
setup.py
View file @
65ebba35
...
@@ -34,7 +34,7 @@ def load_requirements(*requirements_paths):
...
@@ -34,7 +34,7 @@ def load_requirements(*requirements_paths):
setup
(
setup
(
name
=
'ora2'
,
name
=
'ora2'
,
version
=
'2.1.
2
'
,
version
=
'2.1.
3
'
,
author
=
'edX'
,
author
=
'edX'
,
url
=
'http://github.com/edx/edx-ora2'
,
url
=
'http://github.com/edx/edx-ora2'
,
description
=
'edx-ora2'
,
description
=
'edx-ora2'
,
...
...
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