[MRG + 1] Add __main__ (#159)

* Renames camelot.cli to camelot.__main__

Closes #154

* Keep __main__ and cli separate

* Monkey patch click HelpFormatter
pull/2/head
Parth P Panchal 2018-10-23 15:01:20 +05:30 committed by Vinayak Mehta
parent 60c1270745
commit 61963aabb6
3 changed files with 119 additions and 93 deletions

View File

@ -2,10 +2,20 @@
import logging import logging
from click import HelpFormatter
from .__version__ import __version__ from .__version__ import __version__
from .io import read_pdf 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 # set up logging
logger = logging.getLogger('camelot') logger = logging.getLogger('camelot')

View File

@ -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()

View File

@ -1,93 +1,93 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
from click.testing import CliRunner from click.testing import CliRunner
from camelot.cli import cli from camelot.cli import cli
from camelot.utils import TemporaryDirectory from camelot.utils import TemporaryDirectory
testdir = os.path.dirname(os.path.abspath(__file__)) testdir = os.path.dirname(os.path.abspath(__file__))
testdir = os.path.join(testdir, 'files') testdir = os.path.join(testdir, 'files')
def test_cli_lattice(): def test_cli_lattice():
with TemporaryDirectory() as tempdir: with TemporaryDirectory() as tempdir:
infile = os.path.join(testdir, 'foo.pdf') infile = os.path.join(testdir, 'foo.pdf')
outfile = os.path.join(tempdir, 'foo.csv') outfile = os.path.join(tempdir, 'foo.csv')
runner = CliRunner() runner = CliRunner()
result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, result = runner.invoke(cli, ['--format', 'csv', '--output', outfile,
'lattice', infile]) 'lattice', infile])
assert result.exit_code == 0 assert result.exit_code == 0
assert result.output == 'Found 1 tables\n' assert result.output == 'Found 1 tables\n'
result = runner.invoke(cli, ['--format', 'csv', result = runner.invoke(cli, ['--format', 'csv',
'lattice', infile]) 'lattice', infile])
output_error = 'Error: Please specify output file path using --output' output_error = 'Error: Please specify output file path using --output'
assert output_error in result.output assert output_error in result.output
result = runner.invoke(cli, ['--output', outfile, result = runner.invoke(cli, ['--output', outfile,
'lattice', infile]) 'lattice', infile])
format_error = 'Please specify output file format using --format' format_error = 'Please specify output file format using --format'
assert format_error in result.output assert format_error in result.output
def test_cli_stream(): def test_cli_stream():
with TemporaryDirectory() as tempdir: with TemporaryDirectory() as tempdir:
infile = os.path.join(testdir, 'budget.pdf') infile = os.path.join(testdir, 'budget.pdf')
outfile = os.path.join(tempdir, 'budget.csv') outfile = os.path.join(tempdir, 'budget.csv')
runner = CliRunner() runner = CliRunner()
result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, result = runner.invoke(cli, ['--format', 'csv', '--output', outfile,
'stream', infile]) 'stream', infile])
assert result.exit_code == 0 assert result.exit_code == 0
assert result.output == 'Found 1 tables\n' assert result.output == 'Found 1 tables\n'
result = runner.invoke(cli, ['--format', 'csv', 'stream', infile]) result = runner.invoke(cli, ['--format', 'csv', 'stream', infile])
output_error = 'Error: Please specify output file path using --output' output_error = 'Error: Please specify output file path using --output'
assert output_error in result.output assert output_error in result.output
result = runner.invoke(cli, ['--output', outfile, 'stream', infile]) result = runner.invoke(cli, ['--output', outfile, 'stream', infile])
format_error = 'Please specify output file format using --format' format_error = 'Please specify output file format using --format'
assert format_error in result.output assert format_error in result.output
def test_cli_output_format(): def test_cli_output_format():
with TemporaryDirectory() as tempdir: with TemporaryDirectory() as tempdir:
infile = os.path.join(testdir, 'health.pdf') infile = os.path.join(testdir, 'health.pdf')
outfile = os.path.join(tempdir, 'health.{}') outfile = os.path.join(tempdir, 'health.{}')
runner = CliRunner() runner = CliRunner()
# json # json
result = runner.invoke(cli, ['--format', 'json', '--output', outfile.format('json'), result = runner.invoke(cli, ['--format', 'json', '--output', outfile.format('json'),
'stream', infile]) 'stream', infile])
assert result.exit_code == 0 assert result.exit_code == 0
# excel # excel
result = runner.invoke(cli, ['--format', 'excel', '--output', outfile.format('xlsx'), result = runner.invoke(cli, ['--format', 'excel', '--output', outfile.format('xlsx'),
'stream', infile]) 'stream', infile])
assert result.exit_code == 0 assert result.exit_code == 0
# html # html
result = runner.invoke(cli, ['--format', 'html', '--output', outfile.format('html'), result = runner.invoke(cli, ['--format', 'html', '--output', outfile.format('html'),
'stream', infile]) 'stream', infile])
assert result.exit_code == 0 assert result.exit_code == 0
# zip # zip
result = runner.invoke(cli, ['--zip', '--format', 'csv', '--output', outfile.format('csv'), result = runner.invoke(cli, ['--zip', '--format', 'csv', '--output', outfile.format('csv'),
'stream', infile]) 'stream', infile])
assert result.exit_code == 0 assert result.exit_code == 0
def test_cli_quiet_flag(): def test_cli_quiet_flag():
with TemporaryDirectory() as tempdir: with TemporaryDirectory() as tempdir:
infile = os.path.join(testdir, 'blank.pdf') infile = os.path.join(testdir, 'blank.pdf')
outfile = os.path.join(tempdir, 'blank.csv') outfile = os.path.join(tempdir, 'blank.csv')
runner = CliRunner() runner = CliRunner()
result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, result = runner.invoke(cli, ['--format', 'csv', '--output', outfile,
'stream', infile]) 'stream', infile])
assert 'No tables found on page-1' in result.output assert 'No tables found on page-1' in result.output
result = runner.invoke(cli, ['--quiet', '--format', 'csv', result = runner.invoke(cli, ['--quiet', '--format', 'csv',
'--output', outfile, 'stream', infile]) '--output', outfile, 'stream', infile])
assert 'No tables found on page-1' not in result.output assert 'No tables found on page-1' not in result.output