'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.
raises InsufficientSpecificationError or ItemNotFoundError'

@contract(returns='XBlock')
def get_item(self, usage_key, depth=0, **kwargs):

    if ((not isinstance(usage_key, BlockUsageLocator)) or usage_key.deprecated):
        raise ItemNotFoundError(usage_key)
    with self.bulk_operations(usage_key.course_key):
        course = self._lookup_course(usage_key.course_key)
        items = self._load_items(course, [BlockKey.from_usage_key(usage_key)], depth, **kwargs)
        if (len(items) == 0):
            raise ItemNotFoundError(usage_key)
        elif (len(items) > 1):
            log.debug("Found    more    than    one    item    for    '{}'".format(usage_key))
        return items[0]
