refactor: replace coursekey.course with coursekey.library (#30398)
This commit is contained in:
@@ -9,6 +9,7 @@ from opaque_keys.edx.django.models import LearningContextKeyField
|
||||
from simple_history.models import HistoricalRecords
|
||||
|
||||
from xmodule.modulestore import ModuleStoreEnum
|
||||
from xmodule.util.misc import get_library_or_course_attribute
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
@@ -92,7 +93,7 @@ class SplitModulestoreCourseIndex(models.Model):
|
||||
return {
|
||||
"_id": ObjectId(self.objectid),
|
||||
"org": self.course_id.org,
|
||||
"course": self.course_id.course,
|
||||
"course": get_library_or_course_attribute(self.course_id),
|
||||
"run": self.course_id.run, # pylint: disable=no-member
|
||||
"edited_by": self.edited_by_id,
|
||||
"edited_on": self.edited_on,
|
||||
|
||||
@@ -18,7 +18,7 @@ from xmodule.contentstore.content import XASSET_LOCATION_TAG
|
||||
from xmodule.exceptions import NotFoundError
|
||||
from xmodule.modulestore.django import ASSET_IGNORE_REGEX
|
||||
from xmodule.mongo_utils import connect_to_mongodb, create_collection_index
|
||||
from xmodule.util.misc import escape_invalid_characters
|
||||
from xmodule.util.misc import escape_invalid_characters, get_library_or_course_attribute
|
||||
|
||||
from .content import ContentStore, StaticContent, StaticContentStream
|
||||
|
||||
@@ -614,7 +614,7 @@ def query_for_course(course_key, category=None):
|
||||
dbkey = SON([
|
||||
(f'{prefix}.tag', XASSET_LOCATION_TAG),
|
||||
(f'{prefix}.org', course_key.org),
|
||||
(f'{prefix}.course', course_key.course),
|
||||
(f'{prefix}.course', get_library_or_course_attribute(course_key)),
|
||||
])
|
||||
if category:
|
||||
dbkey[f'{prefix}.category'] = category
|
||||
|
||||
@@ -26,6 +26,7 @@ from xblock.runtime import Mixologist
|
||||
from openedx.core.lib.json_utils import EdxJSONEncoder
|
||||
from xmodule.assetstore import AssetMetadata
|
||||
from xmodule.errortracker import make_error_tracker
|
||||
from xmodule.util.misc import get_library_or_course_attribute
|
||||
|
||||
from .exceptions import InsufficientSpecificationError, InvalidLocationError
|
||||
|
||||
@@ -203,9 +204,11 @@ class BulkOperationsMixin:
|
||||
if ignore_case:
|
||||
for key, record in self._active_bulk_ops.records.items():
|
||||
# Shortcut: check basic equivalence for cases where org/course/run might be None.
|
||||
key_library = get_library_or_course_attribute(key)
|
||||
course_library = get_library_or_course_attribute(course_key)
|
||||
if (key == course_key) or ( # lint-amnesty, pylint: disable=too-many-boolean-expressions
|
||||
(key.org and key.org.lower() == course_key.org.lower()) and
|
||||
(key.course and key.course.lower() == course_key.course.lower()) and
|
||||
(key_library and key_library.lower() == course_library.lower()) and
|
||||
(key.run and key.run.lower() == course_key.run.lower())
|
||||
):
|
||||
return record
|
||||
|
||||
@@ -20,6 +20,7 @@ from xmodule.modulestore.split_mongo import BlockKey, CourseEnvelope
|
||||
from xmodule.modulestore.split_mongo.definition_lazy_loader import DefinitionLazyLoader
|
||||
from xmodule.modulestore.split_mongo.id_manager import SplitMongoIdManager
|
||||
from xmodule.modulestore.split_mongo.split_mongo_kvs import SplitMongoKVS
|
||||
from xmodule.util.misc import get_library_or_course_attribute
|
||||
from xmodule.x_module import XModuleMixin
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -47,8 +48,9 @@ class CachingDescriptorSystem(MakoDescriptorSystem, EditInfoRuntimeMixin): # li
|
||||
underlying modulestore
|
||||
"""
|
||||
# needed by capa_problem (as runtime.resources_fs via this.resources_fs)
|
||||
if course_entry.course_key.course:
|
||||
root = modulestore.fs_root / course_entry.course_key.org / course_entry.course_key.course / course_entry.course_key.run # lint-amnesty, pylint: disable=line-too-long
|
||||
course_library = get_library_or_course_attribute(course_entry.course_key)
|
||||
if course_library:
|
||||
root = modulestore.fs_root / course_entry.course_key.org / course_library / course_entry.course_key.run # lint-amnesty, pylint: disable=line-too-long
|
||||
else:
|
||||
root = modulestore.fs_root / str(course_entry.structure['_id'])
|
||||
root.makedirs_p() # create directory if it doesn't exist
|
||||
|
||||
@@ -104,6 +104,7 @@ from xmodule.modulestore.split_mongo import BlockKey, CourseEnvelope
|
||||
from xmodule.modulestore.split_mongo.mongo_connection import DuplicateKeyError, DjangoFlexPersistenceBackend
|
||||
from xmodule.modulestore.store_utilities import DETACHED_XBLOCK_TYPES
|
||||
from xmodule.partitions.partitions_service import PartitionService
|
||||
from xmodule.util.misc import get_library_or_course_attribute
|
||||
|
||||
from ..exceptions import ItemNotFoundError
|
||||
from .caching_descriptor_system import CachingDescriptorSystem
|
||||
@@ -214,7 +215,7 @@ class SplitBulkWriteMixin(BulkOperationsMixin):
|
||||
if not isinstance(course_key, (CourseLocator, LibraryLocator)):
|
||||
raise TypeError(f'{course_key!r} is not a CourseLocator or LibraryLocator')
|
||||
# handle version_guid based retrieval locally
|
||||
if course_key.org is None or course_key.course is None or course_key.run is None:
|
||||
if course_key.org is None or get_library_or_course_attribute(course_key) is None or course_key.run is None:
|
||||
return self._active_bulk_ops.records[
|
||||
course_key.replace(org=None, course=None, run=None, branch=None)
|
||||
]
|
||||
@@ -231,7 +232,7 @@ class SplitBulkWriteMixin(BulkOperationsMixin):
|
||||
if not isinstance(course_key, (CourseLocator, LibraryLocator)):
|
||||
raise TypeError(f'{course_key!r} is not a CourseLocator or LibraryLocator')
|
||||
|
||||
if course_key.org and course_key.course and course_key.run:
|
||||
if course_key.org and get_library_or_course_attribute(course_key) and course_key.run:
|
||||
del self._active_bulk_ops.records[course_key.replace(branch=None, version_guid=None)]
|
||||
else:
|
||||
del self._active_bulk_ops.records[
|
||||
@@ -821,7 +822,7 @@ class SplitMongoModuleStore(SplitBulkWriteMixin, ModuleStoreWriteBase):
|
||||
"""
|
||||
if not course_key.version_guid:
|
||||
head_validation = True
|
||||
if head_validation and course_key.org and course_key.course and course_key.run:
|
||||
if head_validation and course_key.org and get_library_or_course_attribute(course_key) and course_key.run:
|
||||
if course_key.branch is None:
|
||||
raise InsufficientSpecificationError(course_key)
|
||||
|
||||
@@ -1897,7 +1898,7 @@ class SplitMongoModuleStore(SplitBulkWriteMixin, ModuleStoreWriteBase):
|
||||
index_entry = {
|
||||
'_id': ObjectId(),
|
||||
'org': locator.org,
|
||||
'course': locator.course,
|
||||
'course': get_library_or_course_attribute(locator),
|
||||
'run': locator.run,
|
||||
'edited_by': user_id,
|
||||
'edited_on': datetime.datetime.now(UTC),
|
||||
@@ -2923,7 +2924,7 @@ class SplitMongoModuleStore(SplitBulkWriteMixin, ModuleStoreWriteBase):
|
||||
:param force: if false, raises VersionConflictError if the current head of the course != the one identified
|
||||
by course_key
|
||||
"""
|
||||
if course_key.org is None or course_key.course is None or course_key.run is None or course_key.branch is None:
|
||||
if course_key.org is None or get_library_or_course_attribute(course_key) is None or course_key.run is None or course_key.branch is None:
|
||||
return None
|
||||
else:
|
||||
index_entry = self.get_course_index(course_key)
|
||||
|
||||
@@ -6,6 +6,10 @@ Miscellaneous utility functions.
|
||||
import re
|
||||
|
||||
from xmodule.annotator_mixin import html_to_text
|
||||
from opaque_keys.edx.locator import (
|
||||
CourseLocator,
|
||||
LibraryLocator,
|
||||
)
|
||||
|
||||
|
||||
def escape_invalid_characters(name, invalid_char_list, replace_with='_'):
|
||||
@@ -110,3 +114,13 @@ def is_xblock_an_assignment(xblock):
|
||||
weight = getattr(xblock, 'weight', 1)
|
||||
scored = has_score and (weight is None or weight > 0)
|
||||
return graded and scored
|
||||
|
||||
|
||||
def get_library_or_course_attribute(locator):
|
||||
"""
|
||||
Returns respective attribute to distinguish betweeen LibraryLocator and CourseLocator objects.
|
||||
"""
|
||||
if isinstance(locator, CourseLocator):
|
||||
return locator.course
|
||||
if isinstance(locator, LibraryLocator):
|
||||
return locator.library
|
||||
|
||||
Reference in New Issue
Block a user