signalpillar/tox-battery

Parser fails if `--find-links` is used in requirements.txt

underyx opened this issue · 1 comments

The parser fails for me on this line:

--find-links https://github.com/celery/py-amqp/tarball/4ee0dcf3ab770fdfe165481c05db914bb0087cd8#egg=amqp-2.0.0a1

The traceback is:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 90, in __init__
    req = REQUIREMENT.parseString(requirement_string)
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 1137, in parseString
    raise exc
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 1127, in parseString
    loc, tokens = self._parse( instring, 0 )
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 1001, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 2412, in parseImpl
    loc, exprtokens = e._parse( instring, loc, doActions )
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 1001, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 2669, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 1001, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 2395, in parseImpl
    loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 1005, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py", line 1785, in parseImpl
    raise ParseException(instring, loc, self.errmsg, self)
pkg_resources._vendor.pyparsing.ParseException: Expected W:(abcd...) (at char 0), (line:1, col:1)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2788, in __init__
    super(Requirement, self).__init__(requirement_string)
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 94, in __init__
    requirement_string[e.loc:e.loc + 8]))
pkg_resources.extern.packaging.requirements.InvalidRequirement: Invalid requirement, parse error at "'--find-l'"

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/tox", line 11, in <module>
    sys.exit(cmdline())
  File "/usr/local/lib/python3.5/site-packages/tox/session.py", line 38, in main
    config = prepare(args)
  File "/usr/local/lib/python3.5/site-packages/tox/session.py", line 26, in prepare
    config = parseconfig(args)
  File "/usr/local/lib/python3.5/site-packages/tox/config.py", line 236, in parseconfig
    pm.hook.tox_configure(config=config)
  File "/usr/local/lib/python3.5/site-packages/pluggy.py", line 724, in __call__
    return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
  File "/usr/local/lib/python3.5/site-packages/pluggy.py", line 338, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/usr/local/lib/python3.5/site-packages/pluggy.py", line 333, in <lambda>
    _MultiCall(methods, kwargs, hook.spec_opts).execute()
  File "/usr/local/lib/python3.5/site-packages/pluggy.py", line 596, in execute
    res = hook_impl.function(*args)
  File "/usr/local/lib/python3.5/site-packages/toxbat/requirements.py", line 36, in tox_configure
    return _ensure_envs_recreated_on_requirements_update(config)
  File "/usr/local/lib/python3.5/site-packages/toxbat/requirements.py", line 46, in _ensure_envs_recreated_on_requirements_update
    requires_recreation = are_requirements_changed(env)
  File "/usr/local/lib/python3.5/site-packages/toxbat/requirements.py", line 69, in are_requirements_changed
    for reqfile in requirement_files
  File "/usr/local/lib/python3.5/site-packages/toxbat/requirements.py", line 70, in <genexpr>
    if reqfile and os.path.isfile(reqfile)
  File "/usr/local/lib/python3.5/site-packages/toxbat/requirements.py", line 89, in is_changed
    changed = not are_equal_requirement_files(fpath, prev_version_fpath)
  File "/usr/local/lib/python3.5/site-packages/toxbat/requirements.py", line 101, in are_equal_requirement_files
    reqs1 = sorted(parse_requirements(content_of(fpath1)), key=hash_cmp)
  File "/usr/local/lib/python3.5/site-packages/toxbat/requirements.py", line 111, in parse_requirements
    return list(pkg_resources.parse_requirements(file_content))
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2781, in parse_requirements
    yield Requirement(line)
  File "/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2790, in __init__
    raise RequirementParseError(str(e))
pkg_resources.RequirementParseError: Invalid requirement, parse error at "'--find-l'"

Hi @underyx, I am sorry for this late response. I am not sure whether it is still relevant for you but there is new minor version 0.2 in PYPI.

The fix is very simple #4

Thank you for the reported issue.