Пример #1
0
class MixedContentsManager(ContentsManager):
    DRIVE_PATH_SENTINEL = 'gdrive'

    def __init__(self, **kwargs):
        self.file_contents_manager = FileContentsManager()
        self.client_side_contents_manager = ClientSideContentsManager()

    def is_drive_path(self, path):
        components = path.split('/')
        return components and components[0] == self.DRIVE_PATH_SENTINEL

    # ContentsManager API part 1: methods that must be
    # implemented in subclasses.

    def dir_exists(self, path):
        if self.is_drive_path(path):
            return self.client_side_contents_manager.dir_exists(path)
        return self.file_contents_manager.dir_exists(path)

    def is_hidden(self, path):
        if self.is_drive_path(path):
            return self.client_side_contents_manager.is_hidden(path)
        return self.file_contents_manager.is_hidden(path)

    def file_exists(self, path=''):
        if self.is_drive_path(path):
            return self.client_side_contents_manager.file_exists(path)
        return self.file_contents_manager.file_exists(path)

    def exists(self, path):
        return self.file_contents_manager.exists(path)

    def get(self, path, **kwargs):
        if self.is_drive_path(path):
            return self.client_side_contents_manager.get(path, **kwargs)
        return self.file_contents_manager.get(path, **kwargs)

    def save(self, model, path):
        return self.file_contents_manager.save(model, path)

    def update(self, model, path):
        return self.file_contents_manager.update(model, path)

    def delete(self, path):
        return self.file_contents_manager.delete(path)

    def create_checkpoint(self, path):
        return self.file_contents_manager.create_checkpoint(path)

    def list_checkpoints(self, path):
        return self.file_contents_manager.list_checkpoints(path)

    def restore_checkpoint(self, checkpoint_id, path):
        return self.file_contents_manager.restore_checkpoint(
            checkpoint_id, path)

    def delete_checkpoint(self, checkpoint_id, path):
        return self.file_contents_manager.delete_checkpoint(
            checkpoint_id, path)