Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/glob2/impl.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/glob2/impl.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,216 +0,0 @@ -"""Filename globbing utility.""" - -from __future__ import absolute_import - -import sys -import os -import re -from os.path import join -from . import fnmatch - -try: - from itertools import imap -except ImportError: - imap = map - - -class Globber(object): - - listdir = staticmethod(os.listdir) - isdir = staticmethod(os.path.isdir) - islink = staticmethod(os.path.islink) - exists = staticmethod(os.path.lexists) - - def walk(self, top, followlinks=False, sep=None): - """A simplified version of os.walk (code copied) that uses - ``self.listdir``, and the other local filesystem methods. - - Because we don't care about file/directory distinctions, only - a single list is returned. - """ - try: - names = self.listdir(top) - except os.error as err: - return - - items = [] - for name in names: - items.append(name) - - yield top, items - - for name in items: - new_path = _join_paths([top, name], sep=sep) - if followlinks or not self.islink(new_path): - for x in self.walk(new_path, followlinks): - yield x - - def glob(self, pathname, with_matches=False, include_hidden=False, recursive=True, - norm_paths=True, case_sensitive=True, sep=None): - """Return a list of paths 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 ``include_hidden`` is True, then files and folders starting with - a dot are also returned. - """ - return list(self.iglob(pathname, with_matches, include_hidden, - norm_paths, case_sensitive, sep)) - - def iglob(self, pathname, with_matches=False, include_hidden=False, recursive=True, - norm_paths=True, case_sensitive=True, sep=None): - """Return an iterator which yields the paths 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 ``with_matches`` is True, then for each matching path - a 2-tuple will be returned; the second element if the tuple - will be a list of the parts of the path that matched the individual - wildcards. - - If ``include_hidden`` is True, then files and folders starting with - a dot are also returned. - """ - result = self._iglob(pathname, True, include_hidden, - norm_paths, case_sensitive, sep) - if with_matches: - return result - return imap(lambda s: s[0], result) - - def _iglob(self, pathname, rootcall, include_hidden, - norm_paths, case_sensitive, sep): - """Internal implementation that backs :meth:`iglob`. - - ``rootcall`` is required to differentiate between the user's call to - iglob(), and subsequent recursive calls, for the purposes of resolving - certain special cases of ** wildcards. Specifically, "**" is supposed - to include the current directory for purposes of globbing, but the - directory itself should never be returned. So if ** is the lastmost - part of the ``pathname`` given the user to the root call, we want to - ignore the current directory. For this, we need to know which the root - call is. - """ - - # Short-circuit if no glob magic - if not has_magic(pathname): - if self.exists(pathname): - yield pathname, () - return - - # If no directory part is left, assume the working directory - dirname, basename = os.path.split(pathname) - - # If the directory is globbed, recurse to resolve. - # If at this point there is no directory part left, we simply - # continue with dirname="", which will search the current dir. - # `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): - # Note that this may return files, which will be ignored - # later when we try to use them as directories. - # Prefiltering them here would only require more IO ops. - dirs = self._iglob(dirname, False, include_hidden, - norm_paths, case_sensitive, sep) - else: - dirs = [(dirname, ())] - - # Resolve ``basename`` expr for every directory found - for dirname, dir_groups in dirs: - for name, groups in self.resolve_pattern(dirname, basename, - not rootcall, include_hidden, - norm_paths, case_sensitive, sep): - yield _join_paths([dirname, name], sep=sep), dir_groups + groups - - def resolve_pattern(self, dirname, pattern, globstar_with_root, include_hidden, - norm_paths, case_sensitive, sep): - """Apply ``pattern`` (contains no path elements) to the - literal directory in ``dirname``. - - If pattern=='', this will filter for directories. This is - a special case that happens when the user's glob expression ends - with a slash (in which case we only want directories). It simpler - and faster to filter here than in :meth:`_iglob`. - """ - - if sys.version_info[0] == 3: - if isinstance(pattern, bytes): - dirname = bytes(os.curdir, 'ASCII') - else: - if isinstance(pattern, unicode) and not isinstance(dirname, unicode): - dirname = unicode(dirname, sys.getfilesystemencoding() or - sys.getdefaultencoding()) - - # If no magic, short-circuit, only check for existence - if not has_magic(pattern): - if pattern == '': - if self.isdir(dirname): - return [(pattern, ())] - else: - if self.exists(_join_paths([dirname, pattern], sep=sep)): - return [(pattern, ())] - return [] - - if not dirname: - dirname = os.curdir - - try: - if pattern == '**': - # Include the current directory in **, if asked; by adding - # an empty string as opposed to '.', we spare ourselves - # having to deal with os.path.normpath() later. - names = [''] if globstar_with_root else [] - for top, entries in self.walk(dirname, sep=sep): - _mkabs = lambda s: _join_paths([top[len(dirname) + 1:], s], sep=sep) - names.extend(map(_mkabs, entries)) - # Reset pattern so that fnmatch(), which does not understand - # ** specifically, will only return a single group match. - pattern = '*' - else: - names = self.listdir(dirname) - except os.error: - return [] - - if not include_hidden and not _ishidden(pattern): - # Remove hidden files, but take care to ensure - # that the empty string we may have added earlier remains. - # Do not filter out the '' that we might have added earlier - names = filter(lambda x: not x or not _ishidden(x), names) - return fnmatch.filter(names, pattern, norm_paths, case_sensitive, sep) - - -default_globber = Globber() -glob = default_globber.glob -iglob = default_globber.iglob -del default_globber - - -magic_check = re.compile('[*?[]') -magic_check_bytes = re.compile(b'[*?[]') - - -def has_magic(s): - if isinstance(s, bytes): - match = magic_check_bytes.search(s) - else: - match = magic_check.search(s) - return match is not None - - -def _ishidden(path): - return path[0] in ('.', b'.'[0]) - - -def _join_paths(paths, sep=None): - path = join(*paths) - if sep: - path = re.sub(r'\/', sep, path) # cached internally - return path -