From 61963aabb655f482414910152260c92a815e05ee Mon Sep 17 00:00:00 2001 From: Parth P Panchal Date: Tue, 23 Oct 2018 15:01:20 +0530 Subject: [PATCH] [MRG + 1] Add __main__ (#159) * Renames camelot.cli to camelot.__main__ Closes #154 * Keep __main__ and cli separate * Monkey patch click HelpFormatter --- camelot/__init__.py | 10 +++ camelot/__main__.py | 16 ++++ tests/test_cli.py | 186 ++++++++++++++++++++++---------------------- 3 files changed, 119 insertions(+), 93 deletions(-) create mode 100755 camelot/__main__.py diff --git a/camelot/__init__.py b/camelot/__init__.py index d8ff6a5..364cd72 100644 --- a/camelot/__init__.py +++ b/camelot/__init__.py @@ -2,10 +2,20 @@ import logging +from click import HelpFormatter + from .__version__ import __version__ from .io import read_pdf +def _write_usage(self, prog, args='', prefix='Usage: '): + return self._write_usage('camelot', args, prefix=prefix) + + +# monkey patch click.HelpFormatter +HelpFormatter._write_usage = HelpFormatter.write_usage +HelpFormatter.write_usage = _write_usage + # set up logging logger = logging.getLogger('camelot') diff --git a/camelot/__main__.py b/camelot/__main__.py new file mode 100755 index 0000000..c945051 --- /dev/null +++ b/camelot/__main__.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from __future__ import absolute_import + + +__all__ = ('main',) + + +def main(): + from camelot.cli import cli + + cli() + + +if __name__ == "__main__": + main() diff --git a/tests/test_cli.py b/tests/test_cli.py index 4797eae..3f51f8f 100755 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1,93 +1,93 @@ -# -*- coding: utf-8 -*- - -import os - -from click.testing import CliRunner - -from camelot.cli import cli -from camelot.utils import TemporaryDirectory - - -testdir = os.path.dirname(os.path.abspath(__file__)) -testdir = os.path.join(testdir, 'files') - - -def test_cli_lattice(): - with TemporaryDirectory() as tempdir: - infile = os.path.join(testdir, 'foo.pdf') - outfile = os.path.join(tempdir, 'foo.csv') - runner = CliRunner() - result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, - 'lattice', infile]) - assert result.exit_code == 0 - assert result.output == 'Found 1 tables\n' - - result = runner.invoke(cli, ['--format', 'csv', - 'lattice', infile]) - output_error = 'Error: Please specify output file path using --output' - assert output_error in result.output - - result = runner.invoke(cli, ['--output', outfile, - 'lattice', infile]) - format_error = 'Please specify output file format using --format' - assert format_error in result.output - - -def test_cli_stream(): - with TemporaryDirectory() as tempdir: - infile = os.path.join(testdir, 'budget.pdf') - outfile = os.path.join(tempdir, 'budget.csv') - runner = CliRunner() - result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, - 'stream', infile]) - assert result.exit_code == 0 - assert result.output == 'Found 1 tables\n' - - result = runner.invoke(cli, ['--format', 'csv', 'stream', infile]) - output_error = 'Error: Please specify output file path using --output' - assert output_error in result.output - - result = runner.invoke(cli, ['--output', outfile, 'stream', infile]) - format_error = 'Please specify output file format using --format' - assert format_error in result.output - - -def test_cli_output_format(): - with TemporaryDirectory() as tempdir: - infile = os.path.join(testdir, 'health.pdf') - outfile = os.path.join(tempdir, 'health.{}') - runner = CliRunner() - - # json - result = runner.invoke(cli, ['--format', 'json', '--output', outfile.format('json'), - 'stream', infile]) - assert result.exit_code == 0 - - # excel - result = runner.invoke(cli, ['--format', 'excel', '--output', outfile.format('xlsx'), - 'stream', infile]) - assert result.exit_code == 0 - - # html - result = runner.invoke(cli, ['--format', 'html', '--output', outfile.format('html'), - 'stream', infile]) - assert result.exit_code == 0 - - # zip - result = runner.invoke(cli, ['--zip', '--format', 'csv', '--output', outfile.format('csv'), - 'stream', infile]) - assert result.exit_code == 0 - -def test_cli_quiet_flag(): - with TemporaryDirectory() as tempdir: - infile = os.path.join(testdir, 'blank.pdf') - outfile = os.path.join(tempdir, 'blank.csv') - runner = CliRunner() - - result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, - 'stream', infile]) - assert 'No tables found on page-1' in result.output - - result = runner.invoke(cli, ['--quiet', '--format', 'csv', - '--output', outfile, 'stream', infile]) - assert 'No tables found on page-1' not in result.output +# -*- coding: utf-8 -*- + +import os + +from click.testing import CliRunner + +from camelot.cli import cli +from camelot.utils import TemporaryDirectory + + +testdir = os.path.dirname(os.path.abspath(__file__)) +testdir = os.path.join(testdir, 'files') + + +def test_cli_lattice(): + with TemporaryDirectory() as tempdir: + infile = os.path.join(testdir, 'foo.pdf') + outfile = os.path.join(tempdir, 'foo.csv') + runner = CliRunner() + result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, + 'lattice', infile]) + assert result.exit_code == 0 + assert result.output == 'Found 1 tables\n' + + result = runner.invoke(cli, ['--format', 'csv', + 'lattice', infile]) + output_error = 'Error: Please specify output file path using --output' + assert output_error in result.output + + result = runner.invoke(cli, ['--output', outfile, + 'lattice', infile]) + format_error = 'Please specify output file format using --format' + assert format_error in result.output + + +def test_cli_stream(): + with TemporaryDirectory() as tempdir: + infile = os.path.join(testdir, 'budget.pdf') + outfile = os.path.join(tempdir, 'budget.csv') + runner = CliRunner() + result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, + 'stream', infile]) + assert result.exit_code == 0 + assert result.output == 'Found 1 tables\n' + + result = runner.invoke(cli, ['--format', 'csv', 'stream', infile]) + output_error = 'Error: Please specify output file path using --output' + assert output_error in result.output + + result = runner.invoke(cli, ['--output', outfile, 'stream', infile]) + format_error = 'Please specify output file format using --format' + assert format_error in result.output + + +def test_cli_output_format(): + with TemporaryDirectory() as tempdir: + infile = os.path.join(testdir, 'health.pdf') + outfile = os.path.join(tempdir, 'health.{}') + runner = CliRunner() + + # json + result = runner.invoke(cli, ['--format', 'json', '--output', outfile.format('json'), + 'stream', infile]) + assert result.exit_code == 0 + + # excel + result = runner.invoke(cli, ['--format', 'excel', '--output', outfile.format('xlsx'), + 'stream', infile]) + assert result.exit_code == 0 + + # html + result = runner.invoke(cli, ['--format', 'html', '--output', outfile.format('html'), + 'stream', infile]) + assert result.exit_code == 0 + + # zip + result = runner.invoke(cli, ['--zip', '--format', 'csv', '--output', outfile.format('csv'), + 'stream', infile]) + assert result.exit_code == 0 + +def test_cli_quiet_flag(): + with TemporaryDirectory() as tempdir: + infile = os.path.join(testdir, 'blank.pdf') + outfile = os.path.join(tempdir, 'blank.csv') + runner = CliRunner() + + result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, + 'stream', infile]) + assert 'No tables found on page-1' in result.output + + result = runner.invoke(cli, ['--quiet', '--format', 'csv', + '--output', outfile, 'stream', infile]) + assert 'No tables found on page-1' not in result.output