コード例 #1
0
  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)
コード例 #2
0
ファイル: ControlerTree.py プロジェクト: antolu/LHCbDIRAC
 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)
コード例 #3
0
    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
コード例 #4
0
 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))
コード例 #5
0
 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
コード例 #6
0
 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!')
コード例 #7
0
 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()
コード例 #8
0
    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)
コード例 #9
0
 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()
コード例 #10
0
 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']})
コード例 #11
0
 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'])
コード例 #12
0
 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)
コード例 #13
0
 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)
コード例 #14
0
 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)
コード例 #15
0
 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)
コード例 #16
0
 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)
コード例 #17
0
 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)
コード例 #18
0
 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 )
コード例 #19
0
 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()
コード例 #20
0
 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)
コード例 #21
0
ファイル: ControlerTree.py プロジェクト: antolu/LHCbDIRAC
    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!')
コード例 #22
0
ファイル: ControlerTree.py プロジェクト: antolu/LHCbDIRAC
    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()
コード例 #23
0
 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()
コード例 #24
0
  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'])
コード例 #25
0
ファイル: ControlerTree.py プロジェクト: antolu/LHCbDIRAC
    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!
コード例 #26
0
ファイル: ControlerTree.py プロジェクト: antolu/LHCbDIRAC
    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)
コード例 #27
0
 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)
コード例 #28
0
 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()
コード例 #29
0
ファイル: ControlerTree.py プロジェクト: antolu/LHCbDIRAC
    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'])
コード例 #30
0
  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)