'Load an XModuleDescriptor from item, using the children stored in data_cache
Arguments:
course_key (CourseKey): which course to load from
item (dict): A dictionary with the following keys:
location: The serialized UsageKey for the item to load
data_dir (optional): The directory name to use as the root data directory for this XModule
data_cache (dict): A dictionary mapping from UsageKeys to xblock field data
(this is the xblock data loaded from the database)
apply_cached_metadata (bool): Whether to use the cached metadata for inheritance
purposes.
using_descriptor_system (CachingDescriptorSystem): The existing CachingDescriptorSystem
to add data to, and to load the XBlocks from.
for_parent (:class:`XBlock`): The parent of the XBlock being loaded.'

@contract(course_key=CourseKey, item=dict, apply_cached_metadata=bool, using_descriptor_system='None|CachingDescriptorSystem')
def _load_item(self, course_key, item, data_cache, apply_cached_metadata=True, using_descriptor_system=None, for_parent=None):

    course_key = self.fill_in_run(course_key)
    location = Location._from_deprecated_son(item['location'], course_key.run)
    data_dir = getattr(item, 'data_dir', location.course)
    root = (self.fs_root / data_dir)
    resource_fs = _OSFS_INSTANCE.setdefault(root, OSFS(root, create=True))
    cached_metadata = {}
    if apply_cached_metadata:
        cached_metadata = self._get_cached_metadata_inheritance_tree(course_key)
    if (using_descriptor_system is None):
        services = {}
        if self.i18n_service:
            services['i18n'] = self.i18n_service
        if self.fs_service:
            services['fs'] = self.fs_service
        if self.user_service:
            services['user'] = self.user_service
        services['settings'] = SettingsService()
        if self.request_cache:
            services['request_cache'] = self.request_cache
        services['partitions'] = PartitionService(course_key)
        system = CachingDescriptorSystem(modulestore=self, course_key=course_key, module_data=data_cache, default_class=self.default_class, resources_fs=resource_fs, error_tracker=self.error_tracker, render_template=self.render_template, cached_metadata=cached_metadata, mixins=self.xblock_mixins, select=self.xblock_select, disabled_xblock_types=self.disabled_xblock_types, services=services)
    else:
        system = using_descriptor_system
        system.module_data.update(data_cache)
        system.cached_metadata.update(cached_metadata)
    item = system.load_item(location, for_parent=for_parent)
    item.course_version = None
    return item
