def login(self, user, psd): assert type(user) == str, 'input user not a string' assert type(psd) == str, 'input password not a string' if user == '' or psd == '': raise LogicError('name and password can\'t be empty.') self.send_msg('USER ' + user) res = self.expect_respond() code = self.get_res_code(res) if code == 230: return elif code in [331, 332]: self.send_msg('PASS ' + psd) res = self.expect_respond() code = self.get_res_code(res) if code == 230: self.status = self.STATUS_LOGGED # 获取一下目录 self.get_server_current_root() self.server_root = self.server_current_dir self.send_msg('TYPE I') code = self.get_res_code(self.expect_respond()) if code != 200: raise InternalError('Server rejected TYPE') return elif code == 202: raise LogicError('permission already granted') elif code == 530: raise LogicError('username or password unacceptable') else: raise LogicError( 'failed to login, see command prompt for infomation') else: raise LogicError('server denied the input user name')
def set_root(self, new_root): assert type(new_root) == str, 'input not a string' if os.path.isdir(new_root): self.root_directory = new_root self.console_log(0, 'local root changed to: ' + new_root) else: raise LogicError('wrong input')
def server_rename(self, from_name, to_name): assert type( from_name) == str and from_name != '', 'given old file name wrong' assert type( to_name) == str and to_name != '', 'given new file name wrong' self.send_msg('RNFR ' + from_name) res = self.expect_respond() code = self.get_res_code(res) if code != 350: raise LogicError('The server rejected, see command for info') self.send_msg('RNTO ' + to_name) res = self.expect_respond() code = self.get_res_code(res) if code != 250: raise LogicError('The server rejected, see command for info') self.console_log(0, 'server renamed %s to %s.' % (from_name, to_name))
def server_delete(self, name): assert type(name) == str and name != '', 'given dir name wrong' self.send_msg('RMD ' + name) res = self.expect_respond() code = self.get_res_code(res) if code != 250: raise LogicError('The server rejected, see command for info') self.console_log(0, 'server removed dir: ' + name)
def server_make_dir(self, dir_name): assert type(dir_name) == str and dir_name != '', 'given dir name wrong' self.send_msg('MKD ' + dir_name) res = self.expect_respond() code = self.get_res_code(res) if code not in [257, 250]: raise LogicError('The server rejected, see command for info') self.console_log(0, 'server created dir: ' + dir_name)
def rename_file(self, file_name): new_name,ok = QInputDialog.getText(self,'Input',"Please input a new file name: ", QLineEdit.Normal, file_name) if ok: if new_name == '' or new_name[0] == '/': raise LogicError('please input a legal file name') else: self.session.server_rename(file_name, new_name) self.update_cloud_file()
def make_dir(self): name,ok = QInputDialog.getText(self,'Input',"Please input a directory name: ", QLineEdit.Normal) if ok: if name == '' or name[0] == '/': raise LogicError('please input a legal dir name') else: self.session.server_make_dir(name) self.update_cloud_file()
def server_login(self, *args, **kwargs): if self.session.status == self.session.STATUS_LOGGED: raise LogicError('You have logged') name = self.userEdit.text() password = self.passwordEdit.text() # 登录,这时会自动获取目前的路径和总体的根目录 self.session.login(name, password) # 获取目录下所有文件 self.update_cloud_file() return
def change_trans_mode(self, ipaddr=''): if self.trans_mode == self.MODE_PASV: assert type(ipaddr) == str, 'input not a string' if ipaddr == '' or (not utility.is_address(ipaddr, 0)): raise LogicError('Input IP adress not legal') self.trans_mode = self.MODE_PORT self.console_log(0, 'transfer mode swtiched to PORT') else: self.trans_mode = self.MODE_PASV self.console_log(0, 'transfer mode swtiched to PASV') return
def connect(self, ip, port): if not utility.is_address(ip, port): raise LogicError('Input Ip or port format wrong.') self.console_log(0, 'connect to host: ' + str(ip) + '/' + str(port)) self.server_ip = ip self.server_port = port # 开始连接时才创建socket self.control_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: self.control_sock.connect((self.server_ip, self.server_port)) except: self.control_sock.close() self.control_sock = None raise LogicError('can\'t connect to server') code = self.get_res_code(self.expect_respond()) if code != 220: self.control_sock.close() self.control_sock = None raise LogicError('server refused!') self.status = self.STATUS_CONNECT return
def connect_server(self, *args, **kwargs): if self.session.status == self.session.STATUS_OFFLINE: ip = self.ipEdit.text() port = self.portEdit.text() if self.ipEdit.text() == '' or self.portEdit.text() == '': raise LogicError('Please input correct ip and port') self.session.connect(ip, int(port)) QMessageBox.information(self, 'Successful', 'Successfully connected', QMessageBox.Yes, QMessageBox.Yes) self.connect_btn.setText('disconnect') else: self.session.disconnect() self.clear_ui() QMessageBox.information(self, 'Successful', 'Successfully disconnected', QMessageBox.Yes, QMessageBox.Yes) self.connect_btn.setText('connect')