'Returns an XModuleDescriptor instance for the item at usage_key.
Args:
usage_key: A :class:`.UsageKey` instance
depth (int): An argument that some module stores may use to prefetch
descendants of the queried modules for more efficient results later
in the request. The depth is counted in the number of calls to
get_children() to cache.  None indicates to cache all descendants.
revision:
ModuleStoreEnum.RevisionOption.published_only - returns only the published item.
ModuleStoreEnum.RevisionOption.draft_only - returns only the draft item.
None - uses the branch setting as follows:
if branch setting is ModuleStoreEnum.Branch.published_only, returns only the published item.
if branch setting is ModuleStoreEnum.Branch.draft_preferred, returns either draft or published item,
preferring draft.
Note: If the item is in DIRECT_ONLY_CATEGORIES, then returns only the PUBLISHED
version regardless of the revision.
using_descriptor_system (CachingDescriptorSystem): The existing CachingDescriptorSystem
to add data to, and to load the XBlocks from.
Raises:
xmodule.modulestore.exceptions.InsufficientSpecificationError
if any segment of the usage_key is None except revision
xmodule.modulestore.exceptions.ItemNotFoundError if no object
is found at that usage_key'

def get_item(self, usage_key, depth=0, revision=None, using_descriptor_system=None, **kwargs):

    def get_published():
        return wrap_draft(super(DraftModuleStore, self).get_item(usage_key, depth=depth, using_descriptor_system=using_descriptor_system, for_parent=kwargs.get('for_parent')))
    def get_draft():
        return wrap_draft(super(DraftModuleStore, self).get_item(as_draft(usage_key), depth=depth, using_descriptor_system=using_descriptor_system, for_parent=kwargs.get('for_parent')))
    if (revision == ModuleStoreEnum.RevisionOption.published_only):
        return get_published()
    elif (usage_key.category in DIRECT_ONLY_CATEGORIES):
        return get_published()
    elif (revision == ModuleStoreEnum.RevisionOption.draft_only):
        return get_draft()
    elif (self.get_branch_setting() == ModuleStoreEnum.Branch.published_only):
        return get_published()
    elif (revision is None):
        try:
            return get_draft()
        except ItemNotFoundError:
            return get_published()
    else:
        raise UnsupportedRevisionError()
