def valid_or_install(cls, vim): import platform import zipfile if Shell.isinPATH('rclone'): return True else: rclone_dir = VimUserInput( 'Rclone not in PATH. Install it at (modify/enter)', os.path.expanduser('~/rclone')) Shell.mkdir(rclone_dir) system = platform.system().lower() processor = 'amd64' if '386' in platform.processor(): processor = '386' else: # Should support arm?? pass url = 'https://downloads.rclone.org/rclone-current-{}-{}.zip'.format( system, processor) zip_fname = os.path.join(rclone_dir, 'rclone.zip') Shell.urldownload(url, zip_fname) zip_ref = zipfile.ZipFile(zip_fname, 'r') zip_ref.extractall(rclone_dir) for entry in zip_ref.NameToInfo: if entry.endswith('rclone'): Shell.cp(os.path.join(rclone_dir, entry), rclone_dir) Shell.chmod(os.path.join(rclone_dir, 'rclone'), 755) zip_ref.close() os.remove(zip_fname) shellrc = VimUserInput( 'Update PATH in (leave blank to set manually later)', Shell.shellrc()) if len(shellrc) > 0: with open(shellrc, 'a') as f: f.write('PATH={}:$PATH\n'.format(rclone_dir)) os.environ['PATH'] += ':' + rclone_dir
def __call__(self, fname): return Shell.isinPATH(self.arg)