Skip to content

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

@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.

>>>importglob>>>glob.glob('**.py', recursive=True) ['blah.py'] >>>glob.translate('**.py', recursive=True) Traceback (mostrecentcalllast): File"<stdin>", line1, in<module>glob.translate('**.py', recursive=True) ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^File"/home/barney/projects/cpython/Lib/glob.py", line304, intranslateraiseValueError("Invalid pattern: '**' can only be an entire path component") ValueError: Invalidpattern: '**'canonlybeanentirepathcomponent

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