Skip to content

Commit

Permalink
Merge branch 'master' into verbose-run
Browse files Browse the repository at this point in the history
  • Loading branch information
techalchemy authored Dec 8, 2018
2 parents 5c8ecfc + 7a2bdfe commit 670b010
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 31 deletions.
1 change: 1 addition & 0 deletions news/3351.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix a bug that ``--site-packages`` flag is not recognized.
1 change: 1 addition & 0 deletions news/3362.trivial.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The inline tables won't be rewritten now.
3 changes: 1 addition & 2 deletions pipenv/cli/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ def cli(
python=False,
help=False,
py=False,
site_packages=False,
envs=False,
man=False,
completion=False,
Expand Down Expand Up @@ -198,7 +197,7 @@ def cli(
)
ctx.abort()
# --two / --three was passed…
if (state.python or state.three is not None) or site_packages:
if (state.python or state.three is not None) or state.site_packages:
ensure_project(
three=state.three,
python=state.python,
Expand Down
35 changes: 24 additions & 11 deletions pipenv/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,19 +83,32 @@ def cleanup_toml(tml):

def convert_toml_outline_tables(parsed):
"""Converts all outline tables to inline tables."""
if isinstance(parsed, tomlkit.container.Container):
empty_inline_table = tomlkit.inline_table
else:
empty_inline_table = toml.TomlDecoder().get_empty_inline_table
def convert_tomlkit_table(section):
for key, value in section._body:
if not key:
continue
if hasattr(value, "keys") and not isinstance(value, tomlkit.items.InlineTable):
table = tomlkit.inline_table()
table.update(value.value)
section[key.key] = table

def convert_toml_table(section):
for package, value in section.items():
if hasattr(value, "keys") and not isinstance(value, toml.decoder.InlineTableDict):
table = toml.TomlDecoder().get_empty_inline_table()
table.update(value)
section[package] = table

is_tomlkit_parsed = isinstance(parsed, tomlkit.container.Container)
for section in ("packages", "dev-packages"):
table_data = parsed.get(section, {})
for package, value in table_data.items():
if hasattr(value, "keys") and not isinstance(
value, (tomlkit.items.InlineTable, toml.decoder.InlineTableDict)
):
table = empty_inline_table()
table.update(value)
table_data[package] = table
if not table_data:
continue
if is_tomlkit_parsed:
convert_tomlkit_table(table_data)
else:
convert_toml_table(table_data)

return parsed


Expand Down
14 changes: 14 additions & 0 deletions tests/integration/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,20 @@ def test_pipenv_py(PipenvInstance):
assert os.path.basename(python).startswith('python')


@pytest.mark.cli
def test_pipenv_site_packages(PipenvInstance):
with PipenvInstance() as p:
c = p.pipenv('--python python --site-packages')
assert c.return_code == 0
assert 'Making site-packages available' in c.err

# no-global-site-packages.txt under stdlib dir should not exist.
c = p.pipenv('run python -c "import sysconfig; print(sysconfig.get_path(\'stdlib\'))"')
assert c.return_code == 0
stdlib_path = c.out.strip()
assert not os.path.isfile(os.path.join(stdlib_path, 'no-global-site-packages.txt'))


@pytest.mark.cli
def test_pipenv_support(PipenvInstance):
with PipenvInstance() as p:
Expand Down
22 changes: 22 additions & 0 deletions tests/integration/test_install_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -446,3 +446,25 @@ def test_install_package_with_dots(PipenvInstance, pypi):
c = p.pipenv("install backports.html")
assert c.ok
assert "backports.html" in p.pipfile["packages"]


@pytest.mark.install
def test_rewrite_outline_table(PipenvInstance, pypi):
with PipenvInstance(pypi=pypi, chdir=True) as p:
with open(p.pipfile_path, 'w') as f:
contents = """
[packages]
six = {version = "*", editable = true}
[packages.requests]
version = "*"
""".strip()
f.write(contents)
c = p.pipenv("install -e click")
assert c.return_code == 0
with open(p.pipfile_path) as f:
contents = f.read()
assert "[packages.requests]" not in contents
assert 'six = {version = "*", editable = true}' in contents
assert 'requests = {version = "*"}' in contents
assert 'click = {' in contents
19 changes: 1 addition & 18 deletions tests/integration/test_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,24 +148,6 @@ def test_many_indexes(PipenvInstance, pypi):
assert c.return_code == 0


@pytest.mark.install
@pytest.mark.project
def test_rewrite_outline_table(PipenvInstance, pypi):
with PipenvInstance(pypi=pypi, chdir=True) as p:
with open(p.pipfile_path, 'w') as f:
contents = """
[packages.requests]
version = "*"
""".strip()
f.write(contents)
c = p.pipenv('install click')
assert c.return_code == 0
with open(p.pipfile_path) as f:
contents = f.read()
assert "[packages.requests]" not in contents
assert 'requests = {version = "*"}' in contents


@pytest.mark.install
@pytest.mark.project
def test_include_editable_packages(PipenvInstance, pypi, testsroot, pathlib_tmpdir):
Expand All @@ -185,6 +167,7 @@ def test_include_editable_packages(PipenvInstance, pypi, testsroot, pathlib_tmpd


@pytest.mark.project
@pytest.mark.virtualenv
def test_run_in_virtualenv(PipenvInstance, pypi, virtualenv):
with PipenvInstance(chdir=True, pypi=pypi) as p:
os.environ.pop("PIPENV_IGNORE_VIRTUALENVS", None)
Expand Down

0 comments on commit 670b010

Please sign in to comment.