def schedule_crawl_cli(spider_name, workflow_name, dont_force_crawl, kwarg):
    """Schedule a new crawl.

    Note:
        Currently the oaiharvesting is done on inspire side, before this, so
        it's not supported here yet.
    """
    extra_kwargs = {}
    for extra_kwarg in kwarg:
        if '=' not in extra_kwarg:
            raise TypeError(
                'Bad formatted kwarg (%s), it should be in the form:\n'
                '    --kwarg key=value' % extra_kwarg
            )
        key, value = extra_kwarg.split('=', 1)

        extra_kwargs[key] = value

    settings = {'CRAWL_ONCE_ENABLED': False}
    if dont_force_crawl:
        settings = {}

    try:
        crawler_job_uid = schedule_crawl(
            spider=spider_name,
            workflow=workflow_name,
            crawler_settings=settings,
            **extra_kwargs
        )
    except ScrapydResponseError as error:
        message = str(error)
        if 'spider' in message and 'not found' in message:
            click.echo('%s' % error)
            click.echo('\n Available spiders:')
            spiders = list_spiders()
            click.echo('\n'.join(spiders))
            raise click.Abort()
        else:
            raise

    crawler_job = models.CrawlerJob.query.filter_by(
        job_id=crawler_job_uid
    ).one()

    click.echo(
        'Once the job is started, you can see the logs of the job with the '
        'command:\n'
        '    inspirehep crawler job list\n'
        '    inspirehep crawler job logs %s\n'
        '\n'
        'and for the associated workflow (it\'s job_id should be %s):\n'
        '    inspirehep crawler workflow list\n'
        % (crawler_job.id, crawler_job_uid)
    )
Schedule a new crawl.

    Note:
        Currently the oaiharvesting is done on inspire side, before this, so
        it's not supported here yet.