Skip to content
This repository was archived by the owner on Nov 3, 2023. It is now read-only.

Print errors to stdout #210

Merged
merged 3 commits into from
Oct 25, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/pydocstyle/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def run_pydocstyle(use_pep257=False):

count = 0
for error in errors:
sys.stderr.write('%s\n' % error)
sys.stdout.write('%s\n' % error)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that errors are prints to stdout, notice that the test for --count in test_integration.py needs to be made more robust.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How would you suggest I go about doing this?

Copy link
Member

@Nurdok Nurdok Oct 23, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of checking that the count number is somewhere in the output, check that it's the last line of stdout.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Nurdok done.

count += 1
if count == 0:
exit_code = ReturnCode.no_violations_found
Expand Down
4 changes: 2 additions & 2 deletions src/pydocstyle/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -380,8 +380,8 @@ def parse_all(self):
if self.current.value not in '([':
raise AllError('Could not evaluate contents of __all__. ')
if self.current.value == '[':
sys.stderr.write(
"{} WARNING: __all__ is defined as a list, this means "
sys.stdout.write(
"{0} WARNING: __all__ is defined as a list, this means "
"pydocstyle cannot reliably detect contents of the __all__ "
"variable, because it can be mutated. Change __all__ to be "
"an (immutable) tuple, to remove this warning. Note, "
Expand Down
139 changes: 71 additions & 68 deletions src/tests/test_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,22 +216,22 @@ def foo():
"""))

env.write_config(ignore='D100')
_, err, code = env.invoke()
out, err, code = env.invoke()
assert code == 1
assert 'D100' not in err
assert 'D103' in err
assert 'D100' not in out
assert 'D103' in out

env.write_config(ignore='')
_, err, code = env.invoke()
out, err, code = env.invoke()
assert code == 1
assert 'D100' in err
assert 'D103' in err
assert 'D100' in out
assert 'D103' in out

env.write_config(ignore='D100,D103')
_, err, code = env.invoke()
out, err, code = env.invoke()
assert code == 0
assert 'D100' not in err
assert 'D103' not in err
assert 'D100' not in out
assert 'D103' not in out


def test_verbose(env):
Expand Down Expand Up @@ -259,6 +259,9 @@ def foo():
out, err, code = env.invoke(args='--count')
assert code == 1
assert '2' in out
# The error count should be in the last line of the output.
# -2 since there is a newline at the end of the output.
assert '2' == out.split('\n')[-2].strip()


def test_select_cli(env):
Expand All @@ -269,10 +272,10 @@ def foo():
pass
"""))

_, err, code = env.invoke(args="--select=D100")
out, err, code = env.invoke(args="--select=D100")
assert code == 1
assert 'D100' in err
assert 'D103' not in err
assert 'D100' in out
assert 'D103' not in out


def test_select_config(env):
Expand All @@ -284,10 +287,10 @@ def foo():
"""))

env.write_config(select="D100")
_, err, code = env.invoke()
out, err, code = env.invoke()
assert code == 1
assert 'D100' in err
assert 'D103' not in err
assert 'D100' in out
assert 'D103' not in out


def test_add_select_cli(env):
Expand All @@ -300,11 +303,11 @@ def foo():
"""))

env.write_config(select="D100")
_, err, code = env.invoke(args="--add-select=D101")
out, err, code = env.invoke(args="--add-select=D101")
assert code == 1
assert 'D100' in err
assert 'D101' in err
assert 'D103' not in err
assert 'D100' in out
assert 'D101' in out
assert 'D103' not in out


def test_add_ignore_cli(env):
Expand All @@ -317,11 +320,11 @@ def foo():
"""))

env.write_config(select="D100,D101")
_, err, code = env.invoke(args="--add-ignore=D101")
out, err, code = env.invoke(args="--add-ignore=D101")
assert code == 1
assert 'D100' in err
assert 'D101' not in err
assert 'D103' not in err
assert 'D100' in out
assert 'D101' not in out
assert 'D103' not in out


def test_conflicting_select_ignore_config(env):
Expand Down Expand Up @@ -368,21 +371,21 @@ def foo():
env.write_config(ignore='D100', verbose=True)
out, err, code = env.invoke()
assert code == 0
assert 'D301' not in err
assert 'D302' not in err
assert 'D301' not in out
assert 'D302' not in out


def test_missing_docstring_in_package(env):
with env.open('__init__.py', 'wt') as init:
pass # an empty package file
out, err, code = env.invoke()
assert code == 1
assert 'D100' not in err # shouldn't be treated as a module
assert 'D104' in err # missing docstring in package
assert 'D100' not in out # shouldn't be treated as a module
assert 'D104' in out # missing docstring in package


def test_illegal_convention(env):
out, err, code = env.invoke('--convention=illegal_conv')
_, err, code = env.invoke('--convention=illegal_conv')
assert code == 2, err
assert "Illegal convention 'illegal_conv'." in err
assert 'Possible conventions: pep257' in err
Expand Down Expand Up @@ -422,11 +425,11 @@ def foo():
"""))

