FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
plotdevice/plotdevice/util/iglob.py at main · plotdevice/plotdevice · GitHub
plotdevice
plotdevice
Repository navigation
Code
Issues
10
(10)
Pull requests
4
(4)
Discussions
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
plotdevice
/
plotdevice
/
util
/
iglob.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
76 lines (65 loc) · 2.52 KB
Breadcrumbs
plotdevice
/
plotdevice
/
util
/
iglob.py
Copy path
File metadata and controls
76 lines (65 loc) · 2.52 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# a cut & paste job from python's glob.py (with trivial modifications to support case-insensitive matching)
import
sys
import
os
import
re
import
fnmatch
def
iglob
(
pathname
,
case
=
True
):
"""Return an iterator which yields the paths case-(in)sensitively matching a pathname pattern.
The pattern may contain simple shell-style wildcards a la
fnmatch. However, unlike fnmatch, filenames starting with a
dot are special cases that are not matched by '*' and '?'
patterns.
"""
if
not
has_magic
(
pathname
):
if
os
.
path
.
lexists
(
pathname
):
yield
pathname
return
dirname
,
basename
=
os
.
path
.
split
(
pathname
)
if
not
dirname
:
for
name
in
glob1
(
os
.
curdir
,
basename
,
case
):
yield
name
return
# `os.path.split()` returns the argument itself as a dirname if it is a
# drive or UNC path. Prevent an infinite recursion if a drive or UNC path
# contains magic characters (i.e. r'\\?\C:').
if
dirname
!=
pathname
and
has_magic
(
dirname
):
dirs
=
iglob
(
dirname
)
else
:
dirs
=
[
dirname
]
if
has_magic
(
basename
):
glob_in_dir
=
glob1
else
:
glob_in_dir
=
glob0
for
dirname
in
dirs
:
for
name
in
glob_in_dir
(
dirname
,
basename
,
case
):
yield
os
.
path
.
join
(
dirname
,
name
)
# These 2 helper functions non-recursively glob inside a literal directory.
# They return a list of basenames. `glob1` accepts a pattern while `glob0`
# takes a literal basename (so it only has to check for its existence).
def
glob1
(
dirname
,
pattern
,
case
):
if
not
dirname
:
dirname
=
os
.
curdir
if
isinstance
(
pattern
,
str
)
and
not
isinstance
(
dirname
,
str
):
dirname
=
str
(
dirname
,
sys
.
getfilesystemencoding
()
or
sys
.
getdefaultencoding
())
try
:
names
=
os
.
listdir
(
dirname
)
except
os
.
error
:
return
[]
if
pattern
[
0
]
!=
'.'
:
names
=
[
n
for
n
in
names
if
n
[
0
]
!=
'.'
]
pat
=
re
.
compile
(
fnmatch
.
translate
(
pattern
),
re
.
I
if
not
case
else
0
)
return
[
n
for
n
in
names
if
pat
.
search
(
n
)]
def
glob0
(
dirname
,
basename
,
case
):
if
basename
==
''
:
# `os.path.split()` returns an empty basename for paths ending with a
# directory separator. 'q*x/' should match only directories.
if
os
.
path
.
isdir
(
dirname
):
return
[
basename
]
else
:
if
os
.
path
.
lexists
(
os
.
path
.
join
(
dirname
,
basename
)):
return
[
basename
]
return
[]
magic_check
=
re
.
compile
(
'[*?[]'
)
def
has_magic
(
s
):
return
magic_check
.
search
(
s
)
is
not
None
Back
|
FazBrowse Home
|
New Git URL