| import fnmatch as _stdlib_fnmatch |
| import os |
| |
| MYPY = False |
| if MYPY: |
| # MYPY is set to True when run under Mypy. |
| from typing import Iterable |
| from typing import List |
| from typing import Text |
| |
| |
| __all__ = ["fnmatch", "fnmatchcase", "filter", "translate"] |
| |
| |
| def fnmatch(name, pat): |
| # type: (Text, Text) -> bool |
| name = os.path.normcase(name) |
| pat = os.path.normcase(pat) |
| return fnmatchcase(name, pat) |
| |
| |
| def fnmatchcase(name, pat): |
| # type: (Text, Text) -> bool |
| if '?' not in pat and '[' not in pat: |
| wildcards = pat.count("*") |
| if wildcards == 0: |
| return name == pat |
| elif wildcards == 1 and pat[0] == "*": |
| return name.endswith(pat[1:]) |
| elif wildcards == 1 and pat[-1] == "*": |
| return name.startswith(pat[:-1]) |
| return _stdlib_fnmatch.fnmatchcase(name, pat) |
| |
| |
| def filter(names, pat): |
| # type: (Iterable[Text], Text) -> List[Text] |
| return [n for n in names if fnmatch(n, pat)] |
| |
| |
| translate = _stdlib_fnmatch.translate |