Skip to content

Commit

Permalink
Try to address these sproadic test failures without skipping the test.
Browse files Browse the repository at this point in the history
  • Loading branch information
matteius authored and oz123 committed Aug 29, 2022
1 parent be85c33 commit bac7b68
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 24 deletions.
1 change: 0 additions & 1 deletion pipenv/cli/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -756,7 +756,6 @@ def requirements(state, dev=False, dev_only=False, hash=False, exclude_markers=F
pip_deps = convert_deps_to_pip(
deps,
project=None,
r=False,
include_index=False,
include_hashes=hash,
include_markers=not exclude_markers,
Expand Down
2 changes: 1 addition & 1 deletion pipenv/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -2048,7 +2048,7 @@ def do_install(
if not is_star(section[package__name]) and is_star(package__val):
# Support for VCS dependencies.
package_args[i] = convert_deps_to_pip(
{package__name: section[package__name]}, project=project, r=False
{package__name: section[package__name]}, project=project
)[0]
except KeyError:
pass
Expand Down
14 changes: 2 additions & 12 deletions pipenv/utils/dependencies.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import os
from contextlib import contextmanager
from tempfile import NamedTemporaryFile
from typing import Mapping, Sequence

from pipenv.patched.pip._vendor.packaging.markers import Marker
from pipenv.patched.pip._vendor.packaging.version import parse
from pipenv.vendor.requirementslib.models.requirements import Requirement

from .constants import SCHEME_LIST, VCS_LIST
from .shell import temp_path
Expand Down Expand Up @@ -245,14 +245,11 @@ def is_pinned_requirement(ireq):
def convert_deps_to_pip(
deps,
project=None,
r=True,
include_index=True,
include_hashes=True,
include_markers=True,
):
""" "Converts a Pipfile-formatted dependency to a pip-formatted one."""
from pipenv.vendor.requirementslib.models.requirements import Requirement

dependencies = []
for dep_name, dep in deps.items():
if project:
Expand All @@ -268,14 +265,7 @@ def convert_deps_to_pip(
include_markers=include_markers,
).strip()
dependencies.append(req)
if not r:
return dependencies

# Write requirements.txt to tmp directory.
f = NamedTemporaryFile(suffix="-requirements.txt", delete=False)
f.write("\n".join(dependencies).encode("utf-8"))
f.close()
return f.name
return dependencies


def get_constraints_from_deps(deps):
Expand Down
2 changes: 1 addition & 1 deletion pipenv/utils/resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -1027,7 +1027,7 @@ def venv_resolve_deps(
# dependency resolution on them, so we are including this step inside the
# spinner context manager for the UX improvement
sp.write(decode_for_output("Building requirements..."))
deps = convert_deps_to_pip(deps, project, r=False, include_index=True)
deps = convert_deps_to_pip(deps, project, include_index=True)
constraints = set(deps)
os.environ["PIPENV_PACKAGES"] = str("\n".join(constraints))
sp.write(decode_for_output("Resolving dependencies..."))
Expand Down
42 changes: 33 additions & 9 deletions tests/unit/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@

# Pipfile format <-> requirements.txt format.
DEP_PIP_PAIRS = [
({"requests": "*"}, "requests"),
({"requests": {"extras": ["socks"], "version": "*"}}, "requests[socks]"),
({"django": ">1.10"}, "django>1.10"),
({"Django": ">1.10"}, "Django>1.10"),
({"requests": {"extras": ["socks"], "version": ">1.10"}}, "requests[socks]>1.10"),
Expand Down Expand Up @@ -89,16 +87,32 @@ def mock_unpack(link, source_dir, download_dir, only_download=False, session=Non
def test_convert_deps_to_pip(deps, expected):
if expected.startswith("Django"):
expected = expected.lower()
assert dependencies.convert_deps_to_pip(deps, r=False) == [expected]
assert dependencies.convert_deps_to_pip(deps) == [expected]


@flaky
@pytest.mark.utils
@pytest.mark.needs_internet
def test_convert_deps_to_pip_flaky():
deps = {"requests": "*"}
expected = "requests"
assert dependencies.convert_deps_to_pip(deps) == [expected]


@flaky
@pytest.mark.utils
@pytest.mark.needs_internet
def test_convert_deps_to_pip_flaky2():
deps = {"requests": {"extras": ["socks"], "version": "*"}}
expected = "requests[socks]"
assert dependencies.convert_deps_to_pip(deps) == [expected]


@flaky
@pytest.mark.utils
@pytest.mark.parametrize(
"deps, expected",
[
# This one should be collapsed and treated as {'requests': '*'}.
({"requests": {}}, "requests"),
# Hash value should be passed into the result.
(
{
Expand Down Expand Up @@ -132,24 +146,34 @@ def test_convert_deps_to_pip(deps, expected):
],
)
def test_convert_deps_to_pip_one_way(deps, expected):
assert dependencies.convert_deps_to_pip(deps, r=False) == [expected.lower()]
assert dependencies.convert_deps_to_pip(deps) == [expected.lower()]


@flaky
@pytest.mark.utils
def test_convert_deps_to_pip_one_way_flaky():
deps = {"requests": dict()}
expected = "requests"
assert dependencies.convert_deps_to_pip(deps) == [expected.lower()]


@pytest.mark.utils
@pytest.mark.parametrize(
"deps, expected",
[
({"requests": {}}, ["requests"]),
({"FooProject": {"path": ".", "editable" : "true"}}, []),
({"FooProject": {"path": ".", "editable": "true"}}, []),
({"FooProject": {"version": "==1.2"}}, ["fooproject==1.2"]),
({"requests": {"extras": ["security"]}}, []),
({"requests": {"extras": []}}, ["requests"]),
({"extras" : {}}, ["extras"]),
({"uvicorn[standard]" : {}}, [])
({"extras": {}}, ["extras"]),
({"uvicorn[standard]": {}}, [])
],
)
def test_get_constraints_from_deps(deps, expected):
assert dependencies.get_constraints_from_deps(deps) == expected


@pytest.mark.parametrize("line,result", [
("-i https://example.com/simple/", ("https://example.com/simple/", None, None, [])),
("--extra-index-url=https://example.com/simple/", (None, "https://example.com/simple/", None, [])),
Expand Down

0 comments on commit bac7b68

Please sign in to comment.