Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pipfile parsing not fully TOML compliant #1519

Closed
AkiraSama opened this issue Mar 1, 2018 · 3 comments
Closed

Pipfile parsing not fully TOML compliant #1519

AkiraSama opened this issue Mar 1, 2018 · 3 comments
Labels
Status: Won't Fix This issue will not be fixed at this time.

Comments

@AkiraSama
Copy link

AkiraSama commented Mar 1, 2018

This exact concern appears to have been raised and dismissed in issue #613. At some point pipenv dropped proper support for quoted keys. If this is not the case then I'm hopeful I can be pointed to the specification used in order to better construct my Pipfiles.

The paragraphs pertaining to quoted and dotted keys in the Keys section of this README are relevant to this issue: https://github.com/toml-lang/toml#keys

Describe your environment
  1. Debian 10
  2. Python version: 3.6.4
  3. Pipenv version: 10.1.2
Expected result

This Pipfile...

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

["requires"]
python_version = "3.6"

[packages]
motor = "*"

    [packages."discord.py"]
    git = "https://github.com/Rapptz/discord.py.git"
    ref = "rewrite"
    editable = true
    extras = ["voice"]

Should render the following dictionary... (parsed by toml and prettyprinted)

{'packages': {'discord.py': {'editable': True,
                             'extras': ['voice'],
                             'git': 'https://github.com/Rapptz/discord.py.git',
                             'ref': 'rewrite'},
              'motor': '*'},
 'requires': {'python_version': '3.6'},
 'source': [{'name': 'pypi',
             'url': 'https://pypi.python.org/simple',
             'verify_ssl': True}]}
Actual result
Traceback (most recent call last):
  File "/home/akirasama/.local/bin/pipenv", line 11, in <module>
    sys.exit(cli())
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/cli.py", line 433, in sync
    clear=clear, unused=unused, sequential=sequential
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/core.py", line 2389, in do_sync
    ensure_project(three=three, python=python, validate=False)
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/core.py", line 603, in ensure_project
    ensure_virtualenv(three=three, python=python, site_packages=site_packages)
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/core.py", line 548, in ensure_virtualenv
    python = ensure_python(three=three, python=python)
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/core.py", line 424, in ensure_python
    python = project.required_python_version
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/project.py", line 110, in required_python_version
    required = self.parsed_pipfile.get('requires', {}).get('python_full_version')
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/project.py", line 271, in parsed_pipfile
    return contoml.loads(toml.dumps(data, preserve=True))
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/patched/contoml/__init__.py", line 15, in loads
    elements = parse_tokens(tokens)
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/patched/prettytoml/parser/__init__.py", line 17, in parse_tokens
    return _parse_token_stream(TokenStream(tokens))
  File "/home/akirasama/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/patched/prettytoml/parser/__init__.py", line 32, in _parse_token_stream
    raise ParsingError('Failed to parse line {}'.format(pending.head.row))
prettytoml.parser.errors.ParsingError: Failed to parse line 11
Steps to replicate

$ pipenv lock

@kennethreitz kennethreitz added the Status: Won't Fix This issue will not be fixed at this time. label Mar 1, 2018
@AkiraSama
Copy link
Author

@kennethreitz

Would you be able to explain why this portion of the TOML specification won't be supported? I'd really rather not have to resort to inline tables for all of my packages.

Would it be better that I make an issue on the pipfile repository regarding its adherence to the TOML specification?

@kennethreitz
Copy link
Contributor

we'll fix it, it's just low priority for us right now

@AkiraSama
Copy link
Author

I see. The wontfix label had me confused. Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: Won't Fix This issue will not be fixed at this time.
Projects
None yet
Development

No branches or pull requests

2 participants