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
9a59336b
Commit
9a59336b
authored
Mar 18, 2013
by
VikParuchuri
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1676 from MITx/fix/vik/xblock-state-overwrite
Fix version handling for combined open ended
parents
b6e82afb
e4efda9a
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
48 additions
and
35 deletions
+48
-35
common/lib/xmodule/xmodule/combined_open_ended_module.py
+48
-35
No files found.
common/lib/xmodule/xmodule/combined_open_ended_module.py
View file @
9a59336b
...
...
@@ -8,41 +8,66 @@ from xmodule.raw_module import RawDescriptor
from
.x_module
import
XModule
from
xblock.core
import
Integer
,
Scope
,
BlockScope
,
ModelType
,
String
,
Boolean
,
Object
,
Float
,
List
from
xmodule.open_ended_grading_classes.combined_open_ended_modulev1
import
CombinedOpenEndedV1Module
,
CombinedOpenEndedV1Descriptor
from
collections
import
namedtuple
log
=
logging
.
getLogger
(
"mitx.courseware"
)
V1_SETTINGS_ATTRIBUTES
=
[
"display_name"
,
"attempts"
,
"is_graded"
,
"accept_file_upload"
,
"skip_spelling_checks"
,
"due"
,
"graceperiod"
,
"max_score"
]
"skip_spelling_checks"
,
"due"
,
"graceperiod"
,
"max_score"
]
V1_STUDENT_ATTRIBUTES
=
[
"current_task_number"
,
"task_states"
,
"state"
,
"student_attempts"
,
"ready_to_reset"
]
"student_attempts"
,
"ready_to_reset"
]
V1_ATTRIBUTES
=
V1_SETTINGS_ATTRIBUTES
+
V1_STUDENT_ATTRIBUTES
VERSION_TUPLES
=
(
(
'1'
,
CombinedOpenEndedV1Descriptor
,
CombinedOpenEndedV1Module
,
V1_SETTINGS_ATTRIBUTES
,
V1_STUDENT_ATTRIBUTES
),
)
VersionTuple
=
namedtuple
(
'VersionTuple'
,
[
'descriptor'
,
'module'
,
'settings_attributes'
,
'student_attributes'
])
VERSION_TUPLES
=
{
1
:
VersionTuple
(
CombinedOpenEndedV1Descriptor
,
CombinedOpenEndedV1Module
,
V1_SETTINGS_ATTRIBUTES
,
V1_STUDENT_ATTRIBUTES
),
}
DEFAULT_VERSION
=
1
DEFAULT_VERSION
=
str
(
DEFAULT_VERSION
)
class
VersionInteger
(
Integer
):
"""
A model type that converts from strings to integers when reading from json.
Also does error checking to see if version is correct or not.
"""
def
from_json
(
self
,
value
):
try
:
value
=
int
(
value
)
if
value
not
in
VERSION_TUPLES
:
version_error_string
=
"Could not find version {0}, using version {1} instead"
log
.
error
(
version_error_string
.
format
(
value
,
DEFAULT_VERSION
))
value
=
DEFAULT_VERSION
except
:
value
=
DEFAULT_VERSION
return
value
class
CombinedOpenEndedFields
(
object
):
display_name
=
String
(
help
=
"Display name for this module"
,
default
=
"Open Ended Grading"
,
scope
=
Scope
.
settings
)
current_task_number
=
Integer
(
help
=
"Current task that the student is on."
,
default
=
0
,
scope
=
Scope
.
student_state
)
task_states
=
List
(
help
=
"List of state dictionaries of each task within this module."
,
scope
=
Scope
.
student_state
)
state
=
String
(
help
=
"Which step within the current task that the student is on."
,
default
=
"initial"
,
scope
=
Scope
.
student_state
)
student_attempts
=
Integer
(
help
=
"Number of attempts taken by the student on this problem"
,
default
=
0
,
scope
=
Scope
.
student_state
)
ready_to_reset
=
Boolean
(
help
=
"If the problem is ready to be reset or not."
,
default
=
False
,
scope
=
Scope
.
student_state
)
state
=
String
(
help
=
"Which step within the current task that the student is on."
,
default
=
"initial"
,
scope
=
Scope
.
student_state
)
student_attempts
=
Integer
(
help
=
"Number of attempts taken by the student on this problem"
,
default
=
0
,
scope
=
Scope
.
student_state
)
ready_to_reset
=
Boolean
(
help
=
"If the problem is ready to be reset or not."
,
default
=
False
,
scope
=
Scope
.
student_state
)
attempts
=
Integer
(
help
=
"Maximum number of attempts that a student is allowed."
,
default
=
1
,
scope
=
Scope
.
settings
)
is_graded
=
Boolean
(
help
=
"Whether or not the problem is graded."
,
default
=
False
,
scope
=
Scope
.
settings
)
accept_file_upload
=
Boolean
(
help
=
"Whether or not the problem accepts file uploads."
,
default
=
False
,
scope
=
Scope
.
settings
)
skip_spelling_checks
=
Boolean
(
help
=
"Whether or not to skip initial spelling checks."
,
default
=
True
,
scope
=
Scope
.
settings
)
is_graded
=
Boolean
(
help
=
"Whether or not the problem is graded."
,
default
=
False
,
scope
=
Scope
.
settings
)
accept_file_upload
=
Boolean
(
help
=
"Whether or not the problem accepts file uploads."
,
default
=
False
,
scope
=
Scope
.
settings
)
skip_spelling_checks
=
Boolean
(
help
=
"Whether or not to skip initial spelling checks."
,
default
=
True
,
scope
=
Scope
.
settings
)
due
=
String
(
help
=
"Date that this problem is due by"
,
default
=
None
,
scope
=
Scope
.
settings
)
graceperiod
=
String
(
help
=
"Amount of time after the due date that submissions will be accepted"
,
default
=
None
,
scope
=
Scope
.
settings
)
graceperiod
=
String
(
help
=
"Amount of time after the due date that submissions will be accepted"
,
default
=
None
,
scope
=
Scope
.
settings
)
max_score
=
Integer
(
help
=
"Maximum score for the problem."
,
default
=
1
,
scope
=
Scope
.
settings
)
version
=
Integer
(
help
=
"Current version number"
,
default
=
DEFAULT_VERSION
,
scope
=
Scope
.
settings
)
version
=
Version
Integer
(
help
=
"Current version number"
,
default
=
DEFAULT_VERSION
,
scope
=
Scope
.
settings
)
data
=
String
(
help
=
"XML data for the problem"
,
scope
=
Scope
.
content
)
...
...
@@ -130,23 +155,10 @@ class CombinedOpenEndedModule(CombinedOpenEndedFields, XModule):
if
self
.
task_states
is
None
:
self
.
task_states
=
[]
versions
=
[
i
[
0
]
for
i
in
VERSION_TUPLES
]
descriptors
=
[
i
[
1
]
for
i
in
VERSION_TUPLES
]
modules
=
[
i
[
2
]
for
i
in
VERSION_TUPLES
]
settings_attributes
=
[
i
[
3
]
for
i
in
VERSION_TUPLES
]
student_attributes
=
[
i
[
4
]
for
i
in
VERSION_TUPLES
]
version_error_string
=
"Could not find version {0}, using version {1} instead"
try
:
version_index
=
versions
.
index
(
self
.
version
)
except
:
#This is a dev_facing_error
log
.
error
(
version_error_string
.
format
(
self
.
version
,
DEFAULT_VERSION
))
self
.
version
=
DEFAULT_VERSION
version_index
=
versions
.
index
(
self
.
version
)
version_tuple
=
VERSION_TUPLES
[
self
.
version
]
self
.
student_attributes
=
student_attributes
[
version_index
]
self
.
settings_attributes
=
settings_attributes
[
version_index
]
self
.
student_attributes
=
version_tuple
.
student_attributes
self
.
settings_attributes
=
version_tuple
.
settings_attributes
attributes
=
self
.
student_attributes
+
self
.
settings_attributes
...
...
@@ -154,10 +166,11 @@ class CombinedOpenEndedModule(CombinedOpenEndedFields, XModule):
'rewrite_content_links'
:
self
.
rewrite_content_links
,
}
instance_state
=
{
k
:
getattr
(
self
,
k
)
for
k
in
attributes
}
self
.
child_descriptor
=
descriptors
[
version_index
](
self
.
system
)
self
.
child_definition
=
descriptors
[
version_index
]
.
definition_from_xml
(
etree
.
fromstring
(
self
.
data
),
self
.
system
)
self
.
child_module
=
modules
[
version_index
](
self
.
system
,
location
,
self
.
child_definition
,
self
.
child_descriptor
,
instance_state
=
instance_state
,
static_data
=
static_data
,
attributes
=
attributes
)
self
.
child_descriptor
=
version_tuple
.
descriptor
(
self
.
system
)
self
.
child_definition
=
version_tuple
.
descriptor
.
definition_from_xml
(
etree
.
fromstring
(
self
.
data
),
self
.
system
)
self
.
child_module
=
version_tuple
.
module
(
self
.
system
,
location
,
self
.
child_definition
,
self
.
child_descriptor
,
instance_state
=
instance_state
,
static_data
=
static_data
,
attributes
=
attributes
)
self
.
save_instance_data
()
def
get_html
(
self
):
...
...
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