def download_file(self, remote, local): """Downloads remote files to local path. :param remote: (str) Remote path. :param local: (str) Local path. :return: (bool) True on success, False on failure. """ if not self.isfile_remote(remote): return self.err(1, remote) if not hasstring(local): return self.err(2, local) if isdir(local) and local[-1] != '/': local += '/' if local[-1] == '/': local += remote.split('/')[:-1] if not isdir('/'.join(local.split('/')[:-1]), True): return self.err(3, local) try: self.connection.get(remote, local) return True except Exception: _, message = getexcept() return self.err(4, message)
def download_dir(self, remote, local): """Downloads remote directories to local path. :param remote: (str) Remote path. :param local: (str) Local path. :return: (bool) True on success, False on failure. """ if not self.isdir_remote(remote): return self.err(1, remote) if isfile(local): return self.err(2, local) if not isdir(local, True): return self.err(3, local) if remote[-1] == '/': remote = remote[:-1] if local[-1] == '/': local = local[:-1] remote_c = len(remote) for root, dirs, files in self.walk_remote(remote): local_root = local + root[remote_c:] if not isdir(local_root, True): return self.err(4, local_root) for name in dirs: local_dir = local_root + '/' + name if not isdir(local_dir, True): return self.err(5, local_dir) try: for name in files: local_file = local_root + '/' + name self.connection.get(root + '/' + name, local_file) except Exception: _, message = getexcept() self.err(6, local_file) return self.err(7, message) return True
def upload_dir(self, local, remote): """Uploads local directories to remote host. Source: https://www.tutorialspoint.com/python/os_walk.htm :param local: (str) Local path. :param remote: (str) Remote path. :return: (bool) True on success, False on failure. """ if not isdir(local): return self.err(1, local) if self.isfile_remote(remote): return self.err(2, remote) if not self.isdir_remote(remote, True): return self.err(3, remote) if local[-1] == '/': local = local[:-1] if remote[-1] == '/': remote = remote[:-1] local_c = len(local) for root, dirs, files in os.walk(local, topdown=False): remote_root = remote + root[local_c:] if not self.mkdir_remote(remote_root): return self.err(4, remote_root) for name in dirs: remote_dir = remote_root + '/' + name if not self.mkdir_remote(remote_dir): return self.err(5, remote_dir) try: for name in files: remote_file = remote_root + '/' + name self.connection.put(root + '/' + name, remote_file) except Exception: _, message = getexcept() self.err(6, remote_file) return self.err(7, message) return True
def upload(self, local, remote): """Uploads local files or directories to remote host. :param local: (str) Local path. :param remote: (str) Remote path. :return: (bool) True on success, False on failure. """ if not hasstring(remote): return self.err(1) if isfile(local): return self.upload_file(local, remote) if isdir(local): return self.upload_dir(local, remote) return False
def writejson(filename, data): """Saves the (dict) data to JSON file. :param filename: (str) Filename to write JSON to. :param data: (dict) Dict to save to JSON file. :return: (bool) True on success, False on failure. """ if not hasstring(filename): return False if not isdir('/'.join(filename.split('/')[:-1]), True): return False if not isinstance(data, dict): return False try: with open(filename, 'w') as handler: json.dump(data, handler) except IOError: return getexcept() return True
def writefile(filename, lines): """Saves lines to file. :param filename: (str) File to write. :param lines: (list) List of lines to write. :return: (bool) True on success, False on failure. """ if not isdir('/'.join(filename.split('/')[:-1]), True): return False if not haslist(lines): return False try: handler = open(filename, 'w') for line in lines: handler.write(line + '\n') handler.close() return True except Exception: return getexcept() return False
def test_isdir(self): """Test if input is directory. """ none0 = None int0 = 0 int1 = 1 int2 = -1 str0 = '' str1 = 'abcd' list0 = [] list1 = ['ab', 'cd'] dict0 = {} dict1 = {'ab': 'cd'} set0 = set() set1 = set(['a', 'b', 1, 2]) tuple0 = () tuple1 = ('a', 'b', 1, 2) self.assertFalse(valid.isdir(none0)) self.assertFalse(valid.isdir(int0)) self.assertFalse(valid.isdir(int1)) self.assertFalse(valid.isdir(int2)) self.assertFalse(valid.isdir(str0)) self.assertFalse(valid.isdir(str1)) self.assertFalse(valid.isdir(list0)) self.assertFalse(valid.isdir(list1)) self.assertFalse(valid.isdir(dict0)) self.assertFalse(valid.isdir(dict1)) self.assertFalse(valid.isdir(set0)) self.assertFalse(valid.isdir(set1)) self.assertFalse(valid.isdir(tuple0)) self.assertFalse(valid.isdir(tuple1)) directory0 = '/' directory1 = '/abcd' self.assertTrue(valid.isdir(directory0)) # assertTrue self.assertFalse(valid.isdir(directory1))