Migration Guide¶
Migrating from v0.2¶
The fnmatch() function and Flag enum are deprecated and will be
removed in 1.0. The new Glob builder API replaces it with a composable,
reusable interface.
Basic matching¶
The simplest calls translate directly - fnmatch(pat, val) becomes
Glob.default().match(pat, val):
# Before
from globlin import fnmatch
fnmatch("*.py", "foo.py")
# After
from globlin import Glob
glob = Glob.default()
glob.match("*.py", "foo.py")
Modifying matching behavior¶
Use the Glob builder instance instead of passing Flag values
to every call:
# Before
from globlin import fnmatch, Flag
fnmatch("src/**/*.py", "src/a/b/foo.py", Flag.GLOB_STAR)
fnmatch("{src,lib}/*.py", "src/foo.py", Flag.BRACE_EXPANSION)
# After
from globlin import Glob
glob = Glob.default().globstar().brace_expansion()
glob.match("src/**/*.py", "src/a/b/foo.py")
glob.match("{src,lib}/*.py", "src/foo.py")
Combining multiple flags¶
Chain builder methods to replace multiple Flag arguments:
# Before
from globlin import fnmatch, Flag
fnmatch("!{a,b}", "c", Flag.NEGATE, Flag.BRACE_EXPANSION)
# After
from globlin import Glob
glob = Glob.default().negate().brace_expansion()
glob.match("!{a,b}", "c")
Using raw flag values¶
If you composed flags as integers, use
Glob.from_flags() with the new
Flags constants:
# Before
from globlin import fnmatch, Flag
fnmatch("src/**/*.py", "src/foo.py", Flag.GLOB_STAR, Flag.ESCAPE)
# After
from globlin import Glob, Flags
glob = Glob.from_flags(Flags.GLOB_STAR | Flags.PATH_SEPARATOR | Flags.ESCAPE)
glob.match("src/**/*.py", "src/foo.py")
Flag name mapping¶
Flag (v0.2) |
Builder method | Flags constant |
|---|---|---|
Flag.GLOB_STAR |
.globstar() |
Flags.GLOB_STAR |
Flag.BRACKET_EXPANSION |
.bracket_expansion() |
Flags.BRACKET_EXPANSION |
Flag.BRACE_EXPANSION |
.brace_expansion() |
Flags.BRACE_EXPANSION |
Flag.NEGATE |
.negate() |
Flags.NEGATE |
Flag.ESCAPE |
.escape() |
Flags.ESCAPE |
Flag.PATH_SEPARATOR |
.path_separator() |
Flags.PATH_SEPARATOR |
Reuse Glob instances
A Glob instance captures its configuration once, so you need not pass
flags per call as fnmatch() required. Create one at module level and
reuse it for all matching calls.