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
3ea2d725
Commit
3ea2d725
authored
Jan 13, 2017
by
Calen Pennington
Committed by
GitHub
Jan 13, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #14329 from edx/release-candidate
Merge release-candidate to release
parents
0dad9f61
57b88abf
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
119 additions
and
33 deletions
+119
-33
common/lib/xmodule/xmodule/annotatable_module.py
+1
-1
common/lib/xmodule/xmodule/capa_base.py
+1
-1
common/lib/xmodule/xmodule/conditional_module.py
+1
-1
common/lib/xmodule/xmodule/html_module.py
+3
-3
common/lib/xmodule/xmodule/imageannotation_module.py
+1
-1
common/lib/xmodule/xmodule/library_content_module.py
+1
-1
common/lib/xmodule/xmodule/library_root_xblock.py
+1
-1
common/lib/xmodule/xmodule/lti_module.py
+1
-1
common/lib/xmodule/xmodule/poll_module.py
+31
-8
common/lib/xmodule/xmodule/split_test_module.py
+1
-1
common/lib/xmodule/xmodule/tests/test_xml_module.py
+6
-2
common/lib/xmodule/xmodule/textannotation_module.py
+1
-1
common/lib/xmodule/xmodule/video_module/video_xfields.py
+1
-1
common/lib/xmodule/xmodule/videoannotation_module.py
+1
-1
common/lib/xmodule/xmodule/word_cloud_module.py
+1
-1
common/lib/xmodule/xmodule/x_module.py
+7
-2
lms/djangoapps/grades/migrations/0009_auto_20170111_1507.py
+22
-0
lms/djangoapps/grades/migrations/0010_auto_20170112_1156.py
+18
-0
lms/djangoapps/grades/models.py
+14
-0
lms/djangoapps/instructor_task/tasks.py
+3
-3
openedx/core/lib/xblock_builtin/xblock_discussion/xblock_discussion.py
+1
-1
requirements/edx/github.txt
+2
-2
No files found.
common/lib/xmodule/xmodule/annotatable_module.py
View file @
3ea2d725
...
...
@@ -39,7 +39,7 @@ class AnnotatableFields(object):
)
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"
Display name for this module
"
),
help
=
_
(
"
The display name for this component.
"
),
scope
=
Scope
.
settings
,
default
=
_
(
'Annotation'
),
)
...
...
common/lib/xmodule/xmodule/capa_base.py
View file @
3ea2d725
...
...
@@ -92,7 +92,7 @@ class CapaFields(object):
"""
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"Th
is name appears in the horizontal navigation at the top of the page
."
),
help
=
_
(
"Th
e display name for this component
."
),
scope
=
Scope
.
settings
,
# it'd be nice to have a useful default but it screws up other things; so,
# use display_name_with_default for those
...
...
common/lib/xmodule/xmodule/conditional_module.py
View file @
3ea2d725
...
...
@@ -27,7 +27,7 @@ class ConditionalFields(object):
has_children
=
True
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"Th
is name appears in the horizontal navigation at the top of the page
."
),
help
=
_
(
"Th
e display name for this component
."
),
scope
=
Scope
.
settings
,
default
=
_
(
'Conditional'
)
)
...
...
common/lib/xmodule/xmodule/html_module.py
View file @
3ea2d725
...
...
@@ -38,7 +38,7 @@ class HtmlBlock(object):
"""
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"Th
is name appears in the horizontal navigation at the top of the page
."
),
help
=
_
(
"Th
e display name for this component
."
),
scope
=
Scope
.
settings
,
# it'd be nice to have a useful default but it screws up other things; so,
# use display_name_with_default for those
...
...
@@ -329,7 +329,7 @@ class HtmlDescriptor(HtmlBlock, XmlDescriptor, EditingDescriptor): # pylint: di
class
AboutFields
(
object
):
display_name
=
String
(
help
=
_
(
"
Display name for this module
"
),
help
=
_
(
"
The display name for this component.
"
),
scope
=
Scope
.
settings
,
default
=
"overview"
,
)
...
...
@@ -364,7 +364,7 @@ class StaticTabFields(object):
"""
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"Th
is name appears in the horizontal navigation at the top of the page
."
),
help
=
_
(
"Th
e display name for this component
."
),
scope
=
Scope
.
settings
,
default
=
"Empty"
,
)
...
...
common/lib/xmodule/xmodule/imageannotation_module.py
View file @
3ea2d725
...
...
@@ -45,7 +45,7 @@ class AnnotatableFields(object):
"""
))
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"
Display name for this module
"
),
help
=
_
(
"
The display name for this component.
"
),
scope
=
Scope
.
settings
,
default
=
_
(
'Image Annotation'
),
)
...
...
common/lib/xmodule/xmodule/library_content_module.py
View file @
3ea2d725
...
...
@@ -60,7 +60,7 @@ class LibraryContentFields(object):
# to locate input elements - keep synchronized
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"
Display name for this module
"
),
help
=
_
(
"
The display name for this component.
"
),
default
=
"Randomized Content Block"
,
scope
=
Scope
.
settings
,
)
...
...
common/lib/xmodule/xmodule/library_root_xblock.py
View file @
3ea2d725
...
...
@@ -25,7 +25,7 @@ class LibraryRoot(XBlock):
resources_dir
=
None
display_name
=
String
(
help
=
_
(
"
Enter the name of the library as it should appear in Studio
."
),
help
=
_
(
"
The display name for this component
."
),
default
=
"Library"
,
display_name
=
_
(
"Library Display Name"
),
scope
=
Scope
.
settings
...
...
common/lib/xmodule/xmodule/lti_module.py
View file @
3ea2d725
...
...
@@ -109,7 +109,7 @@ class LTIFields(object):
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"
Enter the name that students see for this component.
"
"
The display name for this component.
"
"Analytics reports may also use the display name to identify this component."
),
scope
=
Scope
.
settings
,
...
...
common/lib/xmodule/xmodule/poll_module.py
View file @
3ea2d725
...
...
@@ -23,20 +23,43 @@ from xmodule.xml_module import XmlDescriptor
from
xblock.fields
import
Scope
,
String
,
Dict
,
Boolean
,
List
log
=
logging
.
getLogger
(
__name__
)
_
=
lambda
text
:
text
class
PollFields
(
object
):
# Name of poll to use in links to this poll
display_name
=
String
(
help
=
"Display name for this module"
,
scope
=
Scope
.
settings
)
voted
=
Boolean
(
help
=
"Whether this student has voted on the poll"
,
scope
=
Scope
.
user_state
,
default
=
False
)
poll_answer
=
String
(
help
=
"Student answer"
,
scope
=
Scope
.
user_state
,
default
=
''
)
poll_answers
=
Dict
(
help
=
"Poll answers from all students"
,
scope
=
Scope
.
user_state_summary
)
display_name
=
String
(
help
=
_
(
"The display name for this component."
),
scope
=
Scope
.
settings
)
voted
=
Boolean
(
help
=
_
(
"Whether this student has voted on the poll"
),
scope
=
Scope
.
user_state
,
default
=
False
)
poll_answer
=
String
(
help
=
_
(
"Student answer"
),
scope
=
Scope
.
user_state
,
default
=
''
)
poll_answers
=
Dict
(
help
=
_
(
"Poll answers from all students"
),
scope
=
Scope
.
user_state_summary
)
# List of answers, in the form {'id': 'some id', 'text': 'the answer text'}
answers
=
List
(
help
=
"Poll answers from xml"
,
scope
=
Scope
.
content
,
default
=
[])
question
=
String
(
help
=
"Poll question"
,
scope
=
Scope
.
content
,
default
=
''
)
answers
=
List
(
help
=
_
(
"Poll answers from xml"
),
scope
=
Scope
.
content
,
default
=
[]
)
question
=
String
(
help
=
_
(
"Poll question"
),
scope
=
Scope
.
content
,
default
=
''
)
class
PollModule
(
PollFields
,
XModule
):
...
...
common/lib/xmodule/xmodule/split_test_module.py
View file @
3ea2d725
...
...
@@ -58,7 +58,7 @@ class SplitTestFields(object):
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"Th
is name is used for organizing your course content, but is not shown to students.
"
),
help
=
_
(
"Th
e display name for this component. (Not shown to learners)
"
),
scope
=
Scope
.
settings
,
default
=
_
(
"Content Experiment"
)
)
...
...
common/lib/xmodule/xmodule/tests/test_xml_module.py
View file @
3ea2d725
...
...
@@ -37,8 +37,12 @@ class TestFields(object):
# Will not be returned by editable_metadata_fields because is not Scope.settings.
student_answers
=
Dict
(
scope
=
Scope
.
user_state
)
# Will be returned, and can override the inherited value from XModule.
display_name
=
String
(
scope
=
Scope
.
settings
,
default
=
'local default'
,
display_name
=
'Local Display Name'
,
help
=
'local help'
)
display_name
=
String
(
scope
=
Scope
.
settings
,
default
=
'local default'
,
display_name
=
'Local Display Name'
,
help
=
'local help'
)
# Used for testing select type, effect of to_json method
string_select
=
CrazyJsonString
(
scope
=
Scope
.
settings
,
...
...
common/lib/xmodule/xmodule/textannotation_module.py
View file @
3ea2d725
...
...
@@ -34,7 +34,7 @@ class AnnotatableFields(object):
"""
))
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"
Display name for this module
"
),
help
=
_
(
"
The display name for this component.
"
),
scope
=
Scope
.
settings
,
default
=
_
(
'Text Annotation'
),
)
...
...
common/lib/xmodule/xmodule/video_module/video_xfields.py
View file @
3ea2d725
...
...
@@ -14,7 +14,7 @@ _ = lambda text: text
class
VideoFields
(
object
):
"""Fields for `VideoModule` and `VideoDescriptor`."""
display_name
=
String
(
help
=
_
(
"The
name students see. This name appears in the course ribbon and as a header for the video
."
),
help
=
_
(
"The
display name for this component
."
),
display_name
=
_
(
"Component Display Name"
),
default
=
"Video"
,
scope
=
Scope
.
settings
...
...
common/lib/xmodule/xmodule/videoannotation_module.py
View file @
3ea2d725
...
...
@@ -34,7 +34,7 @@ class AnnotatableFields(object):
"""
))
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"
Display name for this module
"
),
help
=
_
(
"
The display name for this component.
"
),
scope
=
Scope
.
settings
,
default
=
_
(
'Video Annotation'
),
)
...
...
common/lib/xmodule/xmodule/word_cloud_module.py
View file @
3ea2d725
...
...
@@ -38,7 +38,7 @@ class WordCloudFields(object):
"""XFields for word cloud."""
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"The
label for this word cloud on the course page
."
),
help
=
_
(
"The
display name for this component
."
),
scope
=
Scope
.
settings
,
default
=
"Word cloud"
)
...
...
common/lib/xmodule/xmodule/x_module.py
View file @
3ea2d725
...
...
@@ -66,6 +66,11 @@ STUDIO_VIEW = 'studio_view'
PREVIEW_VIEWS
=
[
STUDENT_VIEW
,
AUTHOR_VIEW
]
# Make '_' a no-op so we can scrape strings. Using lambda instead of
# `django.utils.translation.ugettext_noop` because Django cannot be imported in this file
_
=
lambda
text
:
text
class
OpaqueKeyReader
(
IdReader
):
"""
IdReader for :class:`DefinitionKey` and :class:`UsageKey`s.
...
...
@@ -256,8 +261,8 @@ class XModuleFields(object):
Common fields for XModules.
"""
display_name
=
String
(
display_name
=
"Display Name"
,
help
=
"This name appears in the horizontal navigation at the top of the page."
,
display_name
=
_
(
"Display Name"
)
,
help
=
_
(
"The display name for this component."
)
,
scope
=
Scope
.
settings
,
# it'd be nice to have a useful default but it screws up other things; so,
# use display_name_with_default for those
...
...
lms/djangoapps/grades/migrations/0009_auto_20170111_1507.py
0 → 100644
View file @
3ea2d725
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'grades'
,
'0008_persistentsubsectiongrade_first_attempted'
),
]
operations
=
[
migrations
.
AlterIndexTogether
(
name
=
'persistentcoursegrade'
,
index_together
=
set
([(
'passed_timestamp'
,
'course_id'
),
(
'modified'
,
'course_id'
)]),
),
migrations
.
AlterIndexTogether
(
name
=
'persistentsubsectiongrade'
,
index_together
=
set
([(
'modified'
,
'course_id'
,
'usage_key'
)]),
),
]
lms/djangoapps/grades/migrations/0010_auto_20170112_1156.py
0 → 100644
View file @
3ea2d725
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'grades'
,
'0009_auto_20170111_1507'
),
]
operations
=
[
migrations
.
AlterIndexTogether
(
name
=
'persistentsubsectiongrade'
,
index_together
=
set
([(
'modified'
,
'course_id'
,
'usage_key'
),
(
'first_attempted'
,
'course_id'
,
'user_id'
)]),
),
]
lms/djangoapps/grades/models.py
View file @
3ea2d725
...
...
@@ -253,6 +253,17 @@ class PersistentSubsectionGrade(DeleteGradesMixin, TimeStampedModel):
# * Course staff can see all grades for a course using (course_id,)
(
'course_id'
,
'user_id'
,
'usage_key'
),
]
# Allows querying in the following ways:
# (modified): find all the grades updated within a certain timespan
# (modified, course_id): find all the grades updated within a timespan for a certain course
# (modified, course_id, usage_key): find all the grades updated within a timespan for a subsection
# in a course
# (first_attempted, course_id, user_id): find all attempted subsections in a course for a user
# (first_attempted, course_id): find all attempted subsections in a course for all users
index_together
=
[
(
'modified'
,
'course_id'
,
'usage_key'
),
(
'first_attempted'
,
'course_id'
,
'user_id'
)
]
# primary key will need to be large for this table
id
=
UnsignedBigIntAutoField
(
primary_key
=
True
)
# pylint: disable=invalid-name
...
...
@@ -502,11 +513,14 @@ class PersistentCourseGrade(DeleteGradesMixin, TimeStampedModel):
# (course_id) for instructors to see all course grades, implicitly created via the unique_together constraint
# (user_id) for course dashboard; explicitly declared as an index below
# (passed_timestamp, course_id) for tracking when users first earned a passing grade.
# (modified): find all the grades updated within a certain timespan
# (modified, course_id): find all the grades updated within a certain timespan for a course
unique_together
=
[
(
'course_id'
,
'user_id'
),
]
index_together
=
[
(
'passed_timestamp'
,
'course_id'
),
(
'modified'
,
'course_id'
)
]
# primary key will need to be large for this table
...
...
lms/djangoapps/instructor_task/tasks.py
View file @
3ea2d725
...
...
@@ -193,7 +193,7 @@ def calculate_problem_grade_report(entry_id, xmodule_instance_args):
return
run_main_task
(
entry_id
,
task_fn
,
action_name
)
@task
(
base
=
BaseInstructorTask
,
routing_key
=
settings
.
GRADES_DOWNLOAD_ROUTING_KEY
)
# pylint: disable=not-callable
@task
(
base
=
BaseInstructorTask
)
# pylint: disable=not-callable
def
calculate_students_features_csv
(
entry_id
,
xmodule_instance_args
):
"""
Compute student profile information for a course and upload the
...
...
@@ -252,7 +252,7 @@ def proctored_exam_results_csv(entry_id, xmodule_instance_args):
return
run_main_task
(
entry_id
,
task_fn
,
action_name
)
@task
(
base
=
BaseInstructorTask
,
routing_key
=
settings
.
GRADES_DOWNLOAD_ROUTING_KEY
)
# pylint: disable=not-callable
@task
(
base
=
BaseInstructorTask
)
# pylint: disable=not-callable
def
calculate_may_enroll_csv
(
entry_id
,
xmodule_instance_args
):
"""
Compute information about invited students who have not enrolled
...
...
@@ -293,7 +293,7 @@ def cohort_students(entry_id, xmodule_instance_args):
return
run_main_task
(
entry_id
,
task_fn
,
action_name
)
@task
(
base
=
BaseInstructorTask
,
routing_key
=
settings
.
GRADES_DOWNLOAD_ROUTING_KEY
)
# pylint: disable=not-callable
@task
(
base
=
BaseInstructorTask
)
# pylint: disable=not-callable
def
export_ora2_data
(
entry_id
,
xmodule_instance_args
):
"""
Generate a CSV of ora2 responses and push it to S3.
...
...
openedx/core/lib/xblock_builtin/xblock_discussion/xblock_discussion.py
View file @
3ea2d725
...
...
@@ -39,7 +39,7 @@ class DiscussionXBlock(XBlock, StudioEditableXBlockMixin, XmlParserMixin):
discussion_id
=
String
(
scope
=
Scope
.
settings
,
default
=
UNIQUE_ID
)
display_name
=
String
(
display_name
=
_
(
"Display Name"
),
help
=
_
(
"
Display name for this component
"
),
help
=
_
(
"
The display name for this component.
"
),
default
=
"Discussion"
,
scope
=
Scope
.
settings
)
...
...
requirements/edx/github.txt
View file @
3ea2d725
...
...
@@ -72,7 +72,7 @@ git+https://github.com/edx/lettuce.git@0.2.20.002#egg=lettuce==0.2.20.002
# Our libraries:
git+https://github.com/edx/XBlock.git@xblock-0.4.13#egg=XBlock==0.4.13
-e git+https://github.com/edx/codejail.git@
6b17c33a89bef0ac510926b1d7fea2748b73aadd#egg=codejail
-e git+https://github.com/edx/codejail.git@
0b2dc694f05ddc8fee3e65d837cee57b6ce51a6b#egg=codejail==0.0
-e git+https://github.com/edx/event-tracking.git@0.2.1#egg=event-tracking==0.2.1
-e git+https://github.com/edx/django-splash.git@v0.2#egg=django-splash==0.2
-e git+https://github.com/edx/acid-block.git@e46f9cda8a03e121a00c7e347084d142d22ebfb7#egg=acid-xblock
...
...
@@ -91,7 +91,7 @@ git+https://github.com/edx/xblock-utils.git@v1.0.3#egg=xblock-utils==1.0.3
-e git+https://github.com/edx/edx-reverification-block.git@0.0.5#egg=edx-reverification-block==0.0.5
git+https://github.com/edx/edx-user-state-client.git@1.0.1#egg=edx-user-state-client==1.0.1
git+https://github.com/edx/xblock-lti-consumer.git@v1.1.0#egg=xblock-lti-consumer==1.1.0
git+https://github.com/edx/edx-proctoring.git@0.1
6.2#egg=edx-proctoring==0.16.2
git+https://github.com/edx/edx-proctoring.git@0.1
7.0#egg=edx-proctoring==0.17.0
# Third Party XBlocks
-e git+https://github.com/mitodl/edx-sga@172a90fd2738f8142c10478356b2d9ed3e55334a#egg=edx-sga
...
...
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