def test_single_marker_union_with_multi() -> None: m = parse_marker('sys_platform == "darwin"') union = m.union( parse_marker( 'implementation_name == "cpython" and python_version >= "3.6"')) assert (str(union) == 'implementation_name == "cpython" and python_version >= "3.6" or' ' sys_platform == "darwin"')
def test_multi_marker_union_with_union(): m = parse_marker( 'sys_platform == "darwin" and implementation_name == "cpython"') intersection = m.union( parse_marker('python_version >= "3.6" or os_name == "Windows"')) assert str(intersection) == ( 'python_version >= "3.6" or os_name == "Windows"' ' or sys_platform == "darwin" and implementation_name == "cpython"')
def test_single_marker_intersect_with_multi() -> None: m = parse_marker('sys_platform == "darwin"') intersection = m.intersect( parse_marker( 'implementation_name == "cpython" and python_version >= "3.6"')) assert (str(intersection) == 'implementation_name == "cpython" and python_version >= "3.6" and' ' sys_platform == "darwin"')
def test_marker_union_union_with_union(): m = parse_marker('sys_platform == "darwin" or python_version < "3.4"') union = m.union( parse_marker( 'implementation_name == "cpython" or os_name == "Windows"')) assert str(union) == ( 'sys_platform == "darwin" or python_version < "3.4" ' 'or implementation_name == "cpython" or os_name == "Windows"')
def test_multi_marker_union_multi() -> None: m = parse_marker( 'sys_platform == "darwin" and implementation_name == "cpython"') union = m.union( parse_marker('python_version >= "3.6" and os_name == "Windows"')) assert (str(union) == 'sys_platform == "darwin" and implementation_name == "cpython" ' 'or python_version >= "3.6" and os_name == "Windows"')
def test_multi_marker(): m = parse_marker( 'sys_platform == "darwin" and implementation_name == "cpython"') assert isinstance(m, MultiMarker) assert m.markers == [ parse_marker('sys_platform == "darwin"'), parse_marker('implementation_name == "cpython"'), ]
def test_multi_marker_intersect_multi(): m = parse_marker( 'sys_platform == "darwin" and implementation_name == "cpython"') intersection = m.intersect( parse_marker('python_version >= "3.6" and os_name == "Windows"')) assert str(intersection) == ( 'sys_platform == "darwin" and implementation_name == "cpython" ' 'and python_version >= "3.6" and os_name == "Windows"')
def test_marker_union(): m = parse_marker( 'sys_platform == "darwin" or implementation_name == "cpython"') assert isinstance(m, MarkerUnion) assert m.markers == [ parse_marker('sys_platform == "darwin"'), parse_marker('implementation_name == "cpython"'), ]
def test_multi_marker_intersect_with_multi_union_leads_to_empty_in_one_step( ) -> None: # empty marker in one step # py == 2 and (py < 2 or py >= 3) -> empty m = parse_marker('sys_platform == "darwin" and python_version == "2"') m2 = parse_marker( 'sys_platform == "darwin" and (python_version < "2" or python_version >= "3")' ) assert m.intersect(m2).is_empty() assert m2.intersect(m).is_empty()
def test_multi_marker_is_empty_is_contradictory(): m = parse_marker( 'sys_platform == "linux" and python_version >= "3.5" and python_version < "2.8"' ) assert m.is_empty() m = parse_marker('sys_platform == "linux" and sys_platform == "win32"') assert m.is_empty()
def test_multi_marker_intersect_multi_with_overlapping_constraints(): m = parse_marker('sys_platform == "darwin" and python_version < "3.6"') intersection = m.intersect( parse_marker( 'python_version <= "3.4" and os_name == "Windows" and sys_platform == "darwin"' )) assert str(intersection) == ( 'sys_platform == "darwin" and python_version <= "3.4" and os_name == "Windows"' )
def test_marker_union_intersect_marker_union_drops_unnecessary_markers(): m = parse_marker('python_version >= "2.7" and python_version < "2.8" ' 'or python_version >= "3.4" and python_version < "4.0"') m2 = parse_marker('python_version >= "2.7" and python_version < "2.8" ' 'or python_version >= "3.4" and python_version < "4.0"') intersection = m.intersect(m2) expected = ('python_version >= "2.7" and python_version < "2.8" ' 'or python_version >= "3.4" and python_version < "4.0"') assert expected == str(intersection)
def test_marker_union_intersect_multi_marker(): m = parse_marker('sys_platform == "darwin" or python_version < "3.4"') intersection = m.intersect( parse_marker( 'implementation_name == "cpython" and os_name == "Windows"')) assert str(intersection) == ( 'implementation_name == "cpython" and os_name == "Windows" and sys_platform == "darwin" ' 'or implementation_name == "cpython" and os_name == "Windows" and python_version < "3.4"' )
def test_marker_union_intersect_marker_union() -> None: m = parse_marker('sys_platform == "darwin" or python_version < "3.4"') intersection = m.intersect( parse_marker( 'implementation_name == "cpython" or os_name == "Windows"')) assert (str(intersection) == 'sys_platform == "darwin" and implementation_name == "cpython" ' 'or sys_platform == "darwin" and os_name == "Windows" or ' 'python_version < "3.4" and implementation_name == "cpython" or ' 'python_version < "3.4" and os_name == "Windows"')
def test_single_marker_union_with_multi_union_is_union_of_single_markers( ) -> None: m = parse_marker('python_version >= "3.6"') union = m.union( parse_marker( 'python_version < "3.6" and sys_platform == "win32" or python_version <' ' "3.6" and sys_platform == "linux"')) assert ( str(union) == 'sys_platform == "win32" or sys_platform == "linux" or python_version >=' ' "3.6"')
def test_multi_marker_removes_duplicates(): m = parse_marker('sys_platform == "win32" and sys_platform == "win32"') assert 'sys_platform == "win32"' == str(m) m = parse_marker( 'sys_platform == "darwin" and implementation_name == "cpython" ' 'and sys_platform == "darwin" and implementation_name == "cpython"') assert 'sys_platform == "darwin" and implementation_name == "cpython"' == str( m)
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_marker_union_intersect_single_with_overlapping_constraints() -> None: m = parse_marker('sys_platform == "darwin" or python_version < "3.4"') intersection = m.intersect(parse_marker('python_version <= "3.6"')) assert ( str(intersection) == 'sys_platform == "darwin" and python_version <= "3.6" or python_version <' ' "3.4"') m = parse_marker('sys_platform == "darwin" or python_version < "3.4"') intersection = m.intersect(parse_marker('sys_platform == "darwin"')) assert str(intersection) == 'sys_platform == "darwin"'
def test_single_marker_union(): m = parse_marker('sys_platform == "darwin"') intersection = m.union(parse_marker('implementation_name == "cpython"')) assert (str(intersection) == 'sys_platform == "darwin" or implementation_name == "cpython"') m = parse_marker('python_version >= "3.4"') intersection = m.union(parse_marker('python_version < "3.6"')) assert str( intersection) == 'python_version >= "3.4" or python_version < "3.6"'
def test_exclude(marker, excluded, expected): m = parse_marker(marker) if expected == "*": assert m.exclude(excluded).is_any() else: assert expected == str(m.exclude(excluded))
def test_exclude(marker: str, excluded: str, expected: str) -> None: m = parse_marker(marker) if expected == "*": assert m.exclude(excluded).is_any() else: assert str(m.exclude(excluded)) == expected
def test_marker_union_deduplicate(): m = parse_marker( 'sys_platform == "darwin" or implementation_name == "cpython" or sys_platform == "darwin"' ) assert str( m) == 'sys_platform == "darwin" or implementation_name == "cpython"'
def marker(self, marker: str | BaseMarker) -> None: from poetry.core.packages.utils.utils import convert_markers from poetry.core.semver.helpers import parse_constraint from poetry.core.version.markers import BaseMarker from poetry.core.version.markers import parse_marker if not isinstance(marker, BaseMarker): marker = parse_marker(marker) self._marker = marker markers = convert_markers(marker) if "extra" in markers: # If we have extras, the dependency is optional self.deactivate() for or_ in markers["extra"]: for _, extra in or_: self.in_extras.append(extra) # Recalculate python versions. self._python_versions = "*" if not contains_group_without_marker(markers, "python_version"): ors = [] for or_ in markers["python_version"]: ands = [] for op, version in or_: # Expand python version if op == "==" and "*" not in version: version = "~" + version op = "" elif op == "!=": version += ".*" elif op in ("in", "not in"): versions = [] for v in re.split("[ ,]+", version): split = v.split(".") if len(split) in [1, 2]: split.append("*") op_ = "" if op == "in" else "!=" else: op_ = "==" if op == "in" else "!=" versions.append(op_ + ".".join(split)) glue = " || " if op == "in" else ", " if versions: ands.append(glue.join(versions)) continue ands.append(f"{op}{version}") ors.append(" ".join(ands)) self._python_versions = " || ".join(ors) self._python_constraint = parse_constraint(self._python_versions)
def python_versions(self, value): self._python_versions = value self._python_constraint = parse_constraint(value) if not self._python_constraint.is_any(): self.marker = self.marker.intersect( parse_marker( self._create_nested_marker("python_version", self._python_constraint)))
def python_versions(self, value): self._python_versions = value if value == "*" or value == VersionRange(): value = "~2.7 || >=3.4" self._python_constraint = parse_constraint(value) self._python_marker = parse_marker( create_nested_marker("python_version", self._python_constraint))
def test_marker_union_union_duplicates(): m = parse_marker('sys_platform == "darwin" or python_version < "3.4"') union = m.union( parse_marker('sys_platform == "darwin" or os_name == "Windows"')) assert str(union) == ( 'sys_platform == "darwin" or python_version < "3.4" or os_name == "Windows"' ) m = parse_marker('sys_platform == "darwin" or python_version < "3.4"') union = m.union( parse_marker( 'sys_platform == "darwin" or os_name == "Windows" or python_version <= "3.6"' )) assert str(union) == ( 'sys_platform == "darwin" or python_version <= "3.6" or os_name == "Windows"' )
def test_convert_markers(): marker = parse_marker( 'sys_platform == "win32" and python_version < "3.6" ' 'or sys_platform == "win32" and python_version < "3.6" and python_version >= "3.3" ' 'or sys_platform == "win32" and python_version < "3.3"') converted = convert_markers(marker) assert converted["python_version"] == [ [("<", "3.6")], [("<", "3.6"), (">=", "3.3")], [("<", "3.3")], ] marker = parse_marker('python_version == "2.7" or python_version == "2.6"') converted = convert_markers(marker) assert converted["python_version"] == [[("==", "2.7")], [("==", "2.6")]]
def python_versions(self, value: str) -> None: self._python_versions = value if value == "*": value = "~2.7 || >=3.4" self._python_constraint = parse_constraint(value) self._python_marker = parse_marker( create_nested_marker("python_version", self._python_constraint))
def python_versions(self, value: Union[str, "VersionTypes"]) -> None: from poetry.core.semver.version_range import VersionRange self._python_versions = value if value == "*" or value == VersionRange(): value = "~2.7 || >=3.4" self._python_constraint = parse_constraint(value) self._python_marker = parse_marker( create_nested_marker("python_version", self._python_constraint))
def test_single_marker() -> None: m = parse_marker('sys_platform == "darwin"') assert isinstance(m, SingleMarker) assert m.name == "sys_platform" assert m.constraint_string == "==darwin" m = parse_marker('python_version in "2.7, 3.0, 3.1"') assert isinstance(m, SingleMarker) assert m.name == "python_version" assert m.constraint_string == "in 2.7, 3.0, 3.1" assert str(m.constraint) == ">=2.7.0,<2.8.0 || >=3.0.0,<3.2.0" m = parse_marker('"2.7" in python_version') assert isinstance(m, SingleMarker) assert m.name == "python_version" assert m.constraint_string == "in 2.7" assert str(m.constraint) == ">=2.7.0,<2.8.0" m = parse_marker('python_version not in "2.7, 3.0, 3.1"') assert isinstance(m, SingleMarker) assert m.name == "python_version" assert m.constraint_string == "not in 2.7, 3.0, 3.1" assert str(m.constraint) == "<2.7.0 || >=2.8.0,<3.0.0 || >=3.2.0" m = parse_marker( "platform_machine in 'x86_64 X86_64 aarch64 AARCH64 ppc64le PPC64LE amd64 AMD64" " win32 WIN32'") assert isinstance(m, SingleMarker) assert m.name == "platform_machine" assert ( m.constraint_string == "in x86_64 X86_64 aarch64 AARCH64 ppc64le PPC64LE amd64 AMD64 win32 WIN32" ) assert ( str(m.constraint) == "x86_64 || X86_64 || aarch64 || AARCH64 || ppc64le || PPC64LE || amd64 ||" " AMD64 || win32 || WIN32") m = parse_marker( "platform_machine not in 'x86_64 X86_64 aarch64 AARCH64 ppc64le PPC64LE amd64" " AMD64 win32 WIN32'") assert isinstance(m, SingleMarker) assert m.name == "platform_machine" assert ( m.constraint_string == "not in x86_64 X86_64 aarch64 AARCH64 ppc64le PPC64LE amd64 AMD64 win32" " WIN32") assert ( str(m.constraint) == "!=x86_64, !=X86_64, !=aarch64, !=AARCH64, !=ppc64le, !=PPC64LE, !=amd64," " !=AMD64, !=win32, !=WIN32")