'Creates and returns the course.
Args:
org (str): the organization that owns the course
course (str): the name of the course
run (str): the name of the run
user_id: id of the user creating the course
kwargs: Any optional arguments understood by a subset of modulestores to customize instantiation
Returns: a CourseDescriptor'

def create_course(self, org, course, run, user_id, skip_auto_publish=False, **kwargs):

    master_branch = kwargs.pop('master_branch', ModuleStoreEnum.BranchName.draft)
    with self.bulk_operations(CourseLocator(org, course, run), ignore_case=True):
        item = super(DraftVersioningModuleStore, self).create_course(org, course, run, user_id, master_branch=master_branch, **kwargs)
        if ((master_branch == ModuleStoreEnum.BranchName.draft) and (not skip_auto_publish)):
            self._auto_publish_no_children(item.location, item.location.category, user_id, **kwargs)
            with self.branch_setting(ModuleStoreEnum.Branch.draft_preferred, item.id):
                super(SplitMongoModuleStore, self).create_course(org, course, run, user_id, runtime=item.runtime, **kwargs)
        return item
