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
3b2e0ddb
Commit
3b2e0ddb
authored
Jan 21, 2016
by
Piotr Mitros
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #11229 from edx/pmitros/minor-studio-settings-cleanup
Minor cleanup of Studio settings
parents
7c9a65d8
6b6248b4
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
26 additions
and
110 deletions
+26
-110
cms/djangoapps/contentstore/tests/test_course_settings.py
+4
-5
cms/djangoapps/contentstore/views/component.py
+2
-14
cms/djangoapps/contentstore/views/course.py
+2
-3
cms/djangoapps/contentstore/views/tests/test_group_configurations.py
+2
-3
cms/envs/aws.py
+0
-1
cms/envs/common.py
+16
-79
cms/envs/devstack.py
+0
-5
No files found.
cms/djangoapps/contentstore/tests/test_course_settings.py
View file @
3b2e0ddb
...
...
@@ -14,7 +14,6 @@ from django.utils.timezone import UTC
from
django.test.utils
import
override_settings
from
contentstore.utils
import
reverse_course_url
,
reverse_usage_url
from
contentstore.views.component
import
ADVANCED_COMPONENT_POLICY_KEY
from
models.settings.course_grading
import
CourseGradingModel
from
models.settings.course_metadata
import
CourseMetadata
from
models.settings.encoder
import
CourseSettingsEncoder
...
...
@@ -910,14 +909,14 @@ class CourseMetadataEditingTest(CourseTestCase):
# Now enable student notes and verify that the "My Notes" tab has been added
self
.
client
.
ajax_post
(
self
.
course_setting_url
,
{
ADVANCED_COMPONENT_POLICY_KEY
:
{
"value"
:
[
"notes"
]}
'advanced_modules'
:
{
"value"
:
[
"notes"
]}
})
course
=
modulestore
()
.
get_course
(
self
.
course
.
id
)
self
.
assertIn
(
self
.
notes_tab
,
course
.
tabs
)
# Disable student notes and verify that the "My Notes" tab is gone
self
.
client
.
ajax_post
(
self
.
course_setting_url
,
{
ADVANCED_COMPONENT_POLICY_KEY
:
{
"value"
:
[
""
]}
'advanced_modules'
:
{
"value"
:
[
""
]}
})
course
=
modulestore
()
.
get_course
(
self
.
course
.
id
)
self
.
assertNotIn
(
self
.
notes_tab
,
course
.
tabs
)
...
...
@@ -925,7 +924,7 @@ class CourseMetadataEditingTest(CourseTestCase):
def
test_advanced_components_munge_tabs_validation_failure
(
self
):
with
patch
(
'contentstore.views.course._refresh_course_tabs'
,
side_effect
=
InvalidTabsException
):
resp
=
self
.
client
.
ajax_post
(
self
.
course_setting_url
,
{
ADVANCED_COMPONENT_POLICY_KEY
:
{
"value"
:
[
"notes"
]}
'advanced_modules'
:
{
"value"
:
[
"notes"
]}
})
self
.
assertEqual
(
resp
.
status_code
,
400
)
...
...
@@ -949,7 +948,7 @@ class CourseMetadataEditingTest(CourseTestCase):
self
.
course
.
tabs
=
tab_list
modulestore
()
.
update_item
(
self
.
course
,
self
.
user
.
id
)
self
.
client
.
ajax_post
(
self
.
course_setting_url
,
{
ADVANCED_COMPONENT_POLICY_KEY
:
{
"value"
:
[
"notes"
]}
'advanced_modules'
:
{
"value"
:
[
"notes"
]}
})
course
=
modulestore
()
.
get_course
(
self
.
course
.
id
)
tab_list
.
append
(
self
.
notes_tab
)
...
...
cms/djangoapps/contentstore/views/component.py
View file @
3b2e0ddb
...
...
@@ -31,31 +31,19 @@ from django.utils.translation import ugettext as _
from
models.settings.course_grading
import
CourseGradingModel
__all__
=
[
'ADVANCED_COMPONENT_POLICY_KEY'
,
'container_handler'
,
'component_handler'
]
log
=
logging
.
getLogger
(
__name__
)
# NOTE:
it is assumed that t
his list is disjoint from ADVANCED_COMPONENT_TYPES
# NOTE:
T
his list is disjoint from ADVANCED_COMPONENT_TYPES
COMPONENT_TYPES
=
[
'discussion'
,
'html'
,
'problem'
,
'video'
]
# Constants for determining if these components should be enabled for this course
SPLIT_TEST_COMPONENT_TYPE
=
'split_test'
NOTE_COMPONENT_TYPES
=
[
'notes'
]
if
settings
.
FEATURES
.
get
(
'ALLOW_ALL_ADVANCED_COMPONENTS'
):
ADVANCED_COMPONENT_TYPES
=
sorted
(
set
(
name
for
name
,
class_
in
XBlock
.
load_classes
())
-
set
(
COMPONENT_TYPES
))
else
:
ADVANCED_COMPONENT_TYPES
=
settings
.
ADVANCED_COMPONENT_TYPES
ADVANCED_COMPONENT_CATEGORY
=
'advanced'
ADVANCED_COMPONENT_POLICY_KEY
=
'advanced_modules'
ADVANCED_COMPONENT_TYPES
=
sorted
(
set
(
name
for
name
,
class_
in
XBlock
.
load_classes
())
-
set
(
COMPONENT_TYPES
))
ADVANCED_PROBLEM_TYPES
=
settings
.
ADVANCED_PROBLEM_TYPES
CONTAINER_TEMPLATES
=
[
"basic-modal"
,
"modal-button"
,
"edit-xblock-modal"
,
"editor-mode-button"
,
"upload-dialog"
,
...
...
cms/djangoapps/contentstore/views/course.py
View file @
3b2e0ddb
...
...
@@ -24,7 +24,6 @@ from opaque_keys.edx.locations import Location
from
.component
import
(
ADVANCED_COMPONENT_TYPES
,
SPLIT_TEST_COMPONENT_TYPE
,
)
from
.item
import
create_xblock_info
from
.library
import
LIBRARIES_ENABLED
...
...
@@ -1598,8 +1597,8 @@ def are_content_experiments_enabled(course):
Returns True if content experiments have been enabled for the course.
"""
return
(
SPLIT_TEST_COMPONENT_TYPE
in
ADVANCED_COMPONENT_TYPES
and
SPLIT_TEST_COMPONENT_TYPE
in
course
.
advanced_modules
'split_test'
in
ADVANCED_COMPONENT_TYPES
and
'split_test'
in
course
.
advanced_modules
)
...
...
cms/djangoapps/contentstore/views/tests/test_group_configurations.py
View file @
3b2e0ddb
...
...
@@ -6,7 +6,6 @@ Group Configuration Tests.
import
json
from
mock
import
patch
from
contentstore.utils
import
reverse_course_url
,
reverse_usage_url
from
contentstore.views.component
import
SPLIT_TEST_COMPONENT_TYPE
from
contentstore.course_group_config
import
GroupConfiguration
from
contentstore.tests.utils
import
CourseTestCase
from
xmodule.partitions.partitions
import
Group
,
UserPartition
...
...
@@ -229,8 +228,8 @@ class GroupConfigurationsListHandlerTestCase(CourseTestCase, GroupConfigurations
]
self
.
save_course
()
if
SPLIT_TEST_COMPONENT_TYPE
not
in
self
.
course
.
advanced_modules
:
self
.
course
.
advanced_modules
.
append
(
SPLIT_TEST_COMPONENT_TYPE
)
if
'split_test'
not
in
self
.
course
.
advanced_modules
:
self
.
course
.
advanced_modules
.
append
(
'split_test'
)
self
.
store
.
update_item
(
self
.
course
,
self
.
user
.
id
)
response
=
self
.
client
.
get
(
self
.
_url
())
...
...
cms/envs/aws.py
View file @
3b2e0ddb
...
...
@@ -332,7 +332,6 @@ ADVANCED_SECURITY_CONFIG = ENV_TOKENS.get('ADVANCED_SECURITY_CONFIG', {})
################ ADVANCED COMPONENT/PROBLEM TYPES ###############
ADVANCED_COMPONENT_TYPES
=
ENV_TOKENS
.
get
(
'ADVANCED_COMPONENT_TYPES'
,
ADVANCED_COMPONENT_TYPES
)
ADVANCED_PROBLEM_TYPES
=
ENV_TOKENS
.
get
(
'ADVANCED_PROBLEM_TYPES'
,
ADVANCED_PROBLEM_TYPES
)
DEPRECATED_ADVANCED_COMPONENT_TYPES
=
ENV_TOKENS
.
get
(
'DEPRECATED_ADVANCED_COMPONENT_TYPES'
,
DEPRECATED_ADVANCED_COMPONENT_TYPES
...
...
cms/envs/common.py
View file @
3b2e0ddb
...
...
@@ -18,6 +18,21 @@ Longer TODO:
just means that we stick them in a dict called FEATURES.
3. We need to handle configuration for multiple courses. This could be as
multiple sites, but we do need a way to map their data assets.
When refering to XBlocks, we use the entry-point name. For example,
| setup(
| name='xblock-foobar',
| version='0.1',
| packages=[
| 'foobar_xblock',
| ],
| entry_points={
| 'xblock.v1': [
| 'foobar-block = foobar_xblock:FoobarBlock',
| # ^^^^^^^^^^^^ This is the one you want.
| ]
| },
| )
"""
# We intentionally define lots of variables that aren't used, and
...
...
@@ -92,10 +107,6 @@ FEATURES = {
# whether to use password policy enforcement or not
'ENFORCE_PASSWORD_POLICY'
:
False
,
# If set to True, Studio won't restrict the set of advanced components
# to just those pre-approved by edX
'ALLOW_ALL_ADVANCED_COMPONENTS'
:
False
,
# Turn off account locking if failed login attempts exceeds a limit
'ENABLE_MAX_FAILED_LOGIN_ATTEMPTS'
:
False
,
...
...
@@ -357,9 +368,6 @@ XBLOCK_MIXINS = (
AuthoringMixin
,
)
# Allow any XBlock in Studio
# You should also enable the ALLOW_ALL_ADVANCED_COMPONENTS feature flag, so that
# xblocks can be added via advanced settings
XBLOCK_SELECT_FUNCTION
=
prefer_xmodules
############################ Modulestore Configuration ################################
...
...
@@ -982,75 +990,6 @@ ENTRANCE_EXAM_MIN_SCORE_PCT = 50
### Default language for a new course
DEFAULT_COURSE_LANGUAGE
=
"en"
################ ADVANCED_COMPONENT_TYPES ###############
# These strings are entry-point names from the setup.py of the XBlock.
# For example:
#
# setup(
# name='xblock-foobar',
# version='0.1',
# packages=[
# 'foobar_xblock',
# ],
# entry_points={
# 'xblock.v1': [
# 'foobar-block = foobar_xblock:FoobarBlock',
# # ^^^^^^^^^^^^ This is the one you want.
# ]
# },
# )
#
# To use this block, add 'foobar-block' to the ADVANCED_COMPONENT_TYPES list.
ADVANCED_COMPONENT_TYPES
=
[
'annotatable'
,
'textannotation'
,
# module for annotating text (with annotation table)
'videoannotation'
,
# module for annotating video (with annotation table)
'imageannotation'
,
# module for annotating image (with annotation table)
'word_cloud'
,
'lti'
,
'lti_consumer'
,
'library_content'
,
'edx_sga'
,
'problem-builder'
,
'pb-dashboard'
,
'poll'
,
'survey'
,
'activetable'
,
'vectordraw'
,
# Some of the XBlocks from pmitros repos are sometimes prototypes.
# Use with caution.
'concept'
,
# Concept mapper. See https://github.com/pmitros/ConceptXBlock
'done'
,
# Lets students mark things as done. See https://github.com/pmitros/DoneXBlock
'audio'
,
# Embed an audio file. See https://github.com/pmitros/AudioXBlock
'recommender'
,
# Crowdsourced recommender. Prototype by dli&pmitros. Intended for roll-out in one place in one course.
'profile'
,
# Prototype user profile XBlock. Used to test XBlock parameter passing. See https://github.com/pmitros/ProfileXBlock
'rate'
,
# Allows up-down voting of course content. See https://github.com/pmitros/RateXBlock
'split_test'
,
'notes'
,
'schoolyourself_review'
,
'schoolyourself_lesson'
,
# Office Mix
'officemix'
,
# Google Drive embedded components. These XBlocks allow one to
# embed public google drive documents and calendars within edX units
'google-document'
,
'google-calendar'
,
# Oppia block
'oppia'
,
# In-course reverification checkpoint
'edx-reverification-block'
,
# Peer instruction tool
'ubcpi'
,
]
# Adding components in this list will disable the creation of new problem for
# those components in Studio. Existing problems will work fine and one can edit
# them in Studio.
...
...
@@ -1058,9 +997,7 @@ DEPRECATED_ADVANCED_COMPONENT_TYPES = []
# Specify XBlocks that should be treated as advanced problems. Each entry is a
# dict:
# 'component': the entry-point name of the XBlock. See the comment for
# ADVANCED_COMPONENT_TYPES for details of where to find this
# name.
# 'component': the entry-point name of the XBlock.
# 'boilerplate_name': an optional YAML template to be used. Specify as
# None to omit.
#
...
...
cms/envs/devstack.py
View file @
3b2e0ddb
...
...
@@ -55,11 +55,6 @@ DJFS = {
'url_root'
:
'/static/djpyfs'
,
}
############################# ADVANCED COMPONENTS #############################
# Make it easier to test advanced components in local dev
FEATURES
[
'ALLOW_ALL_ADVANCED_COMPONENTS'
]
=
True
################################# CELERY ######################################
# By default don't use a worker, execute tasks as if they were local functions
...
...
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