Commit 73f16309 by Davorin Sego

Initial idea

parent a62ef9ff
...@@ -154,6 +154,17 @@ class ActiveBulkThread(threading.local): ...@@ -154,6 +154,17 @@ class ActiveBulkThread(threading.local):
self.records = defaultdict(bulk_ops_record_type) self.records = defaultdict(bulk_ops_record_type)
class NullSignalHandler(object):
"""
A null handler that does nothing
"""
def send(self, *args, **kwargs):
"""
No-op
"""
pass
class BulkOperationsMixin(object): class BulkOperationsMixin(object):
""" """
This implements the :meth:`bulk_operations` modulestore semantics which handles nested invocations This implements the :meth:`bulk_operations` modulestore semantics which handles nested invocations
...@@ -169,7 +180,23 @@ class BulkOperationsMixin(object): ...@@ -169,7 +180,23 @@ class BulkOperationsMixin(object):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(BulkOperationsMixin, self).__init__(*args, **kwargs) super(BulkOperationsMixin, self).__init__(*args, **kwargs)
self._active_bulk_ops = ActiveBulkThread(self._bulk_ops_record_type) self._active_bulk_ops = ActiveBulkThread(self._bulk_ops_record_type)
self.signal_handler = None self._signal_handler = None
@property
def signal_handler(self):
"""
Return a signal handler, defaults to a null handler that does nothing.
"""
if not self._signal_handler:
self._signal_handler = NullSignalHandler()
return self._signal_handler
@signal_handler.setter
def signal_handler(self, value):
"""
Set the signal handler
"""
self._signal_handler = value
@contextmanager @contextmanager
def bulk_operations(self, course_id, emit_signals=True): def bulk_operations(self, course_id, emit_signals=True):
......
...@@ -26,7 +26,6 @@ from xmodule.contentstore.django import contentstore ...@@ -26,7 +26,6 @@ from xmodule.contentstore.django import contentstore
from xmodule.modulestore.draft_and_published import BranchSettingMixin from xmodule.modulestore.draft_and_published import BranchSettingMixin
from xmodule.modulestore.mixed import MixedModuleStore from xmodule.modulestore.mixed import MixedModuleStore
from xmodule.util.django import get_current_request_hostname from xmodule.util.django import get_current_request_hostname
from xmodule.util.null_handler import NullHandler
import xblock.reference.plugins import xblock.reference.plugins
...@@ -130,7 +129,7 @@ def create_modulestore_instance( ...@@ -130,7 +129,7 @@ def create_modulestore_instance(
i18n_service=None, i18n_service=None,
fs_service=None, fs_service=None,
user_service=None, user_service=None,
signal_handler=NullHandler(), signal_handler=None,
): ):
""" """
This will return a new instance of a modulestore given an engine and options This will return a new instance of a modulestore given an engine and options
......
...@@ -16,7 +16,6 @@ from opaque_keys.edx.keys import CourseKey, AssetKey ...@@ -16,7 +16,6 @@ from opaque_keys.edx.keys import CourseKey, AssetKey
from opaque_keys.edx.locator import LibraryLocator from opaque_keys.edx.locator import LibraryLocator
from opaque_keys.edx.locations import SlashSeparatedCourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey
from xmodule.assetstore import AssetMetadata from xmodule.assetstore import AssetMetadata
from xmodule.util.null_handler import NullHandler
from . import ModuleStoreWriteBase from . import ModuleStoreWriteBase
from . import ModuleStoreEnum from . import ModuleStoreEnum
...@@ -109,7 +108,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase): ...@@ -109,7 +108,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
fs_service=None, fs_service=None,
user_service=None, user_service=None,
create_modulestore_instance=None, create_modulestore_instance=None,
signal_handler=NullHandler(), signal_handler=None,
**kwargs **kwargs
): ):
""" """
......
...@@ -50,7 +50,6 @@ from xmodule.modulestore.exceptions import ItemNotFoundError, DuplicateCourseErr ...@@ -50,7 +50,6 @@ from xmodule.modulestore.exceptions import ItemNotFoundError, DuplicateCourseErr
from xmodule.modulestore.inheritance import InheritanceMixin, inherit_metadata, InheritanceKeyValueStore from xmodule.modulestore.inheritance import InheritanceMixin, inherit_metadata, InheritanceKeyValueStore
from xmodule.modulestore.xml import CourseLocationManager from xmodule.modulestore.xml import CourseLocationManager
from xmodule.services import SettingsService from xmodule.services import SettingsService
from xmodule.util.null_handler import NullHandler
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -544,7 +543,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo ...@@ -544,7 +543,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
i18n_service=None, i18n_service=None,
fs_service=None, fs_service=None,
user_service=None, user_service=None,
signal_handler=NullHandler(), signal_handler=None,
retry_wait_time=0.1, retry_wait_time=0.1,
**kwargs): **kwargs):
""" """
......
...@@ -67,7 +67,6 @@ from bson.objectid import ObjectId ...@@ -67,7 +67,6 @@ from bson.objectid import ObjectId
from xblock.core import XBlock from xblock.core import XBlock
from xblock.fields import Scope, Reference, ReferenceList, ReferenceValueDict from xblock.fields import Scope, Reference, ReferenceList, ReferenceValueDict
from xmodule.errortracker import null_error_tracker from xmodule.errortracker import null_error_tracker
from xmodule.util.null_handler import NullHandler
from opaque_keys.edx.locator import ( from opaque_keys.edx.locator import (
BlockUsageLocator, DefinitionLocator, CourseLocator, LibraryLocator, VersionTree, LocalId, BlockUsageLocator, DefinitionLocator, CourseLocator, LibraryLocator, VersionTree, LocalId,
) )
...@@ -641,7 +640,7 @@ class SplitMongoModuleStore(SplitBulkWriteMixin, ModuleStoreWriteBase): ...@@ -641,7 +640,7 @@ class SplitMongoModuleStore(SplitBulkWriteMixin, ModuleStoreWriteBase):
default_class=None, default_class=None,
error_tracker=null_error_tracker, error_tracker=null_error_tracker,
i18n_service=None, fs_service=None, user_service=None, i18n_service=None, fs_service=None, user_service=None,
services=None, signal_handler=NullHandler(), **kwargs): services=None, signal_handler=None, **kwargs):
""" """
:param doc_store_config: must have a host, db, and collection entries. Other common entries: port, tz_aware. :param doc_store_config: must have a host, db, and collection entries. Other common entries: port, tz_aware.
""" """
......
...@@ -6,7 +6,6 @@ from opaque_keys.edx.keys import UsageKey ...@@ -6,7 +6,6 @@ from opaque_keys.edx.keys import UsageKey
from unittest import TestCase from unittest import TestCase
from xblock.fields import XBlockMixin from xblock.fields import XBlockMixin
from xmodule.x_module import XModuleMixin from xmodule.x_module import XModuleMixin
from xmodule.util.null_handler import NullHandler
from xmodule.modulestore import ModuleStoreEnum from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.draft_and_published import ModuleStoreDraftAndPublished from xmodule.modulestore.draft_and_published import ModuleStoreDraftAndPublished
from xmodule.modulestore.edit_info import EditInfoMixin from xmodule.modulestore.edit_info import EditInfoMixin
...@@ -37,7 +36,7 @@ def create_modulestore_instance( ...@@ -37,7 +36,7 @@ def create_modulestore_instance(
i18n_service=None, i18n_service=None,
fs_service=None, fs_service=None,
user_service=None, user_service=None,
signal_handler=NullHandler(), signal_handler=None,
): ):
""" """
This will return a new instance of a modulestore given an engine and options This will return a new instance of a modulestore given an engine and options
......
...@@ -26,7 +26,6 @@ from xmodule.x_module import ( ...@@ -26,7 +26,6 @@ from xmodule.x_module import (
from xmodule.modulestore.xml_exporter import DEFAULT_CONTENT_FIELDS from xmodule.modulestore.xml_exporter import DEFAULT_CONTENT_FIELDS
from xmodule.modulestore import ModuleStoreEnum, ModuleStoreReadBase, LIBRARY_ROOT, COURSE_ROOT from xmodule.modulestore import ModuleStoreEnum, ModuleStoreReadBase, LIBRARY_ROOT, COURSE_ROOT
from xmodule.tabs import CourseTabList from xmodule.tabs import CourseTabList
from xmodule.util.null_handler import NullHandler
from opaque_keys.edx.locations import SlashSeparatedCourseKey, Location from opaque_keys.edx.locations import SlashSeparatedCourseKey, Location
from opaque_keys.edx.locator import CourseLocator, LibraryLocator from opaque_keys.edx.locator import CourseLocator, LibraryLocator
...@@ -336,7 +335,7 @@ class XMLModuleStore(ModuleStoreReadBase): ...@@ -336,7 +335,7 @@ class XMLModuleStore(ModuleStoreReadBase):
def __init__( def __init__(
self, data_dir, default_class=None, source_dirs=None, course_ids=None, self, data_dir, default_class=None, source_dirs=None, course_ids=None,
load_error_modules=True, i18n_service=None, fs_service=None, user_service=None, load_error_modules=True, i18n_service=None, fs_service=None, user_service=None,
signal_handler=NullHandler(), target_course_id=None, **kwargs # pylint: disable=unused-argument signal_handler=None, target_course_id=None, **kwargs # pylint: disable=unused-argument
): ):
""" """
Initialize an XMLModuleStore from data_dir Initialize an XMLModuleStore from data_dir
......
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