Commit 4b068683 by Calen Pennington

Make modulestores properly propogate **kwargs

parent a14fbe4c
...@@ -634,7 +634,7 @@ class ModuleStoreReadBase(BulkOperationsMixin, ModuleStoreRead): ...@@ -634,7 +634,7 @@ class ModuleStoreReadBase(BulkOperationsMixin, ModuleStoreRead):
''' '''
Set up the error-tracking logic. Set up the error-tracking logic.
''' '''
super(ModuleStoreReadBase, self).__init__() super(ModuleStoreReadBase, self).__init__(**kwargs)
self._course_errors = defaultdict(make_error_tracker) # location -> ErrorLog self._course_errors = defaultdict(make_error_tracker) # location -> ErrorLog
# TODO move the inheritance_cache_subsystem to classes which use it # TODO move the inheritance_cache_subsystem to classes which use it
self.metadata_inheritance_cache_subsystem = metadata_inheritance_cache_subsystem self.metadata_inheritance_cache_subsystem = metadata_inheritance_cache_subsystem
......
...@@ -18,6 +18,8 @@ import threading ...@@ -18,6 +18,8 @@ import threading
from xmodule.util.django import get_current_request_hostname from xmodule.util.django import get_current_request_hostname
import xmodule.modulestore # pylint: disable=unused-import import xmodule.modulestore # pylint: disable=unused-import
from xmodule.modulestore.mixed import MixedModuleStore
from xmodule.modulestore.draft_and_published import BranchSettingMixin
from xmodule.contentstore.django import contentstore from xmodule.contentstore.django import contentstore
import xblock.reference.plugins import xblock.reference.plugins
...@@ -66,6 +68,12 @@ def create_modulestore_instance(engine, content_store, doc_store_config, options ...@@ -66,6 +68,12 @@ def create_modulestore_instance(engine, content_store, doc_store_config, options
except InvalidCacheBackendError: except InvalidCacheBackendError:
metadata_inheritance_cache = get_cache('default') metadata_inheritance_cache = get_cache('default')
if issubclass(class_, MixedModuleStore):
_options['create_modulestore_instance'] = create_modulestore_instance
if issubclass(class_, BranchSettingMixin):
_options['branch_setting_func'] = _get_modulestore_branch_setting
return class_( return class_(
contentstore=content_store, contentstore=content_store,
metadata_inheritance_cache_subsystem=metadata_inheritance_cache, metadata_inheritance_cache_subsystem=metadata_inheritance_cache,
...@@ -75,8 +83,6 @@ def create_modulestore_instance(engine, content_store, doc_store_config, options ...@@ -75,8 +83,6 @@ def create_modulestore_instance(engine, content_store, doc_store_config, options
doc_store_config=doc_store_config, doc_store_config=doc_store_config,
i18n_service=i18n_service or ModuleI18nService(), i18n_service=i18n_service or ModuleI18nService(),
fs_service=fs_service or xblock.reference.plugins.FSService(), fs_service=fs_service or xblock.reference.plugins.FSService(),
branch_setting_func=_get_modulestore_branch_setting,
create_modulestore_instance=create_modulestore_instance,
**_options **_options
) )
......
...@@ -25,11 +25,11 @@ class BranchSettingMixin(object): ...@@ -25,11 +25,11 @@ class BranchSettingMixin(object):
:param branch_setting_func: a function that returns the default branch setting for this object. :param branch_setting_func: a function that returns the default branch setting for this object.
If not specified, ModuleStoreEnum.Branch.published_only is used as the default setting. If not specified, ModuleStoreEnum.Branch.published_only is used as the default setting.
""" """
super(BranchSettingMixin, self).__init__(*args, **kwargs)
self.default_branch_setting_func = kwargs.pop( self.default_branch_setting_func = kwargs.pop(
'branch_setting_func', 'branch_setting_func',
lambda: ModuleStoreEnum.Branch.published_only lambda: ModuleStoreEnum.Branch.published_only
) )
super(BranchSettingMixin, self).__init__(*args, **kwargs)
# cache the branch setting on a local thread to support a multi-threaded environment # cache the branch setting on a local thread to support a multi-threaded environment
self.thread_cache = threading.local() self.thread_cache = threading.local()
......
...@@ -27,7 +27,7 @@ from opaque_keys.edx.locations import SlashSeparatedCourseKey ...@@ -27,7 +27,7 @@ from opaque_keys.edx.locations import SlashSeparatedCourseKey
from opaque_keys.edx.locator import BlockUsageLocator, CourseLocator from opaque_keys.edx.locator import BlockUsageLocator, CourseLocator
from xmodule.exceptions import InvalidVersionError from xmodule.exceptions import InvalidVersionError
from xmodule.modulestore import ModuleStoreEnum from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.draft_and_published import UnsupportedRevisionError from xmodule.modulestore.draft_and_published import UnsupportedRevisionError, ModuleStoreDraftAndPublished
from xmodule.modulestore.exceptions import ItemNotFoundError, DuplicateCourseError, ReferentialIntegrityError, NoPathToItem from xmodule.modulestore.exceptions import ItemNotFoundError, DuplicateCourseError, ReferentialIntegrityError, NoPathToItem
from xmodule.modulestore.mixed import MixedModuleStore from xmodule.modulestore.mixed import MixedModuleStore
from xmodule.modulestore.search import path_to_location from xmodule.modulestore.search import path_to_location
...@@ -1789,9 +1789,11 @@ def create_modulestore_instance(engine, contentstore, doc_store_config, options, ...@@ -1789,9 +1789,11 @@ def create_modulestore_instance(engine, contentstore, doc_store_config, options,
""" """
class_ = load_function(engine) class_ = load_function(engine)
if issubclass(class_, ModuleStoreDraftAndPublished):
options['branch_setting_func'] = lambda: ModuleStoreEnum.Branch.draft_preferred
return class_( return class_(
doc_store_config=doc_store_config, doc_store_config=doc_store_config,
contentstore=contentstore, contentstore=contentstore,
branch_setting_func=lambda: ModuleStoreEnum.Branch.draft_preferred,
**options **options
) )
...@@ -370,7 +370,7 @@ class XMLModuleStore(ModuleStoreReadBase): ...@@ -370,7 +370,7 @@ class XMLModuleStore(ModuleStoreReadBase):
""" """
def __init__( def __init__(
self, data_dir, default_class=None, course_dirs=None, course_ids=None, self, data_dir, default_class=None, course_dirs=None, course_ids=None,
load_error_modules=True, i18n_service=None, pyfs_service=None, **kwargs load_error_modules=True, i18n_service=None, fs_service=None, **kwargs
): ):
""" """
Initialize an XMLModuleStore from data_dir Initialize an XMLModuleStore from data_dir
...@@ -409,7 +409,7 @@ class XMLModuleStore(ModuleStoreReadBase): ...@@ -409,7 +409,7 @@ class XMLModuleStore(ModuleStoreReadBase):
self.field_data = inheriting_field_data(kvs=DictKeyValueStore()) self.field_data = inheriting_field_data(kvs=DictKeyValueStore())
self.i18n_service = i18n_service self.i18n_service = i18n_service
self.pyfs_service = pyfs_service self.fs_service = fs_service
# If we are specifically asked for missing courses, that should # If we are specifically asked for missing courses, that should
# be an error. If we are asked for "all" courses, find the ones # be an error. If we are asked for "all" courses, find the ones
...@@ -555,8 +555,8 @@ class XMLModuleStore(ModuleStoreReadBase): ...@@ -555,8 +555,8 @@ class XMLModuleStore(ModuleStoreReadBase):
if self.i18n_service: if self.i18n_service:
services['i18n'] = self.i18n_service services['i18n'] = self.i18n_service
if self.pyfs_service: if self.fs_service:
services['fs'] = self.pyfs_service services['fs'] = self.fs_service
system = ImportSystem( system = ImportSystem(
xmlstore=self, xmlstore=self,
......
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