def transfer(_, **data): backup_directory = os.path.join(Path.data_path(), '.echomesh-xfer') try: shutil.rmtree(backup_directory) except OSError: pass directories = data.get('directories', []) if '' in directories: directories = os.listdir(Path.data_path()) for directory in directories: parent = os.path.dirname(os.path.join(backup_directory, directory)) MakeDirs.parent_makedirs(parent) shutil.move(os.path.join(Path.data_path(), directory), parent) for f, value in six.iteritems(data.get('files')): fname = os.path.join(Path.data_path(), f) MakeDirs.parent_makedirs(fname) with open(fname, 'w') as o: o.write(value['contents']) os.utime(fname, (value['atime'], value['mtime'])) if Settings.get('execution', 'delete_backups_after_transfer'): try: shutil.rmtree(backup_directory) except: pass
def _get_files_to_transfer(path): files = set() directories = set() for p in path: f = os.path.join(Path.data_path(), p) if not os.path.exists(f): raise Exception("Command file %s doesn't exist.", f) walk = os.walk(f) if walk: directories.add(p) for root, _, fs in walk: if not root.startswith('.'): for ffs in fs: if (_TRANSFER_ALL_FILES or DataFileName.has_extension(ffs)): files.add(os.path.join(Path.data_path(), root, ffs)) LOGGER.vdebug('Transferring directory %s', p) else: LOGGER.vdebug('Transferring file %s', p) files.add(f) return _get_files_table(files), directories
def _scores(path, resolve=False, context='all', recursive=False, indent='', printed=False, top_level=True): if context == 'all': for c in Context.CONTEXTS: printed = _scores(path, resolve, c, recursive, indent) or printed else: context = Context.resolve(context) pathdir = os.path.join(Path.data_path(), context, 'score', path) if os.path.isdir(pathdir): printed_this_time = False for f in sorted(os.listdir(pathdir)): joined_f = os.path.join(pathdir, f) is_dir = os.path.isdir(joined_f) if not (is_dir or DataFileName.has_extension(f)): continue if not printed_this_time: printed_this_time = True if not printed: LOGGER.info(indent + ELEMENT_FORMAT, 'File name', ' Bytes', 'Accessed', 'Modified', 'Created') printed = True elif top_level: LOGGER.info('\n') if top_level: LOGGER.info(' %s/%s:', context, path) if is_dir: if recursive: LOGGER.info('') LOGGER.info(' %s/', f) if recursive: _scores(os.path.join(path, f), resolve, context, recursive, indent + INDENT, printed=True, top_level=False) LOGGER.info('') else: stat = os.stat(joined_f) LOGGER.info(indent + ELEMENT_FORMAT, ' ' + f, SizeName.size_name(stat.st_size), _time(stat.st_atime), _time(stat.st_mtime), _time(stat.st_ctime)) return printed