def test_stdout_default(runner): @click.command() @click.argument('output', type=click.File('w'), default='-') def inout(output): output.write('Foo bar baz\n') output.flush() result = runner.invoke(inout, []) assert not result.exception assert result.output == 'Foo bar baz\n'
def test_file_option(runner): @click.command() @click.option('--file', type=click.File('w')) def input(file): file.write('Hello World!\n') @click.command() @click.option('--file', type=click.File('r')) def output(file): click.echo(file.read()) with runner.isolated_filesystem(): result_in = runner.invoke(input, ['--file=example.txt']) result_out = runner.invoke(output, ['--file=example.txt']) assert not result_in.exception assert result_in.output == '' assert not result_out.exception assert result_out.output == 'Hello World!\n\n'
def test_file_args(runner): @click.command() @click.argument('input', type=click.File('rb')) @click.argument('output', type=click.File('wb')) def inout(input, output): while True: chunk = input.read(1024) if not chunk: break output.write(chunk) with runner.isolated_filesystem(): result = runner.invoke(inout, ['-', 'hello.txt'], input='Hey!') assert result.output == '' assert result.exit_code == 0 with open('hello.txt', 'rb') as f: assert f.read() == b'Hey!' result = runner.invoke(inout, ['hello.txt', '-']) assert result.output == 'Hey!' assert result.exit_code == 0
def test_file_lazy_mode(runner): do_io = False @click.command() @click.option('--file', type=click.File('w')) def input(file): if do_io: file.write('Hello World!\n') @click.command() @click.option('--file', type=click.File('r')) def output(file): pass with runner.isolated_filesystem(): os.mkdir('example.txt') do_io = True result_in = runner.invoke(input, ['--file=example.txt']) assert result_in.exit_code == 1 do_io = False result_in = runner.invoke(input, ['--file=example.txt']) assert result_in.exit_code == 0 result_out = runner.invoke(output, ['--file=example.txt']) assert result_out.exception @click.command() @click.option('--file', type=click.File('w', lazy=False)) def input_non_lazy(file): file.write('Hello World!\n') with runner.isolated_filesystem(): os.mkdir('example.txt') result_in = runner.invoke(input_non_lazy, ['--file=example.txt']) assert result_in.exit_code == 2 assert 'Invalid value for "--file": Could not open file: example.txt' \ in result_in.output
def test_pipeline(runner): @click.group(chain=True, invoke_without_command=True) @click.option('-i', '--input', type=click.File('r')) def cli(input): pass @cli.resultcallback() def process_pipeline(processors, input): iterator = (x.rstrip('\r\n') for x in input) for processor in processors: iterator = processor(iterator) for item in iterator: click.echo(item) @cli.command('uppercase') def make_uppercase(): def processor(iterator): for line in iterator: yield line.upper() return processor @cli.command('strip') def make_strip(): def processor(iterator): for line in iterator: yield line.strip() return processor result = runner.invoke(cli, ['-i', '-'], input='foo\nbar') assert not result.exception assert result.output.splitlines() == [ 'foo', 'bar', ] result = runner.invoke(cli, ['-i', '-', 'strip'], input='foo \n bar') assert not result.exception assert result.output.splitlines() == [ 'foo', 'bar', ] result = runner.invoke(cli, ['-i', '-', 'strip', 'uppercase'], input='foo \n bar') assert not result.exception assert result.output.splitlines() == [ 'FOO', 'BAR', ]
def test_file_atomics(runner): @click.command() @click.argument('output', type=click.File('wb', atomic=True)) def inout(output): output.write(b'Foo bar baz\n') output.flush() with open(output.name, 'rb') as f: old_content = f.read() assert old_content == b'OLD\n' with runner.isolated_filesystem(): with open('foo.txt', 'wb') as f: f.write(b'OLD\n') result = runner.invoke(inout, ['foo.txt'], input='Hey!', catch_exceptions=False) assert result.output == '' assert result.exit_code == 0 with open('foo.txt', 'rb') as f: assert f.read() == b'Foo bar baz\n'
import trio_click as click @click.command() @click.argument('input', type=click.File('rb'), nargs=-1) @click.argument('output', type=click.File('wb')) def cli(input, output): """This script works similar to the Unix `cat` command but it writes into a specific file (which could be the standard output as denoted by the ``-`` sign). \b Copy stdin to stdout: inout - - \b Copy foo.txt and bar.txt to stdout: inout foo.txt bar.txt - \b Write stdin into the file foo.txt inout - foo.txt """ for f in input: while True: chunk = f.read(1024) if not chunk: break output.write(chunk) output.flush()