1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from file_system import FileSystem, FileNotFoundError
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochfrom future import Future
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class OfflineFileSystem(FileSystem):
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  '''An offline FileSystem which masquerades as another file system. It throws
11b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  FileNotFound error for all operations, and overrides GetIdentity.
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  '''
13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  def __init__(self, fs):
14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    self._fs = fs
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  def Read(self, paths, skip_not_found=False):
17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    if skip_not_found: return Future(value={})
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    def raise_file_not_found():
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      raise FileNotFoundError('File system is offline, cannot read %s' % paths)
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return Future(callback=raise_file_not_found)
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  def Stat(self, path):
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    raise FileNotFoundError('File system is offline, cannot read %s' % path)
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  def GetIdentity(self):
26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    return self._fs.GetIdentity()
27