@@ -19,12 +19,16 @@ def parse_constraint(constraints: str) -> VersionConstraint:
1919 return _parse_constraint (constraints = constraints )
2020
2121
22- def parse_marker_version_constraint (constraints : str ) -> VersionConstraint :
23- return _parse_constraint (constraints = constraints , is_marker_constraint = True )
22+ def parse_marker_version_constraint (
23+ constraints : str , * , pep440 : bool = True
24+ ) -> VersionConstraint :
25+ return _parse_constraint (
26+ constraints = constraints , is_marker_constraint = True , pep440 = pep440
27+ )
2428
2529
2630def _parse_constraint (
27- constraints : str , * , is_marker_constraint : bool = False
31+ constraints : str , * , is_marker_constraint : bool = False , pep440 : bool = True
2832) -> VersionConstraint :
2933 if constraints == "*" :
3034 from poetry .core .constraints .version .version_range import VersionRange
@@ -46,13 +50,17 @@ def _parse_constraint(
4650 for constraint in and_constraints :
4751 constraint_objects .append (
4852 parse_single_constraint (
49- constraint , is_marker_constraint = is_marker_constraint
53+ constraint ,
54+ is_marker_constraint = is_marker_constraint ,
55+ pep440 = pep440 ,
5056 )
5157 )
5258 else :
5359 constraint_objects .append (
5460 parse_single_constraint (
55- and_constraints [0 ], is_marker_constraint = is_marker_constraint
61+ and_constraints [0 ],
62+ is_marker_constraint = is_marker_constraint ,
63+ pep440 = pep440 ,
5664 )
5765 )
5866
@@ -74,9 +82,10 @@ def _parse_constraint(
7482
7583
7684def parse_single_constraint (
77- constraint : str , * , is_marker_constraint : bool = False
85+ constraint : str , * , is_marker_constraint : bool = False , pep440 : bool = True
7886) -> VersionConstraint :
7987 from poetry .core .constraints .version .patterns import BASIC_CONSTRAINT
88+ from poetry .core .constraints .version .patterns import BASIC_RELEASE_CONSTRAINT
8089 from poetry .core .constraints .version .patterns import CARET_CONSTRAINT
8190 from poetry .core .constraints .version .patterns import TILDE_CONSTRAINT
8291 from poetry .core .constraints .version .patterns import TILDE_PEP440_CONSTRAINT
@@ -185,6 +194,35 @@ def parse_single_constraint(
185194
186195 return version
187196
197+ # These below should be reserved for comparing non python packages such as OS
198+ # versions using `platform_release`
199+ if not pep440 and (m := BASIC_RELEASE_CONSTRAINT .match (constraint )):
200+ op = m .group ("op" )
201+ release_string = m .group ("release" )
202+ build = m .group ("build" )
203+
204+ try :
205+ version = Version (
206+ release = Version .parse (release_string ).release ,
207+ local = build ,
208+ )
209+ except InvalidVersion as e :
210+ raise ParseConstraintError (
211+ f"Could not parse version constraint: { constraint } "
212+ ) from e
213+
214+ if op == "<" :
215+ return VersionRange (max = version )
216+ if op == "<=" :
217+ return VersionRange (max = version , include_max = True )
218+ if op == ">" :
219+ return VersionRange (min = version )
220+ if op == ">=" :
221+ return VersionRange (min = version , include_min = True )
222+ if op == "!=" :
223+ return VersionUnion (VersionRange (max = version ), VersionRange (min = version ))
224+ return version
225+
188226 raise ParseConstraintError (f"Could not parse version constraint: { constraint } " )
189227
190228
0 commit comments