Commit 31912ac1 by John Eskew Committed by GitHub

Merge pull request #15176 from edx/jeskew/move_license_mixin

Move LicenseMixin and accompanying code to openedx/core/lib.
parents 643d9eda e30e44cb
...@@ -15,6 +15,7 @@ from django.utils.translation import ugettext as _ ...@@ -15,6 +15,7 @@ from django.utils.translation import ugettext as _
from edxmako.shortcuts import render_to_string from edxmako.shortcuts import render_to_string
from lms.djangoapps.lms_xblock.field_data import LmsFieldData from lms.djangoapps.lms_xblock.field_data import LmsFieldData
from opaque_keys.edx.keys import UsageKey from opaque_keys.edx.keys import UsageKey
from openedx.core.lib.license import wrap_with_license
from openedx.core.lib.partitions.partitions_service import PartitionService from openedx.core.lib.partitions.partitions_service import PartitionService
from openedx.core.lib.xblock_utils import ( from openedx.core.lib.xblock_utils import (
replace_static_urls, replace_static_urls,
...@@ -34,7 +35,6 @@ from xblock_django.user_service import DjangoXBlockUserService ...@@ -34,7 +35,6 @@ from xblock_django.user_service import DjangoXBlockUserService
from xmodule.contentstore.django import contentstore from xmodule.contentstore.django import contentstore
from xmodule.error_module import ErrorDescriptor from xmodule.error_module import ErrorDescriptor
from xmodule.exceptions import NotFoundError, ProcessingError from xmodule.exceptions import NotFoundError, ProcessingError
from xmodule.mixin import wrap_with_license
from xmodule.modulestore.django import ModuleI18nService, modulestore from xmodule.modulestore.django import ModuleI18nService, modulestore
from xmodule.services import SettingsService from xmodule.services import SettingsService
from xmodule.studio_editable import has_author_view from xmodule.studio_editable import has_author_view
......
...@@ -106,7 +106,7 @@ from lms.djangoapps.lms_xblock.mixin import LmsBlockMixin ...@@ -106,7 +106,7 @@ from lms.djangoapps.lms_xblock.mixin import LmsBlockMixin
from cms.lib.xblock.authoring_mixin import AuthoringMixin from cms.lib.xblock.authoring_mixin import AuthoringMixin
import dealer.git import dealer.git
from xmodule.modulestore.edit_info import EditInfoMixin from xmodule.modulestore.edit_info import EditInfoMixin
from xmodule.mixin import LicenseMixin from openedx.core.lib.license import LicenseMixin
############################ FEATURE CONFIGURATION ############################# ############################ FEATURE CONFIGURATION #############################
...@@ -280,6 +280,7 @@ MAKO_TEMPLATES['main'] = [ ...@@ -280,6 +280,7 @@ MAKO_TEMPLATES['main'] = [
COMMON_ROOT / 'static', # required to statically include common Underscore templates COMMON_ROOT / 'static', # required to statically include common Underscore templates
OPENEDX_ROOT / 'core' / 'djangoapps' / 'cors_csrf' / 'templates', OPENEDX_ROOT / 'core' / 'djangoapps' / 'cors_csrf' / 'templates',
OPENEDX_ROOT / 'core' / 'djangoapps' / 'dark_lang' / 'templates', OPENEDX_ROOT / 'core' / 'djangoapps' / 'dark_lang' / 'templates',
OPENEDX_ROOT / 'core' / 'lib' / 'license' / 'templates',
CMS_ROOT / 'djangoapps' / 'pipeline_js' / 'templates', CMS_ROOT / 'djangoapps' / 'pipeline_js' / 'templates',
] ]
......
...@@ -9,6 +9,7 @@ from datetime import datetime ...@@ -9,6 +9,7 @@ from datetime import datetime
import requests import requests
from lazy import lazy from lazy import lazy
from lxml import etree from lxml import etree
from openedx.core.lib.license import LicenseMixin
from openedx.core.lib.xblock_fields.fields import Date from openedx.core.lib.xblock_fields.fields import Date
from openedx.core.lib.xblock_fields.inherited_fields import DEFAULT_START_DATE from openedx.core.lib.xblock_fields.inherited_fields import DEFAULT_START_DATE
from path import Path as path from path import Path as path
...@@ -16,7 +17,6 @@ from pytz import utc ...@@ -16,7 +17,6 @@ from pytz import utc
from xblock.fields import Boolean, Dict, Float, Integer, List, Scope, String from xblock.fields import Boolean, Dict, Float, Integer, List, Scope, String
from xmodule import course_metadata_utils from xmodule import course_metadata_utils
from xmodule.graders import grader_from_conf from xmodule.graders import grader_from_conf
from xmodule.mixin import LicenseMixin
from xmodule.seq_module import SequenceDescriptor, SequenceModule from xmodule.seq_module import SequenceDescriptor, SequenceModule
from xmodule.tabs import CourseTabList, InvalidTabsException from xmodule.tabs import CourseTabList, InvalidTabsException
......
...@@ -18,35 +18,33 @@ import logging ...@@ -18,35 +18,33 @@ import logging
import random import random
from collections import OrderedDict from collections import OrderedDict
from operator import itemgetter from operator import itemgetter
from lxml import etree
from pkg_resources import resource_string from pkg_resources import resource_string
from django.conf import settings from django.conf import settings
from lxml import etree
from openedx.core.lib.cache_utils import memoize_in_request_cache from opaque_keys.edx.locator import AssetLocator
from openedx.core.djangoapps.video_config.models import HLSPlaybackEnabledFlag from openedx.core.djangoapps.video_config.models import HLSPlaybackEnabledFlag
from openedx.core.lib.cache_utils import memoize_in_request_cache
from openedx.core.lib.license import LicenseMixin
from xblock.core import XBlock from xblock.core import XBlock
from xblock.fields import ScopeIds from xblock.fields import ScopeIds
from xblock.runtime import KvsFieldData from xblock.runtime import KvsFieldData
from opaque_keys.edx.locator import AssetLocator from xmodule.contentstore.content import StaticContent
from xmodule.modulestore.inheritance import InheritanceKeyValueStore, own_metadata
from xmodule.x_module import XModule, module_attr
from xmodule.editing_module import TabsEditingDescriptor from xmodule.editing_module import TabsEditingDescriptor
from xmodule.raw_module import EmptyDataRawDescriptor
from xmodule.xml_module import is_pointer_tag, name_to_pathname, deserialize_field
from xmodule.exceptions import NotFoundError from xmodule.exceptions import NotFoundError
from xmodule.contentstore.content import StaticContent from xmodule.modulestore.inheritance import InheritanceKeyValueStore, own_metadata
from xmodule.validation import StudioValidationMessage, StudioValidation from xmodule.raw_module import EmptyDataRawDescriptor
from xmodule.validation import StudioValidation, StudioValidationMessage
from xmodule.video_module import manage_video_subtitles_save
from xmodule.x_module import XModule, module_attr
from xmodule.xml_module import deserialize_field, is_pointer_tag, name_to_pathname
from .transcripts_utils import VideoTranscriptsMixin, Transcript, get_html5_ids
from .video_utils import create_youtube_string, get_poster, rewrite_video_url, format_xml_exception_message
from .bumper_utils import bumperize from .bumper_utils import bumperize
from .video_xfields import VideoFields from .transcripts_utils import Transcript, VideoTranscriptsMixin, get_html5_ids
from .video_handlers import VideoStudentViewHandlers, VideoStudioViewHandlers from .video_handlers import VideoStudentViewHandlers, VideoStudioViewHandlers
from .video_utils import create_youtube_string, format_xml_exception_message, get_poster, rewrite_video_url
from xmodule.video_module import manage_video_subtitles_save from .video_xfields import VideoFields
from xmodule.mixin import LicenseMixin
# The following import/except block for edxval is temporary measure until # The following import/except block for edxval is temporary measure until
# edxval is a proper XBlock Runtime Service. # edxval is a proper XBlock Runtime Service.
......
...@@ -8,7 +8,17 @@ import logging ...@@ -8,7 +8,17 @@ import logging
from collections import OrderedDict from collections import OrderedDict
from functools import partial from functools import partial
import static_replace
from capa.xqueue_interface import XQueueInterface from capa.xqueue_interface import XQueueInterface
from courseware.access import get_user_role, has_access
from courseware.entrance_exams import user_can_skip_entrance_exam, user_has_passed_entrance_exam
from courseware.masquerade import (
MasqueradingKeyValueStore,
filter_displayed_blocks,
is_masquerading_as_specific_student,
setup_masquerade
)
from courseware.model_data import DjangoKeyValueStore, FieldDataCache
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.cache import cache from django.core.cache import cache
...@@ -18,68 +28,53 @@ from django.core.urlresolvers import reverse ...@@ -18,68 +28,53 @@ from django.core.urlresolvers import reverse
from django.http import Http404, HttpResponse from django.http import Http404, HttpResponse
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from edx_proctoring.services import ProctoringService from edx_proctoring.services import ProctoringService
from eventtracking import tracker
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import UsageKey, CourseKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from requests.auth import HTTPBasicAuth
from track import contexts
from xblock.core import XBlock
from xblock.django.request import django_to_webob_request, webob_to_django_response
from xblock.exceptions import NoSuchHandlerError, NoSuchViewError
from xblock.reference.plugins import FSService
import static_replace
from courseware.access import has_access, get_user_role
from courseware.entrance_exams import (
user_can_skip_entrance_exam,
user_has_passed_entrance_exam
)
from courseware.masquerade import (
MasqueradingKeyValueStore,
filter_displayed_blocks,
is_masquerading_as_specific_student,
setup_masquerade,
)
from courseware.model_data import DjangoKeyValueStore, FieldDataCache
from edxmako.shortcuts import render_to_string from edxmako.shortcuts import render_to_string
from eventtracking import tracker
from lms.djangoapps.grades.signals.signals import SCORE_PUBLISHED from lms.djangoapps.grades.signals.signals import SCORE_PUBLISHED
from lms.djangoapps.lms_xblock.field_data import LmsFieldData from lms.djangoapps.lms_xblock.field_data import LmsFieldData
from lms.djangoapps.lms_xblock.models import XBlockAsidesConfig from lms.djangoapps.lms_xblock.models import XBlockAsidesConfig
from lms.djangoapps.lms_xblock.runtime import LmsModuleSystem from lms.djangoapps.lms_xblock.runtime import LmsModuleSystem
from lms.djangoapps.verify_student.services import VerificationService from lms.djangoapps.verify_student.services import VerificationService
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey, UsageKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from openedx.core.djangoapps.bookmarks.services import BookmarksService from openedx.core.djangoapps.bookmarks.services import BookmarksService
from openedx.core.djangoapps.crawlers.models import CrawlersConfig from openedx.core.djangoapps.crawlers.models import CrawlersConfig
from openedx.core.djangoapps.credit.services import CreditService from openedx.core.djangoapps.credit.services import CreditService
from openedx.core.djangoapps.monitoring_utils import set_custom_metrics_for_course_key, set_monitoring_transaction_name
from openedx.core.djangoapps.util.user_utils import SystemUser from openedx.core.djangoapps.util.user_utils import SystemUser
from openedx.core.djangoapps.monitoring_utils import ( from openedx.core.lib.license import wrap_with_license
set_custom_metrics_for_course_key, set_monitoring_transaction_name from openedx.core.lib.url_utils import quote_slashes, unquote_slashes
) from openedx.core.lib.xblock_utils import request_token as xblock_request_token
from openedx.core.lib.xblock_utils import ( from openedx.core.lib.xblock_utils import (
add_staff_markup,
replace_course_urls, replace_course_urls,
replace_jump_to_id_urls, replace_jump_to_id_urls,
replace_static_urls, replace_static_urls,
add_staff_markup, wrap_xblock
wrap_xblock,
request_token as xblock_request_token,
) )
from openedx.core.lib.url_utils import unquote_slashes, quote_slashes from requests.auth import HTTPBasicAuth
from student.models import anonymous_id_for_user, user_by_anonymous_id from student.models import anonymous_id_for_user, user_by_anonymous_id
from student.roles import CourseBetaTesterRole from student.roles import CourseBetaTesterRole
from track import contexts
from util import milestones_helpers from util import milestones_helpers
from util.json_request import JsonResponse from util.json_request import JsonResponse
from util.model_utils import slugify from util.model_utils import slugify
from util.sandboxing import can_execute_unsafe_code, get_python_lib_zip from util.sandboxing import can_execute_unsafe_code, get_python_lib_zip
from xblock.core import XBlock
from xblock.django.request import django_to_webob_request, webob_to_django_response
from xblock.exceptions import NoSuchHandlerError, NoSuchViewError
from xblock.reference.plugins import FSService
from xblock.runtime import KvsFieldData from xblock.runtime import KvsFieldData
from xblock_django.user_service import DjangoXBlockUserService from xblock_django.user_service import DjangoXBlockUserService
from xmodule.contentstore.django import contentstore from xmodule.contentstore.django import contentstore
from xmodule.error_module import ErrorDescriptor, NonStaffErrorDescriptor from xmodule.error_module import ErrorDescriptor, NonStaffErrorDescriptor
from xmodule.exceptions import NotFoundError, ProcessingError from xmodule.exceptions import NotFoundError, ProcessingError
from xmodule.lti_module import LTIModule from xmodule.lti_module import LTIModule
from xmodule.mixin import wrap_with_license
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore.exceptions import ItemNotFoundError
from xmodule.x_module import XModuleDescriptor from xmodule.x_module import XModuleDescriptor
from .field_overrides import OverrideFieldData from .field_overrides import OverrideFieldData
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
......
...@@ -40,7 +40,7 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -40,7 +40,7 @@ from django.utils.translation import ugettext_lazy as _
from .discussionsettings import * from .discussionsettings import *
from xmodule.modulestore.modulestore_settings import update_module_store_settings from xmodule.modulestore.modulestore_settings import update_module_store_settings
from xmodule.modulestore.edit_info import EditInfoMixin from xmodule.modulestore.edit_info import EditInfoMixin
from xmodule.mixin import LicenseMixin from openedx.core.lib.license import LicenseMixin
from lms.djangoapps.lms_xblock.mixin import LmsBlockMixin from lms.djangoapps.lms_xblock.mixin import LmsBlockMixin
################################### FEATURES ################################### ################################### FEATURES ###################################
...@@ -502,6 +502,7 @@ MAKO_TEMPLATES['main'] = [ ...@@ -502,6 +502,7 @@ MAKO_TEMPLATES['main'] = [
COMMON_ROOT / 'djangoapps' / 'pipeline_mako' / 'templates', COMMON_ROOT / 'djangoapps' / 'pipeline_mako' / 'templates',
OPENEDX_ROOT / 'core' / 'djangoapps' / 'cors_csrf' / 'templates', OPENEDX_ROOT / 'core' / 'djangoapps' / 'cors_csrf' / 'templates',
OPENEDX_ROOT / 'core' / 'djangoapps' / 'dark_lang' / 'templates', OPENEDX_ROOT / 'core' / 'djangoapps' / 'dark_lang' / 'templates',
OPENEDX_ROOT / 'core' / 'lib' / 'license' / 'templates',
] ]
# Django templating # Django templating
......
from .wrapper import wrap_with_license
from .mixin import LicenseMixin
""" """
Reusable mixins for XBlocks and/or XModules License mixin for XBlocks and XModules
""" """
from xblock.fields import Scope, String, XBlockMixin from xblock.fields import Scope, String, XBlockMixin
...@@ -51,14 +51,3 @@ class LicenseMixin(XBlockMixin): ...@@ -51,14 +51,3 @@ class LicenseMixin(XBlockMixin):
""" """
if getattr(self, "license", default): if getattr(self, "license", default):
node.set('license', self.license) node.set('license', self.license)
def wrap_with_license(block, view, frag, context): # pylint: disable=unused-argument
"""
In the LMS, display the custom license underneath the XBlock.
"""
license = getattr(block, "license", None) # pylint: disable=redefined-builtin
if license:
context = {"license": license}
frag.content += block.runtime.render_template('license_wrapper.html', context)
return frag
"""
Code to wrap web fragments with a license.
"""
def wrap_with_license(block, view, frag, context): # pylint: disable=unused-argument
"""
In the LMS, display the custom license underneath the XBlock.
"""
license = getattr(block, "license", None) # pylint: disable=redefined-builtin
if license:
context = {"license": license}
frag.content += block.runtime.render_template('license_wrapper.html', context)
return frag
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment