Skip to content

Commit dfd1b39

Browse files
dimblebyneersighted
authored andcommitted
Find another marker simplification at intersection
1 parent 31d518d commit dfd1b39

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/poetry/core/version/markers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,14 @@ def of(cls, *markers: BaseMarker) -> BaseMarker:
433433
intersected = True
434434
elif constraint_intersection.is_empty():
435435
return EmptyMarker()
436+
elif (
437+
isinstance(constraint_intersection, VersionConstraint)
438+
and constraint_intersection.is_simple()
439+
):
440+
new_markers[i] = SingleMarker(
441+
mark.name, constraint_intersection
442+
)
443+
intersected = True
436444
elif isinstance(mark, MarkerUnion):
437445
intersection = mark.intersect(marker)
438446
if isinstance(intersection, SingleMarker):

tests/version/test_markers.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,3 +1176,16 @@ def test_union_should_drop_markers_if_their_complement_is_present(
11761176
)
11771177
def test_dnf(scheme: str, marker: BaseMarker, expected: BaseMarker) -> None:
11781178
assert dnf(marker) == expected
1179+
1180+
1181+
def test_single_markers_are_found_in_complex_intersection() -> None:
1182+
m1 = parse_marker('implementation_name != "pypy" and python_version <= "3.6"')
1183+
m2 = parse_marker(
1184+
'python_version >= "3.6" and python_version < "4.0" and implementation_name =='
1185+
' "cpython"'
1186+
)
1187+
intersection = m1.intersect(m2)
1188+
assert (
1189+
str(intersection)
1190+
== 'implementation_name == "cpython" and python_version == "3.6"'
1191+
)

0 commit comments

Comments
 (0)