Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if self.is_bytes:
value = pattern[start + 1:].encode('latin-1')
else:
value = pattern[start + 1:]
if value:
self.store(value, parts, False)
if len(pattern) == 0:
parts.append(WcGlob(pattern.encode('latin-1') if self.is_bytes else pattern, False, False, False, False))
if (
(self.extmatchbase and not parts[0].is_drive) or
(self.matchbase and len(parts) == 1 and not parts[0].dir_only)
):
self.globstar = True
parts.insert(0, WcGlob(b'**' if self.is_bytes else '**', True, True, True, False))
if self.no_abs and parts and parts[0].is_drive:
raise ValueError('The pattern must be a relative path pattern')
return parts
split_index = []
parts = []
start = -1
pattern = self.pattern.decode('latin-1') if self.is_bytes else self.pattern
i = util.StringIter(pattern)
iter(i)
# Detect and store away windows drive as a literal
if self.win_drive_detect:
root_specified, drive, slash, end = _get_win_drive(pattern)
if drive is not None:
if self.is_bytes:
drive = drive.encode('latin-1')
parts.append(WcGlob(drive, False, False, True, True))
start = end - 1
i.advance(start)
elif drive is None and root_specified:
parts.append(WcGlob(b'\\' if self.is_bytes else '\\', False, False, True, True))
start = 1
i.advance(2)
elif not self.win_drive_detect and pattern.startswith('/'):
parts.append(WcGlob(b'/' if self.is_bytes else '/', False, False, True, True))
start = 0
i.advance(1)
for c in i:
if self.extend and c in EXT_TYPES and self.parse_extend(c, i):
continue
if c == '\\':
def store(self, value, l, dir_only):
"""Group patterns by literals and potential magic patterns."""
if l and value in (b'', ''):
return
globstar = value in (b'**', '**') and self.globstar
magic = self.is_magic(value)
if magic:
value = _compile(value, self.flags)
if globstar and l and l[-1].is_globstar:
l[-1] = WcGlob(value, magic, globstar, dir_only, False)
else:
l.append(WcGlob(value, magic, globstar, dir_only, False))
value = pattern[start + 1:split].encode('latin-1')
else:
value = pattern[start + 1:split]
self.store(value, parts, True)
start = split + offset
if start < len(pattern):
if self.is_bytes:
value = pattern[start + 1:].encode('latin-1')
else:
value = pattern[start + 1:]
if value:
self.store(value, parts, False)
if len(pattern) == 0:
parts.append(WcGlob(pattern.encode('latin-1') if self.is_bytes else pattern, False, False, False, False))
if (
(self.extmatchbase and not parts[0].is_drive) or
(self.matchbase and len(parts) == 1 and not parts[0].dir_only)
):
self.globstar = True
parts.insert(0, WcGlob(b'**' if self.is_bytes else '**', True, True, True, False))
if self.no_abs and parts and parts[0].is_drive:
raise ValueError('The pattern must be a relative path pattern')
return parts
# Detect and store away windows drive as a literal
if self.win_drive_detect:
root_specified, drive, slash, end = _get_win_drive(pattern)
if drive is not None:
if self.is_bytes:
drive = drive.encode('latin-1')
parts.append(WcGlob(drive, False, False, True, True))
start = end - 1
i.advance(start)
elif drive is None and root_specified:
parts.append(WcGlob(b'\\' if self.is_bytes else '\\', False, False, True, True))
start = 1
i.advance(2)
elif not self.win_drive_detect and pattern.startswith('/'):
parts.append(WcGlob(b'/' if self.is_bytes else '/', False, False, True, True))
start = 0
i.advance(1)
for c in i:
if self.extend and c in EXT_TYPES and self.parse_extend(c, i):
continue
if c == '\\':
index = i.index
value = ''
try:
value = self._references(i)
if self.bslash_abort and value == '\\':
split_index.append((i.index - 2, 1))
except StopIteration:
i.rewind(i.index - index)
def store(self, value, l, dir_only):
"""Group patterns by literals and potential magic patterns."""
if l and value in (b'', ''):
return
globstar = value in (b'**', '**') and self.globstar
magic = self.is_magic(value)
if magic:
value = _compile(value, self.flags)
if globstar and l and l[-1].is_globstar:
l[-1] = WcGlob(value, magic, globstar, dir_only, False)
else:
l.append(WcGlob(value, magic, globstar, dir_only, False))
pattern = self.pattern.decode('latin-1') if self.is_bytes else self.pattern
i = util.StringIter(pattern)
iter(i)
# Detect and store away windows drive as a literal
if self.win_drive_detect:
root_specified, drive, slash, end = _get_win_drive(pattern)
if drive is not None:
if self.is_bytes:
drive = drive.encode('latin-1')
parts.append(WcGlob(drive, False, False, True, True))
start = end - 1
i.advance(start)
elif drive is None and root_specified:
parts.append(WcGlob(b'\\' if self.is_bytes else '\\', False, False, True, True))
start = 1
i.advance(2)
elif not self.win_drive_detect and pattern.startswith('/'):
parts.append(WcGlob(b'/' if self.is_bytes else '/', False, False, True, True))
start = 0
i.advance(1)
for c in i:
if self.extend and c in EXT_TYPES and self.parse_extend(c, i):
continue
if c == '\\':
index = i.index
value = ''
try:
value = self._references(i)