Skip to content

glob.translate() rejects non-recursive pattern segments that include "**" #116377

Closed
@barneygale

Description

@barneygale

Bug report

Bug description:

glob.translate(recursive=True) (new in 3.13) rejects any pattern with a segment that includes **, unless ** is the entire segment. For example, translate('**a') is rejected but not translate('**')

Rejecting such segments is longstanding pathlib behaviour, but it has no precedent in the glob module -- glob.glob(recursive=True) happily accepts such segments.

>>> import glob
>>> glob.glob('**.py', recursive=True)
['blah.py']
>>> glob.translate('**.py', recursive=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    glob.translate('**.py', recursive=True)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/barney/projects/cpython/Lib/glob.py", line 304, in translate
    raise ValueError("Invalid pattern: '**' can only be an entire path component")
ValueError: Invalid pattern: '**' can only be an entire path component

translate() should treat these segments similar to glob(), and leave the pattern validation stuff to pathlib.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    type-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions