Skip to content

Commit 975cd32

Browse files
committed
Permit whitespace around marker_atom
This ensures that a marker with whitespace around it is parsed correctly.
1 parent 8cba45c commit 975cd32

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

packaging/_parser.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -239,30 +239,31 @@ def parse_marker(source: str) -> MarkerList:
239239

240240
def _parse_marker_expr(tokenizer: Tokenizer) -> MarkerList:
241241
"""
242-
marker_expr = marker_atom (BOOLOP WS? marker_atom)+
242+
marker_expr = marker_atom (BOOLOP marker_atom)+
243243
"""
244244
expression = [_parse_marker_atom(tokenizer)]
245245
while tokenizer.check("BOOLOP"):
246246
token = tokenizer.read()
247-
tokenizer.consume("WS")
248247
expr_right = _parse_marker_atom(tokenizer)
249248
expression.extend((token.text, expr_right))
250249
return expression
251250

252251

253252
def _parse_marker_atom(tokenizer: Tokenizer) -> MarkerAtom:
254253
"""
255-
marker_atom = LEFT_PARENTHESIS WS? marker_expr WS? RIGHT_PARENTHESIS
256-
| marker_item
254+
marker_atom = WS? LEFT_PARENTHESIS WS? marker_expr WS? RIGHT_PARENTHESIS WS?
255+
| WS? marker_item WS?
257256
"""
258257

258+
tokenizer.consume("WS")
259259
if tokenizer.check("LEFT_PARENTHESIS", peek=True):
260260
with tokenizer.enclosing_tokens("LEFT_PARENTHESIS", "RIGHT_PARENTHESIS"):
261261
tokenizer.consume("WS")
262262
marker: MarkerAtom = _parse_marker_expr(tokenizer)
263263
tokenizer.consume("WS")
264264
else:
265265
marker = _parse_marker_item(tokenizer)
266+
tokenizer.consume("WS")
266267
return marker
267268

268269

tests/test_requirements.py

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
[
9393
None,
9494
"python_version{ws}>={ws}'3.3'",
95+
'({ws}python_version{ws}>={ws}"3.4"{ws}){ws}and extra{ws}=={ws}"oursql"',
9596
(
9697
"sys_platform{ws}!={ws}'linux' and(os_name{ws}=={ws}'linux' or "
9798
"python_version{ws}>={ws}'3.3'{ws}){ws}"

0 commit comments

Comments
 (0)