Merge pull request #5 from camelot-dev/fix-cli-group-name

[MRG] No need to monkey-patch Click.HelpFormatter
fix-25
Dimiter Naydenov 2019-07-04 18:26:35 +03:00 committed by GitHub
commit 0f8cda4793
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 110 additions and 63 deletions

3
.gitignore vendored
View File

@ -12,5 +12,8 @@ coverage.xml
.pytest_cache/ .pytest_cache/
_build/ _build/
.venv/
htmlcov/
# vscode # vscode
.vscode .vscode

View File

@ -2,21 +2,11 @@
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
from .plotting import PlotMethods from .plotting import PlotMethods
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

@ -29,7 +29,7 @@ class Config(object):
pass_config = click.make_pass_decorator(Config) pass_config = click.make_pass_decorator(Config)
@click.group() @click.group(name="camelot")
@click.version_option(version=__version__) @click.version_option(version=__version__)
@click.option("-q", "--quiet", is_flag=False, help="Suppress logs and warnings.") @click.option("-q", "--quiet", is_flag=False, help="Suppress logs and warnings.")
@click.option( @click.option(

View File

@ -9,109 +9,163 @@ 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_help_output():
runner = CliRunner()
prog_name = runner.get_default_prog_name(cli)
result = runner.invoke(cli, ["--help"])
output = result.output
assert prog_name == "camelot"
assert result.output.startswith("Usage: %(prog_name)s [OPTIONS] COMMAND" % locals())
assert all(
v in result.output
for v in ["Options:", "--version", "--help", "Commands:", "lattice", "stream"]
)
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(
'lattice', infile]) cli, ["--format", "csv", "--output", outfile, "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(
'stream', infile]) cli, ["--format", "csv", "--output", outfile, "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_password(): def test_cli_password():
with TemporaryDirectory() as tempdir: with TemporaryDirectory() as tempdir:
infile = os.path.join(testdir, 'health_protected.pdf') infile = os.path.join(testdir, "health_protected.pdf")
outfile = os.path.join(tempdir, 'health_protected.csv') outfile = os.path.join(tempdir, "health_protected.csv")
runner = CliRunner() runner = CliRunner()
result = runner.invoke(cli, ['--password', 'userpass', result = runner.invoke(
'--format', 'csv', '--output', outfile, cli,
'stream', infile]) [
"--password",
"userpass",
"--format",
"csv",
"--output",
outfile,
"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"
output_error = 'file has not been decrypted' output_error = "file has not been decrypted"
# no password # no password
result = runner.invoke(cli, ['--format', 'csv', '--output', outfile, result = runner.invoke(
'stream', infile]) cli, ["--format", "csv", "--output", outfile, "stream", infile]
)
assert output_error in str(result.exception) assert output_error in str(result.exception)
# bad password # bad password
result = runner.invoke(cli, ['--password', 'wrongpass', result = runner.invoke(
'--format', 'csv', '--output', outfile, cli,
'stream', infile]) [
"--password",
"wrongpass",
"--format",
"csv",
"--output",
outfile,
"stream",
infile,
],
)
assert output_error in str(result.exception) assert output_error in str(result.exception)
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(
'stream', infile]) cli,
["--format", "json", "--output", outfile.format("json"), "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(
'stream', infile]) cli,
["--format", "excel", "--output", outfile.format("xlsx"), "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(
'stream', infile]) cli,
["--format", "html", "--output", outfile.format("html"), "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(
'stream', infile]) cli,
[
"--zip",
"--format",
"csv",
"--output",
outfile.format("csv"),
"stream",
infile,
],
)
assert result.exit_code == 0 assert result.exit_code == 0
def test_cli_quiet(): def test_cli_quiet():
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(
'stream', infile]) cli, ["--format", "csv", "--output", outfile, "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(
'--output', outfile, 'stream', infile]) cli, ["--quiet", "--format", "csv", "--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