Skip to content

Commit

Permalink
Bugfix: Empty and Any markers saved to lockfile (python-poetry#1650)
Browse files Browse the repository at this point in the history
* do not write empty or any markers

* Update poetry/version/markers.py

Co-Authored-By: Sébastien Eustace <sebastien.eustace@gmail.com>

* Update test_markers.py
  • Loading branch information
JBKahn authored and shenek committed Dec 31, 2019
1 parent 6504b5f commit fb505cc
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
10 changes: 9 additions & 1 deletion poetry/version/markers.py
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,15 @@ def __hash__(self):
return h

def __str__(self):
return " or ".join(str(m) for m in self._markers)
return " or ".join(
str(m) for m in self._markers if not m.is_any() and not m.is_empty()
)

def is_any(self):
return any(m.is_any() for m in self._markers)

def is_empty(self):
return all(m.is_empty() for m in self._markers)


def parse_marker(marker):
Expand Down
40 changes: 40 additions & 0 deletions tests/version/test_markers.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,46 @@ def test_marker_union_union_duplicates():
)


def test_marker_union_all_any():
union = MarkerUnion(parse_marker(""), parse_marker(""))

assert union.is_any()


def test_marker_union_not_all_any():
union = MarkerUnion(parse_marker(""), parse_marker(""), parse_marker("<empty>"))

assert union.is_any()


def test_marker_union_all_empty():
union = MarkerUnion(parse_marker("<empty>"), parse_marker("<empty>"))

assert union.is_empty()


def test_marker_union_not_all_empty():
union = MarkerUnion(
parse_marker("<empty>"), parse_marker("<empty>"), parse_marker("")
)

assert not union.is_empty()


def test_marker_str_conversion_skips_empty_and_any():
union = MarkerUnion(
parse_marker("<empty>"),
parse_marker(
'sys_platform == "darwin" or python_version <= "3.6" or os_name == "Windows"'
),
parse_marker(""),
)

assert str(union) == (
'sys_platform == "darwin" or python_version <= "3.6" or os_name == "Windows"'
)


def test_intersect_compacts_constraints():
m = parse_marker('python_version < "4.0"')

Expand Down

0 comments on commit fb505cc

Please sign in to comment.