from PyQt4 import QtGui, QtCore import socket import re class SetRemoteDialog(QtGui.QDialog): remote_mode = True remote_url = "" dowload_thead_num = 4 server_image_list = None def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.resize(320, 100) self.setWindowTitle('set remote db') self.remote_cb = QtGui.QCheckBox("use remote database") if self.__class__.remote_mode: self.remote_cb.toggle() self.remote_cb.stateChanged.connect(self.set_remote_mode) grid = QtGui.QGridLayout() grid.addWidget(self.remote_cb, 0, 0, 1, 1) grid.addWidget( QtGui.QLabel( u'dowload image thread num', parent=self), 1, 0, 1, 1) self.thread_num = QtGui.QSpinBox() self.thread_num.setRange(1, 10) self.thread_num.setValue(self.__class__.dowload_thead_num) self.thread_num.valueChanged.connect(self.set_thread_num) grid.addWidget(self.thread_num, 1, 1, 1, 1) grid.addWidget( QtGui.QLabel( u'remote db url[123.57.438.245/]', parent=self), 2, 0, 1, 1) self.remote_url_line = QtGui.QLineEdit(parent=self) if self.__class__.remote_url: self.remote_url_line.setText(self.__class__.remote_url) grid.addWidget(self.remote_url_line, 2, 1, 1, 1) grid.addWidget( QtGui.QLabel( u'remote image list', parent=self), 3, 0, 1, 1) self.server_image_list = QtGui.QLineEdit(parent=self) if self.__class__.server_image_list: self.server_image_list.setText(self.__class__.server_image_list) grid.addWidget(self.server_image_list, 3, 1, 1, 1) buttonBox = QtGui.QDialogButtonBox(parent=self) buttonBox.setOrientation(QtCore.Qt.Horizontal) buttonBox.setStandardButtons( QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Ok) buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.reject) layout = QtGui.QVBoxLayout() layout.addLayout(grid) spacerItem = QtGui.QSpacerItem( 20, 48, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) layout.addItem(spacerItem) layout.addWidget(buttonBox) self.setLayout(layout) def test_remote_url(self, url, port): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5) sock.connect((url, port)) return True except socket.error as e: return False finally: sock.close() def set_remote_mode(self, state): if state == QtCore.Qt.Checked: self.__class__.remote_mode = True else: self.__class__.remote_mode = False def set_thread_num(self, num): self.__class__.dowload_thead_num = num def get_thread_num(self): return self.__class__.dowload_thead_num def is_in_remote_mode(self): return self.__class__.remote_mode def get_server_image_list(self): if self.server_image_list is not None: return self.server_image_list.text() else: QtGui.QMessageBox.about( self, "server image list!", "the server image list is None!") def get_remote_url(self): origin_url = self.remote_url_line.text() if re.match(r'\w.+$', origin_url): if self.test_remote_url(origin_url.split('/')[0], 80): self.__class__.remote_url = origin_url return self.__class__.remote_url else: QtGui.QMessageBox.about( self, "server connect error!", "can not connect the server") else: QtGui.QMessageBox.about( self, "url format error!", "the url is not in the correct format \n such as 1.1.1.1/sf/")