env.write_config(select="")
_, err, code = env.invoke(args="--add-select=D100")
out, err, code = env.invoke(args="--add-select=D100")
assert code == 1
assert 'D100' in err
assert 'D101' not in err
assert 'D103' not in err
assert 'D100' in out
assert 'D101' not in out
assert 'D103' not in out


def test_pep257_convention(env):
Expand All @@ -442,13 +445,13 @@ def foo():
'''))

env.write_config(convention="pep257")
_, err, code = env.invoke()
out, err, code = env.invoke()
assert code == 1
assert 'D100' in err
assert 'D211' in err
assert 'D203' not in err
assert 'D212' not in err
assert 'D213' not in err
assert 'D100' in out
assert 'D211' in out
assert 'D203' not in out
assert 'D212' not in out
assert 'D213' not in out


def test_config_file_inheritance(env):
Expand Down Expand Up @@ -483,11 +486,11 @@ def bar():
pass
"""))

_, err, code = env.invoke()
out, err, code = env.invoke()

assert code == 1
assert 'D100' in err
assert 'D103' in err
assert 'D100' in out
assert 'D103' in out


def test_config_file_cumulative_add_ignores(env):
Expand Down Expand Up @@ -522,9 +525,9 @@ def foo():
with env.open(os.path.join('A', 'a.py'), 'wt') as test:
test.write(test_content)

_, err, code = env.invoke()
out, err, code = env.invoke()

err = parse_errors(err)
err = parse_errors(out)

assert code == 1
assert 'base.py' in err, err
Expand Down Expand Up @@ -565,9 +568,9 @@ def foo():
with env.open(os.path.join('A', 'a.py'), 'wt') as test:
test.write(test_content)

_, err, code = env.invoke()
out, err, code = env.invoke()

err = parse_errors(err)
err = parse_errors(out)

assert code == 1
assert 'base.py' in err, err
Expand Down Expand Up @@ -605,12 +608,12 @@ def test_config_file_convention_overrides_select(env):
with env.open(os.path.join('A', 'a.py'), 'wt') as test:
test.write(test_content)

_, err, code = env.invoke()
out, err, code = env.invoke()

assert code == 1
assert 'D100' in err, err
assert 'base.py' not in err, err
assert 'a.py' in err, err
assert 'D100' in out, out
assert 'base.py' not in out, out
assert 'a.py' in out, out


def test_cli_overrides_config_file(env):
Expand Down Expand Up @@ -642,13 +645,13 @@ def foo():
pass
"""))

_, err, code = env.invoke(args="--convention=pep257")
out, err, code = env.invoke(args="--convention=pep257")

assert code == 1
assert 'D100' in err, err
assert 'D103' not in err, err
assert 'base.py' in err, err
assert 'a.py' not in err, err
assert 'D100' in out, out
assert 'D103' not in out, out
assert 'base.py' in out, out
assert 'a.py' not in out, out


def test_cli_match_overrides_config_file(env):
Expand Down Expand Up @@ -681,13 +684,13 @@ def foo():
with env.open(os.path.join('A', 'a.py'), 'wt') as test:
test.write("")

_, err, code = env.invoke(args="--match=a.py --match-dir=A")
out, err, code = env.invoke(args="--match=a.py --match-dir=A")

assert code == 1
assert 'D100' in err, err
assert 'D103' not in err, err
assert 'base.py' not in err, err
assert 'a.py' in err, err
assert 'D100' in out, out
assert 'D103' not in out, out
assert 'base.py' not in out, out
assert 'a.py' in out, out


def test_config_file_convention_overrides_ignore(env):
Expand Down Expand Up @@ -722,13 +725,13 @@ def foo():
with env.open(os.path.join('A', 'a.py'), 'wt') as test:
test.write(test_content)

_, err, code = env.invoke()
out, err, code = env.invoke()

assert code == 1
assert 'D100' in err, err
assert 'D103' in err, err
assert 'base.py' not in err, err
assert 'a.py' in err, err
assert 'D100' in out, out
assert 'D103' in out, out
assert 'base.py' not in out, out
assert 'a.py' in out, out


def test_config_file_ignore_overrides_select(env):
Expand Down Expand Up @@ -764,9 +767,9 @@ def bar():
with env.open(os.path.join('A', 'a.py'), 'wt') as test:
test.write(test_content)

_, err, code = env.invoke()
out, err, code = env.invoke()

err = parse_errors(err)
err = parse_errors(out)

assert code == 1
assert 'base.py' in err, err
Expand Down Expand Up @@ -820,9 +823,9 @@ def bar():
with env.open(os.path.join('B', 'b.py'), 'wt') as test:
test.write(test_content)

_, err, code = env.invoke()
out, err, code = env.invoke()

err = parse_errors(err)
err = parse_errors(out)

assert code == 1
assert 'base.py' in err, err
Expand Down