import functools
import os
-from compiled_file_system import CompiledFileSystem
+from compiled_file_system import Cache, CompiledFileSystem
from copy import deepcopy
from environment import GetAppVersion
from file_system import FileNotFoundError
compiled_fs.GetFromFile('apps/fakedir/file.html').Get())
def testPopulateFromFileListing(self):
- def strip_ext(path, files):
+ def strip_ext(_, files):
return [os.path.splitext(f)[0] for f in files]
compiled_fs = _GetTestCompiledFsCreator()(strip_ext, CompiledFileSystemTest)
expected_top_listing = [
'apps/deepdir/deeper/').Get())
def testCaching(self):
- compiled_fs = _GetTestCompiledFsCreator()(identity, CompiledFileSystemTest)
+ compiled_fs = _GetTestCompiledFsCreator()(Cache(identity),
+ CompiledFileSystemTest)
self.assertEqual('404.html contents',
compiled_fs.GetFromFile('404.html').Get())
self.assertEqual(set(('file.html',)),
future.Get()
self.assertTrue(*mock_fs.CheckAndReset(read_count=2, read_resolve_count=3))
+ def testSkipNotFound(self):
+ mock_fs = MockFileSystem(TestFileSystem(_TEST_DATA))
+ compiled_fs = CompiledFileSystem.Factory(
+ ObjectStoreCreator.ForTest()).Create(
+ mock_fs, Cache(lambda path, contents: contents), type(self))
+
+ future = compiled_fs.GetFromFile('no_file', skip_not_found=True)
+ # If the file doesn't exist, then the file system is not read.
+ self.assertTrue(*mock_fs.CheckAndReset(read_count=1, stat_count=1))
+ self.assertEqual(None, future.Get())
+ self.assertTrue(*mock_fs.CheckAndReset(read_resolve_count=1))
+ future = compiled_fs.GetFromFile('no_file', skip_not_found=True)
+ self.assertTrue(*mock_fs.CheckAndReset(stat_count=1))
+ self.assertEqual(None, future.Get())
+ # The result for a non-existent file should still be cached.
+ self.assertTrue(*mock_fs.CheckAndReset())
+ future = compiled_fs.GetFromFile('no_file')
+ self.assertRaises(FileNotFoundError, future.Get)
if __name__ == '__main__':