class PMRDialog(QtGui.QDialog): def __init__(self, use_external_git, parent=None): super(PMRDialog, self).__init__(parent) self._ui = Ui_PMRDialog() self._ui.setupUi(self) self._ui.searchWidget.setUseExternalGit(use_external_git) self._ui.settingsWidget.setUseExternalGit(use_external_git) pmr_info = PMR() self._pmr_tool = PMRTool(pmr_info, use_external_git) self._makeConnections() self._updateUi() def accept(self, *args, **kwargs): self._ui.settingsWidget.transferModel() return QtGui.QDialog.accept(self, *args, **kwargs) def _updateUi(self): pmr_info = PMR() self._pmr_tool.set_info(pmr_info) if self._pmr_tool.isActive(): if self._pmr_tool.hasAccess(): self._ui.loginStackedWidget.setCurrentIndex(1) else: self._ui.loginStackedWidget.setCurrentIndex(0) else: self._ui.loginStackedWidget.setCurrentIndex(2) def _makeConnections(self): self._ui.registerLabel.linkActivated.connect(self.register) self._ui.deregisterLabel.linkActivated.connect(self.deregister) self._ui.settingsWidget.hostChanged.connect(self._hostChanged) def _hostChanged(self, index): self._updateUi() def register(self, link): if link != 'mapclient.register': return dlg = AuthoriseApplicationDialog(self) dlg.setModal(True) dlg.exec_() self._updateUi() def deregister(self): pmr_info = PMR() self._pmr_tool.set_info(pmr_info) self._pmr_tool.deregister() self._updateUi()
class PMRRegisterDialog(QtGui.QDialog): def __init__(self, external_git, parent=None): super(PMRRegisterDialog, self).__init__(parent) self._ui = Ui_RegisterDialog() self._ui.setupUi(self) pmr_info = PMR() self._pmr_tool = PMRTool(pmr_info, external_git) self._makeConnections() self._updateUi() def _updateUi(self): pmr_info = PMR() self._pmr_tool.set_info(pmr_info) if self._pmr_tool.isActive(): self._ui.pushButtonRegister.setEnabled(True) if self._pmr_tool.hasAccess(): self._ui.stackedWidgetRegister.setCurrentIndex(1) else: self._ui.stackedWidgetRegister.setCurrentIndex(0) else: self._ui.pushButtonRegister.setEnabled(False) self._ui.stackedWidgetRegister.setCurrentIndex(0) def _makeConnections(self): self._ui.pushButtonRegister.clicked.connect(self._register) self._ui.pushButtonDeregister.clicked.connect(self._deregister) self._ui.settingsWidget.hostChanged.connect(self._hostChanged) def _register(self): dlg = AuthoriseApplicationDialog(self) dlg.setModal(True) dlg.exec_() self._updateUi() def _deregister(self): pmr_info = PMR() self._pmr_tool.set_info(pmr_info) self._pmr_tool.deregister() self._updateUi() def _hostChanged(self, index): self._updateUi() def accept(self, *args, **kwargs): self._ui.settingsWidget.transferModel() return QtGui.QDialog.accept(self, *args, **kwargs)
class PMRSearchDialog(QtGui.QDialog): """ Dialog for managing interaction with PMR. """ def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self._ui = Ui_PMRSearchDialog() self._ui.setupUi(self) pmr_info = PMR() self._pmrTool = PMRTool(pmr_info) self._annotationTool = AnnotationTool() self._makeConnections() self._updateUi() def _updateUi(self): if self._pmrTool.hasAccess(): self._ui.loginStackedWidget.setCurrentIndex(1) else: self._ui.loginStackedWidget.setCurrentIndex(0) def _makeConnections(self): self._ui.searchButton.clicked.connect(self._searchClicked) self._ui.registerLabel.linkActivated.connect(self.register) self._ui.deregisterLabel.linkActivated.connect(self.deregister) @handle_runtime_error @set_wait_cursor def _searchClicked(self): # Set pmrlib to go self._ui.searchResultsListWidget.clear() # fix up known terms to be full blown uri search_text = self._ui.searchLineEdit.text() search_terms = search_text.split() for term in search_terms: rdfterm = self._annotationTool.rdfFormOfTerm(term) if rdfterm: search_text = search_text + ' ' + rdfterm[1:-1] try: results = self._pmrTool.search(search_text) for r in results: if 'title' in r and r['title']: item = QtGui.QListWidgetItem( r['title'], self._ui.searchResultsListWidget) else: item = QtGui.QListWidgetItem( r['target'], self._ui.searchResultsListWidget) item.setData(QtCore.Qt.UserRole, r) except PMRToolError as e: message = convertExceptionToMessage(e) logger.warn('PMR Tool exception raised') logger.warn('Reason: {0}'.format(message)) def getSelectedWorkspace(self): items = self._ui.searchResultsListWidget.selectedItems() for item in items: return item.data(QtCore.Qt.UserRole) def register(self, link): if link != 'mapclient.register': return dlg = AuthoriseApplicationDialog(self) dlg.setModal(True) dlg.exec_() self._updateUi() def deregister(self): self._pmrTool.deregister() self._updateUi()
class PMRWorkflowWidget(QtGui.QWidget): ''' A Widget for importing and exporting to and from PMR. ''' def __init__(self, parent=None): ''' Constructor ''' super(PMRWorkflowWidget, self).__init__(parent) self._ui = Ui_PMRWorkflowWidget() self._ui.setupUi(self) self._pmrTool = PMRTool() self._termLookUpLimit = 32 self._timer = QtCore.QTimer() self._timer.setInterval(500) self._busy_waiting = False self._ontological_search = False word_list = ['pending ...'] self._list_model = OWLTermsListModel(word_list) # self._client = Client(site=pmr_target, use_default_headers=True) self._makeConnections() self._ui.comboBoxSearch.clear() self._ui.comboBoxSearch.addItems(search_domains) self._updateUi() def _updateUi(self): if self._pmrTool.hasAccess(): self._ui.labelLink.setText('<a href="mapclient.deregister">deregister</a>') else: self._ui.labelLink.setText('<a href="mapclient.register">register</a>') def _makeConnections(self): self._ui.pushButtonSearch.clicked.connect(self._searchClicked) self._ui.pushButtonImport.clicked.connect(self._importClicked) self._ui.pushButtonExport.clicked.connect(self._exportClicked) self._ui.labelLink.linkActivated.connect(self._linkActivated) self._ui.listWidgetResults.itemClicked.connect(self._searchResultClicked) self._ui.lineEditSearch.textEdited.connect(self._searchTextEdited) self._timer.timeout.connect(self._queryRepository) self._ui.comboBoxSearch.currentIndexChanged.connect(self._searchTypeChanged) def _initialiseCompleter(self): completer = QtGui.QCompleter(self._ui.lineEditSearch) completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion) completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) completer.setModel(self._list_model) completer.setCompletionColumn(0) completer.setCompletionRole(QtCore.Qt.DisplayRole) return completer def _searchTypeChanged(self, index): text = self._ui.comboBoxSearch.currentText() if text == ontological_search_string: self._ontological_search = True completer = self._initialiseCompleter() self._ui.lineEditSearch.setCompleter(completer) else: self._ontological_search = False self._ui.lineEditSearch.setCompleter(None) def _searchTextEdited(self, new_text): if self._ontological_search and len(new_text) and not self._busy_waiting: if self._timer.isActive(): QtGui.QApplication.restoreOverrideCursor() QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) self._timer.start() def _queryRepository(self): self._timer.stop() self._busy_waiting = True search_text = self._ui.lineEditSearch.text() pmr_target = info.PMRInfo().ipaddress target = pmr_target + '/pmr2_ricordo/owlterms' + '/%s/%d' % (search_text, self._termLookUpLimit) client = Client(site=pmr_target, use_default_headers=True) state = client(target=target) # , data=json.dumps({'actions': {'search': 1}, 'fields': {'simple_query': 'femur'}})) # , endpoint='ricordo', data='femur') response = state.value() descriptions = ['%s [%s]' % (line[0], line[1].split('#')[-1]) for line in response['results']] self._list_model.removeRows(0, self._list_model.rowCount()) self._list_model.insertRows(0, len(descriptions), descriptions) self._busy_waiting = False QtGui.QApplication.restoreOverrideCursor() def _searchResultClicked(self, item): r = item.data(QtCore.Qt.UserRole) if 'source' in r: self._ui.lineEditWorkspace.setText(r['source']) elif 'href' in r: self._ui.lineEditWorkspace.setText(r['href']) def _linkActivated(self, link): if link == 'mapclient.register': dlg = AuthoriseApplicationDialog(self) dlg.setModal(True) dlg.exec_() self._updateUi() elif link == 'mapclient.deregister': self._pmrTool.deregister() self._updateUi() def _searchClicked(self): self._doSearch(self._ui.comboBoxSearch.currentText()) def _importClicked(self): pass def _exportClicked(self): pass def setSearchDomain(self, domain=['all', ]): self._domain = [] if type(domain) is not list: domain = [domain] if len(domain) and domain[0] == 'all': domain = search_domains for subdomain in domain: if subdomain in search_domains: self._domain.append(subdomain) if len(self._domain): self._ui.comboBoxSearch.clear() for subdomain in self._domain: self._ui.comboBoxSearch.addItem(subdomain) def setExport(self, visible=True): if visible: self._ui.pushButtonExport.show() else: self._ui.pushButtonExport.hide() def setImport(self, visible=True): if visible: self._ui.pushButtonImport.show() else: self._ui.pushButtonImport.hide() def workspaceUrl(self): return self._ui.lineEditWorkspace.text() def setWorkspaceUrl(self, url): self._ui.lineEditWorkspace.setText(url) @handle_runtime_error @set_wait_cursor def _doSearch(self, search_type): # Set pmrlib to go self._ui.listWidgetResults.clear() # fix up known terms to be full blown uri search_text = self._ui.lineEditSearch.text() if True: search_text = self._ui.lineEditSearch.text() label_re = re.compile('\[([\w_\d]+)\]') re_result = label_re.search(search_text) if re_result: search_text = re_result.group(1) # search_terms = search_text.split() # for term in search_terms: # rdfterm = self._annotationTool.rdfFormOfTerm(term) # if rdfterm: # search_text = search_text + ' ' + rdfterm[1:-1] results = self._pmrTool.search(search_text, search_type) if search_type == workflow_search_string: results_list = results['results'] for r in results_list: item = QtGui.QListWidgetItem(r['obj']['title'], self._ui.listWidgetResults) item.setData(QtCore.Qt.UserRole, r) elif search_type == ontological_search_string: if type(results) is dict: return for r in results: label = r['label'] for sr in r['items']: item = QtGui.QListWidgetItem(sr['title'] + ' [%s, %s]' % (sr['value'], label), self._ui.listWidgetResults) tool_tip = 'Workspace title: %s, Ontological term: %s, Target: %s' % (sr['title'], label, sr['href']) item.setToolTip(tool_tip) item.setData(QtCore.Qt.UserRole, sr) else: for r in results: if 'title' in r and r['title']: item = QtGui.QListWidgetItem(r['title'], self._ui.listWidgetResults) else: item = QtGui.QListWidgetItem(r['target'], self._ui.listWidgetResults) item.setData(QtCore.Qt.UserRole, r)
class PMRWorkflowWidget(QtGui.QWidget): """ A Widget for importing and exporting to and from PMR. """ def __init__(self, use_external_git, parent=None): super(PMRWorkflowWidget, self).__init__(parent) self._ui = Ui_PMRWorkflowWidget() self._ui.setupUi(self) pmr_info = PMR() self._pmrTool = PMRTool(pmr_info, use_external_git) self._termLookUpLimit = 32 self._timer = QtCore.QTimer() self._timer.setInterval(500) self._busy_waiting = False self._ontological_search = False word_list = ['pending ...'] self._list_model = OWLTermsListModel(word_list) # self._client = Client(site=pmr_target, use_default_headers=True) self._makeConnections() self._ui.comboBoxSearch.clear() self._ui.comboBoxSearch.addItems(search_domains) self._updateUi() def _updateUi(self): if self._pmrTool.hasAccess(): self._ui.labelLink.setText('<a href="mapclient.deregister">deregister</a>') else: self._ui.labelLink.setText('<a href="mapclient.register">register</a>') def _makeConnections(self): self._ui.pushButtonSearch.clicked.connect(self._searchClicked) self._ui.pushButtonImport.clicked.connect(self._importClicked) self._ui.pushButtonExport.clicked.connect(self._exportClicked) self._ui.labelLink.linkActivated.connect(self._linkActivated) self._ui.listWidgetResults.itemClicked.connect(self._searchResultClicked) self._ui.lineEditSearch.textEdited.connect(self._searchTextEdited) self._timer.timeout.connect(self._queryRepository) self._ui.comboBoxSearch.currentIndexChanged.connect(self._searchTypeChanged) def _initialiseCompleter(self): completer = QtGui.QCompleter(self._ui.lineEditSearch) completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion) completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) completer.setModel(self._list_model) completer.setCompletionColumn(0) completer.setCompletionRole(QtCore.Qt.DisplayRole) return completer def _searchTypeChanged(self, index): text = self._ui.comboBoxSearch.currentText() if text == ontological_search_string: self._ontological_search = True completer = self._initialiseCompleter() self._ui.lineEditSearch.setCompleter(completer) else: self._ontological_search = False self._ui.lineEditSearch.setCompleter(None) def _searchTextEdited(self, new_text): if self._ontological_search and len(new_text) and not self._busy_waiting: if self._timer.isActive(): QtGui.QApplication.restoreOverrideCursor() QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) self._timer.start() def _queryRepository(self): self._timer.stop() self._busy_waiting = True search_text = self._ui.lineEditSearch.text() pmr_target = general.PMR().host() target = pmr_target + '/pmr2_ricordo/owlterms' + '/%s/%d' % (search_text, self._termLookUpLimit) client = Client(site=pmr_target, use_default_headers=True) state = client(target=target) # , data=json.dumps({'actions': {'search': 1}, 'fields': {'simple_query': 'femur'}})) # , endpoint='ricordo', data='femur') response = state.value() descriptions = ['%s [%s]' % (line[0], line[1].split('#')[-1]) for line in response['results']] self._list_model.removeRows(0, self._list_model.rowCount()) self._list_model.insertRows(0, len(descriptions), descriptions) self._busy_waiting = False def _searchResultClicked(self, item): r = item.data(QtCore.Qt.UserRole) if 'source' in r: self._ui.lineEditWorkspace.setText(r['source']) elif 'href' in r: self._ui.lineEditWorkspace.setText(r['href']) def _linkActivated(self, link): if link == 'mapclient.register': dlg = AuthoriseApplicationDialog(self) dlg.setModal(True) dlg.exec_() self._updateUi() elif link == 'mapclient.deregister': self._pmrTool.deregister() self._updateUi() def _searchClicked(self): self._doSearch(self._ui.comboBoxSearch.currentText()) def _importClicked(self): pass def _exportClicked(self): pass def setSearchDomain(self, domain=['all', ]): self._domain = [] if type(domain) is not list: domain = [domain] if len(domain) and domain[0] == 'all': domain = search_domains for subdomain in domain: if subdomain in search_domains: self._domain.append(subdomain) if len(self._domain): self._ui.comboBoxSearch.clear() for subdomain in self._domain: self._ui.comboBoxSearch.addItem(subdomain) def setExport(self, visible=True): if visible: self._ui.pushButtonExport.show() else: self._ui.pushButtonExport.hide() def setImport(self, visible=True): if visible: self._ui.pushButtonImport.show() else: self._ui.pushButtonImport.hide() def workspaceUrl(self): return self._ui.lineEditWorkspace.text() def setWorkspaceUrl(self, url): self._ui.lineEditWorkspace.setText(url) @handle_runtime_error @set_wait_cursor def _doSearch(self, search_type): # Set pmrlib to go self._ui.listWidgetResults.clear() # fix up known terms to be full blown uri search_text = self._ui.lineEditSearch.text() if True: search_text = self._ui.lineEditSearch.text() label_re = re.compile('\[([\w_\d]+)\]') re_result = label_re.search(search_text) if re_result: search_text = re_result.group(1) # search_terms = search_text.split() # for term in search_terms: # rdfterm = self._annotationTool.rdfFormOfTerm(term) # if rdfterm: # search_text = search_text + ' ' + rdfterm[1:-1] results = self._pmrTool.search(search_text, search_type) if search_type == workflow_search_string: results_list = results['results'] for r in results_list: item = QtGui.QListWidgetItem(r['obj']['title'], self._ui.listWidgetResults) item.setData(QtCore.Qt.UserRole, r) elif search_type == ontological_search_string: if type(results) is dict: return for r in results: label = r['label'] for sr in r['items']: item = QtGui.QListWidgetItem(sr['title'] + ' [%s, %s]' % (sr['value'], label), self._ui.listWidgetResults) tool_tip = 'Workspace title: %s, Ontological term: %s, Target: %s' % (sr['title'], label, sr['href']) item.setToolTip(tool_tip) item.setData(QtCore.Qt.UserRole, sr) else: for r in results: if 'title' in r and r['title']: item = QtGui.QListWidgetItem(r['title'], self._ui.listWidgetResults) else: item = QtGui.QListWidgetItem(r['target'], self._ui.listWidgetResults) item.setData(QtCore.Qt.UserRole, r)
class PMRSearchDialog(QtGui.QDialog): """ Dialog for managing interaction with PMR. """ def __init__(self, parent=None): """ Constructor """ QtGui.QDialog.__init__(self, parent) self._ui = Ui_PMRSearchDialog() self._ui.setupUi(self) self._pmrTool = PMRTool() self._annotationTool = AnnotationTool() self._makeConnections() self._updateUi() def _updateUi(self): if self._pmrTool.hasAccess(): self._ui.loginStackedWidget.setCurrentIndex(1) else: self._ui.loginStackedWidget.setCurrentIndex(0) def _makeConnections(self): self._ui.searchButton.clicked.connect(self._searchClicked) self._ui.registerLabel.linkActivated.connect(self.register) self._ui.deregisterLabel.linkActivated.connect(self.deregister) @handle_runtime_error @set_wait_cursor def _searchClicked(self): # Set pmrlib to go self._ui.searchResultsListWidget.clear() # fix up known terms to be full blown uri search_text = self._ui.searchLineEdit.text() search_terms = search_text.split() for term in search_terms: rdfterm = self._annotationTool.rdfFormOfTerm(term) if rdfterm: search_text = search_text + " " + rdfterm[1:-1] results = self._pmrTool.search(search_text) for r in results: if "title" in r and r["title"]: item = QtGui.QListWidgetItem(r["title"], self._ui.searchResultsListWidget) else: item = QtGui.QListWidgetItem(r["target"], self._ui.searchResultsListWidget) item.setData(QtCore.Qt.UserRole, r) def getSelectedWorkspace(self): items = self._ui.searchResultsListWidget.selectedItems() for item in items: return item.data(QtCore.Qt.UserRole) def register(self, link): if link != "mapclient.register": return dlg = AuthoriseApplicationDialog(self) dlg.setModal(True) dlg.exec_() self._updateUi() def deregister(self): self._pmrTool.deregister() self._updateUi()