17
17
)
18
18
19
19
from pip ._vendor import tomli_w
20
+ from pip ._vendor .packaging .markers import InvalidMarker , Marker
20
21
from pip ._vendor .packaging .version import InvalidVersion , Version
21
22
from pip ._vendor .typing_extensions import Self
22
23
@@ -48,7 +49,7 @@ def _toml_key(key: str) -> str:
48
49
49
50
50
51
def _toml_value (value : T ) -> Union [str , T ]:
51
- if isinstance (value , Version ):
52
+ if isinstance (value , ( Version , Marker ) ):
52
53
return str (value )
53
54
return value
54
55
@@ -98,6 +99,16 @@ def _get_required_version(d: Dict[str, Any], key: str) -> Version:
98
99
return value
99
100
100
101
102
+ def _get_marker (d : Dict [str , Any ], key : str ) -> Optional [Marker ]:
103
+ value = _get (d , str , key )
104
+ if value is None :
105
+ return None
106
+ try :
107
+ return Marker (value )
108
+ except InvalidMarker :
109
+ raise PylockValidationError (f"invalid marker { value !r} " )
110
+
111
+
101
112
def _get_object (
102
113
d : Dict [str , Any ], expected_type : Type [PylockDataClassT ], key : str
103
114
) -> Optional [PylockDataClassT ]:
@@ -274,7 +285,7 @@ def from_dict(cls, d: Dict[str, Any]) -> Self:
274
285
class Package :
275
286
name : str
276
287
version : Optional [Version ] = None
277
- # (not supported) marker: Optional[str]
288
+ marker : Optional [Marker ] = None
278
289
# (not supported) requires_python: Optional[str]
279
290
# (not supported) dependencies
280
291
vcs : Optional [PackageVcs ] = None
@@ -296,6 +307,7 @@ def from_dict(cls, d: Dict[str, Any]) -> Self:
296
307
package = cls (
297
308
name = _get_required (d , str , "name" ),
298
309
version = _get_version (d , "version" ),
310
+ marker = _get_marker (d , "marker" ),
299
311
vcs = _get_object (d , PackageVcs , "vcs" ),
300
312
directory = _get_object (d , PackageDirectory , "directory" ),
301
313
archive = _get_object (d , PackageArchive , "archive" ),
@@ -381,6 +393,7 @@ def from_install_requirement(cls, ireq: InstallRequirement, base_dir: Path) -> S
381
393
return cls (
382
394
name = dist .canonical_name ,
383
395
version = package_version ,
396
+ marker = None ,
384
397
vcs = package_vcs ,
385
398
directory = package_directory ,
386
399
archive = package_archive ,
0 commit comments