mirror of https://github.com/mongodb/mongo
41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
"""Filename globbing utility."""
|
|
|
|
import functools
|
|
import glob as _glob
|
|
import os.path
|
|
import re
|
|
|
|
_CONTAINS_GLOB_PATTERN = re.compile("[*?[]")
|
|
|
|
|
|
def is_glob_pattern(string):
|
|
"""Return true if 'string' represents a glob pattern, and false otherwise."""
|
|
|
|
# Copied from glob.has_magic().
|
|
return _CONTAINS_GLOB_PATTERN.search(string) is not None
|
|
|
|
|
|
@functools.cache
|
|
def glob(globbed_pathname):
|
|
"""Return a list of pathnames matching the 'globbed_pathname' pattern.
|
|
|
|
In addition to containing simple shell-style wildcards a la fnmatch,
|
|
the pattern may also contain globstars ("**"), which is recursively
|
|
expanded to match zero or more subdirectories.
|
|
"""
|
|
|
|
return list(iglob(globbed_pathname))
|
|
|
|
|
|
def iglob(globbed_pathname):
|
|
"""Emit a list of pathnames matching the 'globbed_pathname' pattern.
|
|
|
|
In addition to containing simple shell-style wildcards a la fnmatch,
|
|
the pattern may also contain globstars ("**"), which is recursively
|
|
expanded to match zero or more subdirectories.
|
|
"""
|
|
|
|
for pathname in _glob.iglob(globbed_pathname, recursive=True):
|
|
# Normalize 'pathname' so exact string comparison can be used later.
|
|
yield os.path.normpath(pathname)
|