* Consolidates and renames the runtime used as a base for all the others:
* Before: `xmodule.x_module:DescriptorSystem` and
`xmodule.mako_block:MakoDescriptorSystem`.
* After: `xmodule.x_module:ModuleStoreRuntime`.
* Co-locates and renames the runtimes for importing course OLX:
* Before: `xmodule.x_module:XMLParsingSystem` and
`xmodule.modulestore.xml:ImportSystem`.
* After: `xmodule.modulestore.xml:XMLParsingModuleStoreRuntime` and
`xmodule.modulestore.xml:XMLImportingModuleStoreRuntime`.
* Note: I would have liked to consolidate these, but it would have
involved nontrivial test refactoring.
* Renames the stub Old Mongo runtime:
* Before: `xmodule.modulestore.mongo.base:CachingDescriptorSystem`.
* After: `xmodule.modulestore.mongo.base:OldModuleStoreRuntime`.
* Renames the Split Mongo runtime, the which is what runs courses in LMS and CMS:
* Before: `xmodule.modulestore.split_mongo.caching_descriptor_system:CachingDescriptorSystem`.
* After: `xmodule.modulestore.split_mongo.runtime:SplitModuleStoreRuntime`.
* Renames some of the dummy runtimes used only in unit tests.
35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
"""
|
|
An implementation of IdReader and IdGenerator that manages ids for the SplitMongo storage
|
|
mechanism.
|
|
"""
|
|
|
|
|
|
from opaque_keys.edx.locator import DefinitionLocator, LocalId
|
|
|
|
from xmodule.modulestore.split_mongo import BlockKey
|
|
from xmodule.x_module import AsideKeyGenerator, OpaqueKeyReader
|
|
|
|
|
|
# TODO: Migrate split_mongo to use this class for all key mapping/creation.
|
|
class SplitMongoIdManager(OpaqueKeyReader, AsideKeyGenerator): # pylint: disable=abstract-method
|
|
"""
|
|
An IdManager that knows how to retrieve the DefinitionLocator, given
|
|
a usage_id and a :class:`.SplitModuleStoreRuntime`.
|
|
"""
|
|
def __init__(self, runtime):
|
|
self._runtime = runtime
|
|
|
|
def get_definition_id(self, usage_id):
|
|
if isinstance(usage_id.block_id, LocalId):
|
|
# a LocalId indicates that this block hasn't been persisted yet, and is instead stored
|
|
# in-memory in the local_modules dictionary.
|
|
return self._runtime.local_modules[usage_id].scope_ids.def_id
|
|
else:
|
|
block_key = BlockKey.from_usage_key(usage_id)
|
|
module_data = self._runtime.get_module_data(block_key, usage_id.course_key)
|
|
|
|
if module_data.definition is not None:
|
|
return DefinitionLocator(usage_id.block_type, module_data.definition)
|
|
else:
|
|
raise ValueError("All non-local blocks should have a definition specified")
|