def __init__(self, parent): super().__init__(parent) self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.lineEditTitle.textChanged.connect(self.enable_submit) self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit) self.ui.pushButtonSubmit.clicked.connect(self.submit) self.enable_submit()
def __init__(self, parent, title='', description=''): super().__init__(parent) self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.lineEditTitle.textChanged.connect(self.enable_submit) self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit) self.ui.pushButtonSubmit.clicked.connect(self.submit) self.ui.lineEditTitle.setText(title) self.ui.plainTextEditDesc.setPlainText(description) self.enable_submit()
def __init__(self, parent, title='', description=''): super().__init__(parent) self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.lineEditTitle.textChanged.connect(self.enable_submit) self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit) self.ui.pushButtonSubmit.clicked.connect(self.submit) self.ui.pushButtonSendEmail.clicked.connect(self.send_email) self.ui.lineEditTitle.setText(title) self.ui.plainTextEditDesc.setPlainText(description) self.enable_submit() _logger().info('System informations:\n%s', self.get_system_infos())
class DlgReportBug(QtWidgets.QDialog): def __init__(self, parent, title='', description=''): super().__init__(parent) self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.lineEditTitle.textChanged.connect(self.enable_submit) self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit) self.ui.pushButtonSubmit.clicked.connect(self.submit) self.ui.pushButtonSendEmail.clicked.connect(self.send_email) self.ui.lineEditTitle.setText(title) self.ui.plainTextEditDesc.setPlainText(description) self.enable_submit() _logger().info('System informations:\n%s', self.get_system_infos()) def enable_submit(self, *_): self.ui.pushButtonSubmit.setEnabled( self.ui.lineEditTitle.text().strip() != '' and self.ui.plainTextEditDesc.toPlainText().strip() != '') self.ui.pushButtonSendEmail.setEnabled( self.ui.pushButtonSubmit.isEnabled()) def _get_data(self): title = self.ui.lineEditTitle.text().strip() description = self.ui.plainTextEditDesc.toPlainText().strip() bug = self.ui.radioButtonBug.isChecked() if bug: title = '[Bug] %s' % title description = BUG_DESCRIPTION % ( description, self.get_system_infos(), self.get_application_log()) else: title = '[Enhancement] %s' % title return {'title': title, 'body': description} def submit(self): data = self._get_data() username, password, remember = self.get_user_credentials() if not username or not password: return try: gh = github.GitHub(username=username, password=password) repo = gh.repos('OpenCobolIDE')('OpenCobolIDE') ret = repo.issues.post(title=data['title'], body=data['body']) except github.ApiError: _logger().exception('failed to send bug report') QtWidgets.QMessageBox.warning( self, 'Failed to create issue', 'Failed to create github issue, see the application log for ' 'more information...') else: issue_nbr = ret['number'] ret = QtWidgets.QMessageBox.question( self, 'Issue created on github', 'Issue successfully created. Would you like to open the ticket' ' in your web browser?') if ret == QtWidgets.QMessageBox.Yes: webbrowser.open( 'https://github.com/OpenCobolIDE/OpenCobolIDE/issues/%d' % issue_nbr) self.accept() def send_email(self): data = self._get_data() url = QtCore.QUrl("mailto:%s?subject=%s&body=%s" % (EMAIL_ADDRESS, data['title'], data['body'])) QtGui.QDesktopServices.openUrl(url) def get_user_credentials(self): remember = Settings().remember_github_credentials username = Settings().github_username if remember and username: return username, keyring.get_password('github', username), remember else: username, password, remember = DlgGitHubLogin.login(self) if remember: Settings().remember_github_credentials = remember Settings().github_username = username keyring.set_password('github', username, password) return username, password, remember @classmethod def report_bug(cls, parent, title='', description=''): dlg = cls(parent, title=title, description=description) dlg.exec_() def get_system_infos(self): try: import qdarkstyle except ImportError: qdarkstyle_version = 'Not installed' else: qdarkstyle_version = qdarkstyle.__version__ def get_linux_distro(): try: out = str(subprocess.check_output(['lsb_release', '-i']), locale.getpreferredencoding()) except OSError: distro = platform.linux_distribution()[0] if not distro: distro = 'linux distribution not found' else: distro = out.split(':')[1].strip() return distro system_info = platform.system() if 'linux' in sys.platform.lower(): system_info = get_linux_distro() elif 'darwin' in sys.platform.lower(): system_info = 'Mac OS X %s' % platform.mac_ver()[0] return '\n'.join([ '- Operating System: %s' % system_info, '- OpenCobolIDE: %s' % __version__, '- GnuCOBOL: %s' % GnuCobolCompiler().get_version( include_all=False), '- Python: %s (%dbits)' % (platform.python_version(), 64 if sys.maxsize > 2**32 else 32), '- Qt: %s' % QtCore.QT_VERSION_STR, '- PyQt: %s' % QtCore.PYQT_VERSION_STR, '- pyqode.core: %s' % pyqode.core.__version__, '- pyqode.cobol: %s' % pyqode.cobol.__version__, '- pyqode.qt: %s' % pyqode.qt.__version__, '- pygments: %s' % pygments.__version__, '- QDarkStyle: %s' % qdarkstyle_version ]) def get_application_log(self): try: with open(logger.get_path(), 'r') as f: content = f.read() lines = [] for l in content.splitlines(): if l.strip(): lines.append(l) return '\n'.join(lines[-100:]) except FileNotFoundError: return ''
class DlgReportBug(QtWidgets.QDialog): def __init__(self, parent, title='', description=''): super().__init__(parent) self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.lineEditTitle.textChanged.connect(self.enable_submit) self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit) self.ui.pushButtonSubmit.clicked.connect(self.submit) self.ui.lineEditTitle.setText(title) self.ui.plainTextEditDesc.setPlainText(description) self.enable_submit() def enable_submit(self, *_): self.ui.pushButtonSubmit.setEnabled( self.ui.lineEditTitle.text().strip() != '' and self.ui.plainTextEditDesc.toPlainText().strip() != '') def submit(self): title = self.ui.lineEditTitle.text().strip() description = self.ui.plainTextEditDesc.toPlainText().strip() bug = self.ui.radioButtonBug.isChecked() if bug: title = '[Bug] %s' % title description = BUG_DESCRIPTION % (description, self.get_system_infos()) else: title = '[Enhancement] %s' % title url_data = urllib.parse.urlencode({ 'title': title, 'body': description }) url = 'https://github.com/OpenCobolIDE/OpenCobolIDE/issues/new?' + \ url_data QtWidgets.QMessageBox.information( self, 'Complete bug report on www.github.com', 'To complete the report process, we need you to submit the ' 'generated ticket on our issue tracker. We will open a browser to ' 'our tracker, you just need to login with your github account and ' 'press the submit button at the end of the page.') try: QtGui.QDesktopServices.openUrl(QtCore.QUrl.fromEncoded(url)) except TypeError: QtGui.QDesktopServices.openUrl( QtCore.QUrl.fromEncoded(bytes(url, 'utf-8'))) self.accept() @classmethod def report_bug(cls, parent, title='', description=''): dlg = cls(parent, title=title, description=description) dlg.exec_() def get_system_infos(self): try: import qdarkstyle except ImportError: qdarkstyle_version = 'Not installed' else: qdarkstyle_version = qdarkstyle.__version__ system = platform.system() is_linux = system.lower() == 'linux' return '\n'.join([ '- Operating System: %s' % system + ' (' + ' '.join(platform.linux_distribution()) + ')' if is_linux else '', '- OpenCobolIDE: %s' % __version__, '- GnuCOBOL: %s' % GnuCobolCompiler().get_version(), '- Python: %s (%dbits)' % (platform.python_version(), 64 if sys.maxsize > 2**32 else 32), '- Qt: %s' % QtCore.QT_VERSION_STR, '- PyQt: %s' % QtCore.PYQT_VERSION_STR, '- pyqode.core: %s' % pyqode.core.__version__, '- pyqode.cobol: %s' % pyqode.cobol.__version__, '- pyqode.qt: %s' % pyqode.qt.__version__, '- pygments: %s' % pygments.__version__, '- QDarkStyle: %s' % qdarkstyle_version ]) def get_application_log(self): with open(logger.get_path(), 'r') as f: return f.read()
class DlgReportBug(QtWidgets.QDialog): def __init__(self, parent, title='', description=''): super().__init__(parent) self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.lineEditTitle.textChanged.connect(self.enable_submit) self.ui.plainTextEditDesc.textChanged.connect(self.enable_submit) self.ui.pushButtonSubmit.clicked.connect(self.submit) self.ui.lineEditTitle.setText(title) self.ui.plainTextEditDesc.setPlainText(description) self.enable_submit() def enable_submit(self, *_): self.ui.pushButtonSubmit.setEnabled( self.ui.lineEditTitle.text().strip() != '' and self.ui.plainTextEditDesc.toPlainText().strip() != '') def submit(self): title = self.ui.lineEditTitle.text().strip() description = self.ui.plainTextEditDesc.toPlainText().strip() bug = self.ui.radioButtonBug.isChecked() if bug: title = '[Bug] %s' % title description = BUG_DESCRIPTION % ( description, self.get_system_infos()) else: title = '[Enhancement] %s' % title url_data = urllib.parse.urlencode( {'title': title, 'body': description}) url = 'https://github.com/OpenCobolIDE/OpenCobolIDE/issues/new?' + \ url_data QtWidgets.QMessageBox.information( self, 'Complete bug report on www.github.com', 'To complete the report process, we need you to submit the ' 'generated ticket on our issue tracker. We will open a browser to ' 'our tracker, you just need to login with your github account and ' 'press the submit button at the end of the page.') try: QtGui.QDesktopServices.openUrl(QtCore.QUrl.fromEncoded(url)) except TypeError: QtGui.QDesktopServices.openUrl(QtCore.QUrl.fromEncoded(bytes( url, 'utf-8'))) self.accept() @classmethod def report_bug(cls, parent, title='', description=''): dlg = cls(parent, title=title, description=description) dlg.exec_() def get_system_infos(self): try: import qdarkstyle except ImportError: qdarkstyle_version = 'Not installed' else: qdarkstyle_version = qdarkstyle.__version__ system = platform.system() is_linux = system.lower() == 'linux' return '\n'.join([ '- Operating System: %s' % system + ' (' + ' '.join(platform.linux_distribution()) + ')' if is_linux else '', '- OpenCobolIDE: %s' % __version__, '- GnuCOBOL: %s' % GnuCobolCompiler().get_version(), '- Python: %s (%dbits)' % (platform.python_version(), 64 if sys.maxsize > 2**32 else 32), '- Qt: %s' % QtCore.QT_VERSION_STR, '- PyQt: %s' % QtCore.PYQT_VERSION_STR, '- pyqode.core: %s' % pyqode.core.__version__, '- pyqode.cobol: %s' % pyqode.cobol.__version__, '- pyqode.qt: %s' % pyqode.qt.__version__, '- pygments: %s' % pygments.__version__, '- QDarkStyle: %s' % qdarkstyle_version ]) def get_application_log(self): with open(logger.get_path(), 'r') as f: return f.read()