def cli()

in psaw/psaw.py [0:0]


def cli(search_type, query, subreddits, authors, limit, before, after,
        output, output_template, format, filter_, prettify, dry_run,
        no_output_template_check, proxy, verbose):
    """
    retrieve comments or submissions from reddit which meet given criteria

    """

    if output is None and output_template is None:
        raise click.UsageError("must supply either --output or --output-template")

    if output is not None and output_template is not None:
        raise click.UsageError("can only supply --output or --output-template, not both")

    verbose = verbose or dry_run

    if output:
        batch_mode = True
    else:
        batch_mode = False

    api = PushshiftAPI(https_proxy=proxy)
    search_args = dict()

    query = ut.string_to_list(query)
    filter_ = ut.string_to_list(filter_)
    authors = ut.string_to_list(authors)
    subreddits = ut.string_to_list(subreddits)
    before = ut.string_to_epoch(before)
    after = ut.string_to_epoch(after)

    # use a dict to pass args to search function because certain parameters
    # don't have defaults (eg, passing filter=None returns no fields)
    search_args = ut.build_search_kwargs(
        search_args,
        q=query,
        subreddit=subreddits,
        author=authors,
        limit=limit,
        before=before,
        after=after,
        filter=filter_,
    )

    search_functions = {
        'comments': api.search_comments,
        'submissions': api.search_submissions,
    }[search_type]

    if verbose:
        click.echo("calling api with following arguments:")
        click.echo(pprint.pformat(search_args))

    things = search_functions(**search_args)
    thing, things = ut.peek_first_item(things)
    if thing is None:
        click.secho("no results found", err=True, bold=True)
        return

    fields, missing_fields = ut.validate_fields(thing, filter_)

    if missing_fields:
        missing_fields = sorted(missing_fields)
        click.secho("server did not return following fields: {}".format(missing_fields),
                    bold=True, err=True)

    writer_class = choose_writer_class(format, batch_mode)
    writer = writer_class(fields=fields, prettify=prettify)

    if batch_mode:
        save_to_single_file(things, output, writer=writer,
                            count=limit, verbose=verbose, dry_run=dry_run)
    else:
        if not no_output_template_check:
            validate_output_template(output_template)

        save_to_multiple_files(things, output_template, writer=writer,
                               count=limit, verbose=verbose, dry_run=dry_run)