| Index: tools/telemetry/third_party/pyfakefs/pyfakefs/fake_filesystem_glob.py
|
| diff --git a/tools/telemetry/third_party/pyfakefs/pyfakefs/fake_filesystem_glob.py b/tools/telemetry/third_party/pyfakefs/pyfakefs/fake_filesystem_glob.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..db387df8b6f3488e8c912567aed2c280460ffb0b
|
| --- /dev/null
|
| +++ b/tools/telemetry/third_party/pyfakefs/pyfakefs/fake_filesystem_glob.py
|
| @@ -0,0 +1,120 @@
|
| +# Copyright 2009 Google Inc. All Rights Reserved.
|
| +#
|
| +# Licensed under the Apache License, Version 2.0 (the "License");
|
| +# you may not use this file except in compliance with the License.
|
| +# You may obtain a copy of the License at
|
| +#
|
| +# http://www.apache.org/licenses/LICENSE-2.0
|
| +#
|
| +# Unless required by applicable law or agreed to in writing, software
|
| +# distributed under the License is distributed on an "AS IS" BASIS,
|
| +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| +# See the License for the specific language governing permissions and
|
| +# limitations under the License.
|
| +
|
| +"""A fake glob module implementation that uses fake_filesystem for unit tests.
|
| +
|
| +Includes:
|
| + FakeGlob: Uses a FakeFilesystem to provide a fake replacement for the
|
| + glob module.
|
| +
|
| +Usage:
|
| +>>> import fake_filesystem
|
| +>>> import fake_filesystem_glob
|
| +>>> filesystem = fake_filesystem.FakeFilesystem()
|
| +>>> glob_module = fake_filesystem_glob.FakeGlobModule(filesystem)
|
| +
|
| +>>> file = filesystem.CreateFile('new-file')
|
| +>>> glob_module.glob('*')
|
| +['new-file']
|
| +>>> glob_module.glob('???-file')
|
| +['new-file']
|
| +"""
|
| +
|
| +import fnmatch
|
| +import glob
|
| +import os
|
| +
|
| +import fake_filesystem
|
| +
|
| +
|
| +class FakeGlobModule(object):
|
| + """Uses a FakeFilesystem to provide a fake replacement for glob module."""
|
| +
|
| + def __init__(self, filesystem):
|
| + """Construct fake glob module using the fake filesystem.
|
| +
|
| + Args:
|
| + filesystem: FakeFilesystem used to provide file system information
|
| + """
|
| + self._glob_module = glob
|
| + self._os_module = fake_filesystem.FakeOsModule(filesystem)
|
| + self._path_module = self._os_module.path
|
| +
|
| + def glob(self, pathname): # pylint: disable-msg=C6409
|
| + """Return a list of paths matching a pathname pattern.
|
| +
|
| + The pattern may contain shell-style wildcards a la fnmatch.
|
| +
|
| + Args:
|
| + pathname: the pattern with which to find a list of paths
|
| +
|
| + Returns:
|
| + List of strings matching the glob pattern.
|
| + """
|
| + if not self.has_magic(pathname):
|
| + if self._path_module.exists(pathname):
|
| + return [pathname]
|
| + else:
|
| + return []
|
| +
|
| + dirname, basename = self._path_module.split(pathname)
|
| +
|
| + if not dirname:
|
| + return self.glob1(self._path_module.curdir, basename)
|
| + elif self.has_magic(dirname):
|
| + path_list = self.glob(dirname)
|
| + else:
|
| + path_list = [dirname]
|
| +
|
| + if not self.has_magic(basename):
|
| + result = []
|
| + for dirname in path_list:
|
| + if basename or self._path_module.isdir(dirname):
|
| + name = self._path_module.join(dirname, basename)
|
| + if self._path_module.exists(name):
|
| + result.append(name)
|
| + else:
|
| + result = []
|
| + for dirname in path_list:
|
| + sublist = self.glob1(dirname, basename)
|
| + for name in sublist:
|
| + result.append(self._path_module.join(dirname, name))
|
| +
|
| + return result
|
| +
|
| + def glob1(self, dirname, pattern): # pylint: disable-msg=C6409
|
| + if not dirname:
|
| + dirname = self._path_module.curdir
|
| + try:
|
| + names = self._os_module.listdir(dirname)
|
| + except os.error:
|
| + return []
|
| + if pattern[0] != '.':
|
| + names = filter(lambda x: x[0] != '.', names)
|
| + return fnmatch.filter(names, pattern)
|
| +
|
| + def __getattr__(self, name):
|
| + """Forwards any non-faked calls to the standard glob module."""
|
| + return getattr(self._glob_module, name)
|
| +
|
| +
|
| +def _RunDoctest():
|
| + # pylint: disable-msg=C6111,C6204,W0406
|
| + import doctest
|
| + import fake_filesystem_glob
|
| + return doctest.testmod(fake_filesystem_glob)
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + _RunDoctest()
|
|
|