Files
edx-platform/common/djangoapps/xblock_django/api.py
2016-06-10 09:52:57 -04:00

54 lines
2.4 KiB
Python

"""
API methods related to xblock state.
"""
from xblock_django.models import XBlockConfiguration, XBlockStudioConfiguration, XBlockStudioConfigurationFlag
def deprecated_xblocks():
"""
Return the QuerySet of deprecated XBlock types. Note that this method is independent of
`XBlockStudioConfigurationFlag` and `XBlockStudioConfiguration`.
"""
return XBlockConfiguration.objects.current_set().filter(deprecated=True)
def disabled_xblocks():
"""
Return the QuerySet of disabled XBlock types (which should not render in the LMS).
Note that this method is independent of `XBlockStudioConfigurationFlag` and `XBlockStudioConfiguration`.
"""
return XBlockConfiguration.objects.current_set().filter(enabled=False)
def authorable_xblocks(allow_unsupported=False, name=None):
"""
If Studio XBlock support state is enabled (via `XBlockStudioConfigurationFlag`), this method returns
the QuerySet of XBlocks that can be created in Studio (by default, only fully supported and provisionally
supported). If `XBlockStudioConfigurationFlag` is not enabled, this method returns None.
Note that this method does not take into account fully disabled xblocks (as returned
by `disabled_xblocks`) or deprecated xblocks (as returned by `deprecated_xblocks`).
Arguments:
allow_unsupported (bool): If `True`, enabled but unsupported XBlocks will also be returned.
Note that unsupported XBlocks are not recommended for use in courses due to non-compliance
with one or more of the base requirements, such as testing, accessibility, internationalization,
and documentation. Default value is `False`.
name (str): If provided, filters the returned XBlocks to those with the provided name. This is
useful for XBlocks with lots of template types.
Returns:
QuerySet: If `XBlockStudioConfigurationFlag` is enabled, returns authorable XBlocks,
taking into account `support_level`, `enabled` and `name` (if specified).
If `XBlockStudioConfigurationFlag` is disabled, returns None.
"""
if not XBlockStudioConfigurationFlag.is_enabled():
return None
blocks = XBlockStudioConfiguration.objects.current_set().filter(enabled=True)
if not allow_unsupported:
blocks = blocks.exclude(support_level=XBlockStudioConfiguration.UNSUPPORTED)
if name:
blocks = blocks.filter(name=name)
return blocks