Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Side by Side Diff: tools/telemetry/third_party/pyfakefs/pyfakefs/fake_filesystem_glob.py

Issue 1310343005: [Telemetry] Add pyfakefs to telemetry/third_party (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add license header to setup.py Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2009 Google Inc. All Rights Reserved.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 """A fake glob module implementation that uses fake_filesystem for unit tests.
16
17 Includes:
18 FakeGlob: Uses a FakeFilesystem to provide a fake replacement for the
19 glob module.
20
21 Usage:
22 >>> import fake_filesystem
23 >>> import fake_filesystem_glob
24 >>> filesystem = fake_filesystem.FakeFilesystem()
25 >>> glob_module = fake_filesystem_glob.FakeGlobModule(filesystem)
26
27 >>> file = filesystem.CreateFile('new-file')
28 >>> glob_module.glob('*')
29 ['new-file']
30 >>> glob_module.glob('???-file')
31 ['new-file']
32 """
33
34 import fnmatch
35 import glob
36 import os
37
38 import fake_filesystem
39
40
41 class FakeGlobModule(object):
42 """Uses a FakeFilesystem to provide a fake replacement for glob module."""
43
44 def __init__(self, filesystem):
45 """Construct fake glob module using the fake filesystem.
46
47 Args:
48 filesystem: FakeFilesystem used to provide file system information
49 """
50 self._glob_module = glob
51 self._os_module = fake_filesystem.FakeOsModule(filesystem)
52 self._path_module = self._os_module.path
53
54 def glob(self, pathname): # pylint: disable-msg=C6409
55 """Return a list of paths matching a pathname pattern.
56
57 The pattern may contain shell-style wildcards a la fnmatch.
58
59 Args:
60 pathname: the pattern with which to find a list of paths
61
62 Returns:
63 List of strings matching the glob pattern.
64 """
65 if not self.has_magic(pathname):
66 if self._path_module.exists(pathname):
67 return [pathname]
68 else:
69 return []
70
71 dirname, basename = self._path_module.split(pathname)
72
73 if not dirname:
74 return self.glob1(self._path_module.curdir, basename)
75 elif self.has_magic(dirname):
76 path_list = self.glob(dirname)
77 else:
78 path_list = [dirname]
79
80 if not self.has_magic(basename):
81 result = []
82 for dirname in path_list:
83 if basename or self._path_module.isdir(dirname):
84 name = self._path_module.join(dirname, basename)
85 if self._path_module.exists(name):
86 result.append(name)
87 else:
88 result = []
89 for dirname in path_list:
90 sublist = self.glob1(dirname, basename)
91 for name in sublist:
92 result.append(self._path_module.join(dirname, name))
93
94 return result
95
96 def glob1(self, dirname, pattern): # pylint: disable-msg=C6409
97 if not dirname:
98 dirname = self._path_module.curdir
99 try:
100 names = self._os_module.listdir(dirname)
101 except os.error:
102 return []
103 if pattern[0] != '.':
104 names = filter(lambda x: x[0] != '.', names)
105 return fnmatch.filter(names, pattern)
106
107 def __getattr__(self, name):
108 """Forwards any non-faked calls to the standard glob module."""
109 return getattr(self._glob_module, name)
110
111
112 def _RunDoctest():
113 # pylint: disable-msg=C6111,C6204,W0406
114 import doctest
115 import fake_filesystem_glob
116 return doctest.testmod(fake_filesystem_glob)
117
118
119 if __name__ == '__main__':
120 _RunDoctest()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698