def messageFromChild(self, sender, message): """handles the messages send by the children controllers""" if message.action() == 'advancedSave': sel = message['selection'] fileName = sel['FileName'] if fileName.find('.py') < 0: fileName += '.py' model = self.getWidget().getModel() lfns = {} if len(self.__selectedFiles) >= 1: for i in self.__selectedFiles: lfns[i] = model[i] else: files = self.getWidget().getLFNs() for i in files: lfns[i] = model[i] message = Message({'action':'createCatalog', 'fileName':fileName, 'lfns':lfns, 'selection':sel, 'dataset':self.getDataSet()}) self.getParent().messageFromChild(self, message) elif message.action() == 'applyFilter': values = message['items'] self.getWidget().applyListFilter(values) else: return self.getParent().messageFromChild(self, message)
def _on_item_clicked(self, parentItem): """handles the action generated by clicking one of the tree node""" gLogger.debug('One item clicked') parentnode = parentItem.parent() if parentnode != None: parent = parentnode.getUserObject() controlers = self.getChildren() if parent.has_key('level') and parent.has_key('showFiles'): path = parent['fullpath'] message = Message({ 'action': 'expande', 'node': path, 'StartItem': 0, 'MaxItem': self.getPageSize() }) self.__pagesize += self.__offset feedback = self.getParent().messageFromChild(self, message) if feedback.action() == 'showNode': message = Message({'action': 'waitCursor', 'type': None}) self.getParent().messageFromChild(self, message) message = Message({ 'action': 'list', 'items': feedback['items'] }) ct = controlers['FileDialog'] ct.messageFromParent(message) message = Message({'action': 'arrowCursor', 'type': None}) self.getParent().messageFromChild(self, message)
def __getLogfile(self, message): """It returns the log file of the job which created the selected file. """ files = message['fileName'] if len(files) == 0: message = Message({ 'action': 'error', 'message': 'Please select a file' }) return message else: res = self.__bkClient.getLogfile(files[0]) if not res['OK']: message = Message({ 'action': 'error', 'message': res['Message'] }) return message else: value = res['Value'] files = value.split('/') logfile = '' for i in xrange(len(files) - 1): if files[i] != '': logfile += '/' + str(files[i]) name = files[len(files) - 1].split('_') if logfile.find('/' + str(name[2])) < 0: logfile += '/' + str(name[2]) message = Message({'action': 'showLog', 'fileName': logfile}) return message
def getancesstots(self): """handles the ancesstors action""" message = Message({'action':'getAnccestors', 'files':self.__selectedFiles[0]}) feedback = self.getParent().messageFromChild(self, message) action = feedback.action() if action == 'error': self.getWidget().showError(feedback['message']) elif action == 'showAncestors': controlers = self.getChildren() ct = controlers['HistoryDialog'] message = feedback['files'] message = Message({'action':'list', 'items':message}) feedback = ct.messageFromParent(message) else: self.getWidget().showError('Unkown message' + str(message))
def __getJobInformation(self, message): """ It returns the information of a job which created a given file. """ files = self.__bkClient.getJobInfo(message['fileName']) message = Message({'action': 'showJobInfos', 'items': files}) return message
def next(self): """handles the next button action""" self.getWidget().setBackButtonSatate(enable=True) if len(self.__comands) == self.__current: self.getWidget().setNextButtonState(enable=False) if len(self.__selectedFiles) > 0: self.__current += 1 if len(self.__comands) < self.__current: message = Message({ 'action': 'getAnccestors', 'files': self.__selectedFiles[0] }) feedback = self.getParent().messageFromChild(self, message) values = feedback['files'] headers = values['ParameterNames'] data = values['Records'] if len(data) == 0: self.getWidget().showError('This is the last file!') else: tm = self.getWidget().filltable( headers, data, self.getWidget().getFilesTableView()) hcommand = HistoryNavigationCommand( self.getWidget(), self.getWidget().getFilesTableView(), tm) self.__comands += [hcommand] hcommand.execute() else: hcommand = self.__comands[self.__current - 1] hcommand.execute() else: self.getWidget().showError('Please select a file!')
def close(self): """handles the close action""" widget = self.getWidget() indexes = widget.getListView().selectedIndexes() selected = [] if len(indexes) != 0: for i in indexes: item = i.data().toString() if str(item) in self.__model.getChildren().keys(): selected += [self.__model.getChildren()[str(item)]] else: i = -1 * int(item) if str(i) in self.__model.getChildren().keys(): selected += [self.__model.getChildren()[str(i)]] if len(selected) != 0: message = Message({ 'action': 'showOneProduction', 'paths': selected }) self.getParent().messageFromChild(self, message) else: QMessageBox.information( self.getWidget(), "More information...", "Please select a production or run number!", QMessageBox.Ok) widget.hide()
def selection(self, selected, deselected): """handles the selected data""" if selected: for i in selected.indexes(): row = i.row() data = i.model().arraydata[row][1] if data not in self.__selectedFiles: self.__selectedFiles = [data] message = Message({ 'action': 'JobInfo', 'fileName': self.__selectedFiles[0] }) feedback = self.getParent().messageFromChild(self, message) if feedback.action() == 'showJobInfos': values = feedback['items'] headers = ['Name', 'Value'] data = [] for i in values.keys(): j = values[i] if j == None: j = '' data += [[i, j]] self.getWidget().filltable(headers, data, self.getWidget().getJobTableView()) self.getWidget().setNextButtonState(enable=True) if deselected: row = deselected.indexes()[0].row() for i in deselected.indexes(): row = i.row() data = i.model().arraydata[row][0] if data in self.__selectedFiles: self.__selectedFiles.remove(data)
def saveButton(self): """handles the action of the save button""" widget = self.getWidget() filename = str(widget.getLineEdit().text()) if filename == '': QMessageBox.information(self.getWidget(), "Error...", "File name is missing!", QMessageBox.Ok) else: site = self.__sites[str(widget.getSite())] if site == None: QMessageBox.information(widget, "Error", 'Please select a site!', QMessageBox.Ok) return site = self.__sites[str(widget.getSite())] infos = { 'Site': site, 'pfn': widget.isPFNbuttonChecked(), 'lfn': widget.isLFNbuttonChecked(), 'FileName': filename } message = Message({'action': 'advancedSave', 'selection': infos}) self.getWidget().waitCursor() self.getParent().messageFromChild(self, message) self.getWidget().arrowCursor() widget.close()
def __getFileAncestor(self, message): """It used to navigate through the creation history of files. """ files = message['files'] if len(files) == 0: message = Message({ 'action': 'error', 'message': 'Please select a file or files!' }) return message res = self.__bkClient.getFileHistory(files) if not res['OK']: message = Message({'action': 'error', 'message': res['Message']}) return message else: return Message({'action': 'showAncestors', 'files': res['Value']})
def __handleList(self, message): """ It sends a message to its parent controller in order to retrieve the processing pass informations. """ item = message['items'] message = Message({'action':'procDescription', 'groupdesc':item['name']}) feedback = self.getParent().messageFromChild(self, message) self.__fillWidget(feedback, item['name'])
def __eventbasedquery(self): """It change the type of the Bookkeeping tree """ self.__bkClient.setParameter('Event type') controlers = self.getChildren() ct = controlers['TreeWidget'] items = self.root() message = Message({'action': 'removeTree', 'items': items}) return ct.messageFromParent(message)
def __runLookup(self): """It change the type of the bookkeeping query. """ self.__bkClient.setParameter('Runlookup') controlers = self.getChildren() items = self.root() ctProd = controlers['ProductionLookup'] message = Message({'action': 'list', 'items': items}) return ctProd.messageFromParent(message)
def __handleStandardQuery(self): """it sets the standard query in the GUI and the Bookkeeping client """ self.__bkClient.setAdvancedQueries(False) controlers = self.getChildren() ct = controlers['TreeWidget'] items = self.root() message = Message({'action': 'removeTree', 'items': items}) return ct.messageFromParent(message)
def start(self): """send the messages to the appropiate controllers""" items = self.root() if items != None: message = Message({'action': 'list', 'items': items}) controlers = self.getChildren() for controler in controlers: if controler == 'TreeWidget': ct = controlers[controler] ct.messageFromParent(message)
def __configurationbasedquery(self): """It change the type of the Bookkeeping tree. """ self.__bkClient.setParameter('Configuration') controlers = self.getChildren() ct = controlers['TreeWidget'] items = self.root() message = Message({'action': 'removeTree', 'items': items}) gLogger.debug('ControlerMain:Remove Tree') return ct.messageFromParent(message)
def __handleAdvancedquery(self): """ It sets the advanced query in the GUI and the bookkeeping client. """ self.__bkClient.setAdvancedQueries(True) items = self.root() controlers = self.getChildren() ct = controlers['TreeWidget'] message = Message({'action': 'removeTree', 'items': items}) return ct.messageFromParent(message)
def loggininginfo(self): """handles the login info action""" message = Message({'action':'logfile', 'fileName':self.__selectedFiles}) feedback = self.getParent().messageFromChild(self, message) action = feedback.action() if action == 'error': self.getWidget().showError(feedback['message']) elif action == 'showLog': fileName = feedback['fileName'] webbrowser.open( "http://lhcb-logs.cern.ch/storage%s" % fileName )
def all(self): """handles the all button action""" widget = self.getWidget() data = widget.getModel().getAllData() parent = Item({'fullpath': '/'}, None) for i in data: parent.addItem(self.__model.getChildren()[i]) message = Message({'action': 'showAllProduction', 'items': parent}) self.getParent().messageFromChild(self, message) self.getWidget().close()
def jobinfo(self): """handles the job info action""" if len(self.__selectedFiles) != 0: message = Message({'action':'JobInfo', 'fileName':self.__selectedFiles[0]}) feedback = self.getParent().messageFromChild(self, message) if feedback.action() == 'showJobInfos': controlers = self.getChildren() ct = controlers['HistoryDialog'] feedback = ct.messageFromParent(feedback) return S_ERROR(feedback)
def browsePath(self, path): """browse the path""" info = path.split(':/') if len(info) > 1: prefix = info[0] path = info[1] message = Message({'action': 'BookmarksPrefices'}) feedback = self.getParent().messageFromChild(self, message) if feedback['OK']: curentprefix = feedback['Value'] if curentprefix != prefix: answer = QMessageBox.information( self.getWidget(), "Different query or query type", " Do you want to refresh the tree? If yes, Your selection will lost!!!", QMessageBox.Yes, QMessageBox.No) if answer == QMessageBox.Yes: qType = prefix.split('+') if qType[0] == 'sim': self.configButton() self.getWidget().setSimRadioButton() elif qType[0] == 'evt': self.eventTypeButton() self.getWidget().setEvtButton() elif qType[0] == 'prod': self.productionRadioButton() self.getWidget().setProdButton() elif qType[0] == 'run': self.runRadioButton() self.getWidget().setRunButton() if qType[1] == 'std': self.standardQuery() self.getWidget().setStandardQueryValue() elif qType[1] == 'adv': self.advancedQuery() self.getWidget().setAdvancedQueryValue() self.__openTreeNodes(path) elif answer == QMessageBox.No: return else: self.__openTreeNodes(path) else: QMessageBox.critical(self.getWidget(), "Error", str(feedback['Message']), QMessageBox.Ok) gLogger.error(feedback['Message']) else: QMessageBox.critical(self.getWidget(), "Error", 'Wrong path!', QMessageBox.Ok) gLogger.error('Wrong path!')
def advancedQuery(self): """handles the action of the advanced query check box""" widget = self.getWidget() if not widget.runLookupRadioButtonIsChecked( ) and not widget.productionLookupradiobuttonIschecked(): message = Message({'action': 'AdvancedQuery'}) self.getParent().messageFromChild(self, message) self.getWidget().setStandardQueryValue() else: self.getWidget().setStandardQueryValue()
def close(self): """handles the action of the close button""" checkboxes = self.getWidget().getCheckBoses() values = {} for i in checkboxes: if i.checkState() == Qt.Checked: values[str(i.text())] = True elif i.checkState() == Qt.Unchecked: values[str(i.text())] = False message = Message({'action': 'changeQualities', 'Values': values}) self.getParent().messageFromChild(self, message) self.getWidget().close()
def __handleDetailedList(self, message): """ It sends a message to its parent controller in order to retrieve a detailed processing pass informations. """ item = message['items'] bkDict = item['selection'] bkDict['FileType'] = item['name'] message = Message({'action':'detailedProcessingPassDescription', 'bkDict':bkDict}) feedback = self.getParent().messageFromChild(self, message) self.__fillWidget(feedback, bkDict['ProcessingPass'])
def messageFromChild(self, sender, message): """handles the messages sent by the children controllers""" if message.action() == 'getLimitedFiles': message = Message({ 'action': 'expande', 'node': message['path'], 'StartItem': self.__pagesize, 'MaxItem': (self.__pagesize + self.__offset) }) self.__pagesize += self.__offset feedback = self.getParent().messageFromChild(self, message) if feedback.action() == 'showNode': controlers = self.getChildren() ct = controlers['FileDialog'] message = Message({ 'action': 'listNextFiles', 'items': feedback['items'] }) ct.messageFromParent(message) elif message.action() == 'PageSizeIsNull': self.__offset = 0 self.__pagesize = 0 elif message.action() == 'openPathLocation': path = message['Path'] self.browsePath(path) else: return self.getParent().messageFromChild( self, message) # send to main controler!
def moreInformations(self): """handles the more information action""" currentItem = self.getWidget().getTree().getCurrentItem() node = currentItem.getUserObject() controlers = self.getChildren() ct = controlers['InfoDialog'] if node != None: if 'level' in node and node['level'] == 'Processing Pass': ctproc = controlers['ProcessingPassDialog'] message = Message({'action': 'list', 'items': node}) ctproc.messageFromParent(message) elif 'level' in node and node['level'] == 'FileTypes': ctproc = controlers['ProcessingPassDialog'] message = Message({'action': 'deatiledList', 'items': node}) ctproc.messageFromParent(message) elif node.has_key( 'level') and node['level'] == 'Production(s)/Run(s)': message = Message({ 'action': 'ProductionInformations', 'production': node['name'] }) feedback = self.getParent().messageFromChild(self, message) if feedback != None: message = Message({ 'action': 'showprocessingpass', 'items': feedback }) ctproc = controlers['ProcessingPassDialog'] ctproc.messageFromParent(message) elif type(node) != types.DictType and node.expandable(): message = Message({'action': 'list', 'items': node}) ct.messageFromParent(message) else: QMessageBox.critical( self.getWidget(), "Info", 'Please right click on the folder to see more information!', QMessageBox.Ok)
def okPressed(self): """handles the action of the ok button""" widget = self.getWidget() indexes = widget.getListView().selectedIndexes() selected = [] if len(indexes) != 0: for i in indexes: item = str(i.data().toString()) selected += [item] if len(selected) != 0: message = Message({'action':'applyFilter', 'items':selected}) self.getParent().messageFromChild(self, message) else: QMessageBox.information(self.getWidget(), "More information...", "Please select TCKs", QMessageBox.Ok)
def okButton(self): """handles the action when the ok button pressed""" self.getWidget().waitCursor() title = self.getWidget().getTitle() path = self.getWidget().getPath() if len(path.split(':/')) > 0: message = Message({'action':'addBookmarks', 'bookmark':{'Title':title, 'Path':path}}) feedback = self.getParent().messageFromChild(self, message) if not feedback['OK']: gLogger.error(feedback['Message']) else: self.getWidget().close() else: gLogger.error('Wrong path!') self.getWidget().arrowCursor()
def bookmarks(self): """handles the bookmarks action""" currentItem = self.getWidget().getTree().getCurrentItem() curent = currentItem path = '' nodes = [curent] while curent != None: curent = curent.parent() nodes += [curent] nodes.reverse() for i in nodes: if i != None: node = i.getUserObject() if node != None and node.has_key('name'): path += '/' + node['name'] message = Message({'action': 'BookmarksPrefices'}) feedback = self.getParent().messageFromChild(self, message) if not feedback['OK']: gLogger.error(feedback['Message']) else: values = feedback['Value'] controlers = self.getChildren() ct = controlers['Bookmarks'] fullpath = values + ':/' + path message = Message({ 'action': 'showValues', 'paths': { 'Title': path, 'Path': fullpath } }) feedback = ct.messageFromParent(message) if not feedback['OK']: gLogger.error(feedback['Message'])
def __list(self, message): """list a directory""" items = message['items'].getChildren() self.getWidget().updateModel(items) # I have to save files. self.getWidget().setPath(message['items']['fullpath']) self.__selectedFiles = [] res = self.getWidget().showData(items) keys = items.keys() if len(keys) > 0: value = items[keys[0]] self.setDataSet(value['selection']) self.getWidget().showSelection(value['selection']) if res: events = self.countNumberOfEvents(items) self.getWidget().showNumberOfEvents(events) nbfiles = self.countNumberOfFiles(items) self.getWidget().showNumberOfFiles(nbfiles) eventinputstat = self.countNumberOfEventInputStat(items) self.getWidget().showEventInputStat(eventinputstat) filesize = self.getSizeOfFiles(items) self.getWidget().showFilesSize(filesize) totalLumy = self.countTotalLuminosity(items) self.getWidget().showTotalLuminosity(totalLumy) luminosity = self.countLuminosity(items) self.getWidget().showLuminosity(luminosity) self.getWidget().show() tcks = self.makeTCKlist(items) self.getWidget().fillTckFilter(tcks) # The combobox and the filter listview will be filled # using the TCK values from the files message = Message({'action':'list', 'items':tcks}) controlers = self.getChildren() controlers['TckFilterWidget'].messageFromParent(message) else: QMessageBox.information(self.getWidget(), "No data selected!!!", "You have to open Setting/DataQuality menu item and you have to \ select data quality flag(s)!", QMessageBox.Ok)