Merge pull request #205 from dlgallagher/fix_requirements_txt_fixer_on_empty_requirements_files

Fix NoneTypeError when requirements file is empty
This commit is contained in:
Anthony Sottile 2017-06-24 00:35:39 -04:00 committed by GitHub
commit d419bef35c
2 changed files with 13 additions and 8 deletions

View file

@ -30,21 +30,25 @@ class Requirement(object):
def fix_requirements(f):
requirements = []
before = []
before = list(f)
after = []
for line in f:
before.append(line)
before_string = b''.join(before)
# If the most recent requirement object has a value, then it's time to
# start building the next requirement object.
# If the file is empty (i.e. only whitespace/newlines) exit early
if before_string.strip() == b'':
return 0
for line in before:
# If the most recent requirement object has a value, then it's
# time to start building the next requirement object.
if not len(requirements) or requirements[-1].value is not None:
requirements.append(Requirement())
requirement = requirements[-1]
# If we see a newline before any requirements, then this is a top of
# file comment.
# If we see a newline before any requirements, then this is a
# top of file comment.
if len(requirements) == 1 and line.strip() == b'':
if len(requirement.comments) and requirement.comments[0].startswith(b'#'):
requirement.value = b'\n'
@ -60,7 +64,6 @@ def fix_requirements(f):
after.append(comment)
after.append(requirement.value)
before_string = b''.join(before)
after_string = b''.join(after)
if before_string == after_string:

View file

@ -5,6 +5,8 @@ from pre_commit_hooks.requirements_txt_fixer import Requirement
# Input, expected return value, expected output
TESTS = (
(b'', 0, b''),
(b'\n', 0, b'\n'),
(b'foo\nbar\n', 1, b'bar\nfoo\n'),
(b'bar\nfoo\n', 0, b'bar\nfoo\n'),
(b'#comment1\nfoo\n#comment2\nbar\n', 1, b'#comment2\nbar\n#comment1\nfoo\n'),