def __populate(self, binContent, props): """Populates binary view""" address = 0 currentLine = '' asciiLine = '' for char in binContent: if address % 16 == 0: currentLine = hex(address).lstrip('0x').rstrip('L').rjust( 8, '0') + ' ' currentLine += hex(char).lstrip('0x').rjust(2, '0') + ' ' if char < 32: asciiLine += '.' else: charRepr = chr(char) if len(repr(charRepr)) > 3: asciiLine += '.' else: asciiLine += charRepr address += 1 if address % 8 == 0: currentLine += ' ' if address % 16 == 0: self.__textEdit.appendPlainText(currentLine + '|' + asciiLine + '|') currentLine = '' asciiLine = '' if currentLine: self.__textEdit.appendPlainText( currentLine.ljust(60, ' ') + '|' + asciiLine + '|') props.append(('Size', splitThousands(str(address)) + ' bytes'))
def __process( self ): " Accumulation process " self.__inProgress = True if self.__fName is not None: if os.path.exists( self.__fName ): if os.path.isdir( self.__fName ): self.__fName = os.path.realpath( self.__fName ) if not self.__fName.endswith( os.path.sep ): self.__fName += os.path.sep files = [] self.__scannedDirs = [] QApplication.setOverrideCursor( QCursor( Qt.WaitCursor ) ) self.__scanDir( self.__fName, files ) QApplication.restoreOverrideCursor() else: files = [ self.__fName ] else: files = [] elif self.__editor is not None: files = [ "buffer" ] else: files = GlobalData().project.filesList self.progressBar.setRange( 0, len( files ) ) accumulator = LinesCounter() current = LinesCounter() index = 1 for fileName in files: if self.__cancelRequest: self.__inProgress = False self.close() return self.infoLabel.setPath( 'Processing: ' + fileName ) processed = False if self.__editor is not None: current.getLinesInBuffer( self.__editor ) processed = True else: if (fileName.endswith( '.py' ) or \ fileName.endswith( '.py3' ) or \ fileName.endswith( '.pyw' )) and \ os.path.exists( fileName ): current.getLines( fileName ) processed = True if processed: accumulator.files += current.files accumulator.filesSize += current.filesSize accumulator.codeLines += current.codeLines accumulator.emptyLines += current.emptyLines accumulator.commentLines += current.commentLines accumulator.classes += current.classes self.progressBar.setValue( index ) index += 1 QApplication.processEvents() self.infoLabel.setPath( 'Done' ) self.__inProgress = False # Update text in the text window nFiles = splitThousands( str( accumulator.files ) ) filesSize = splitThousands( str( accumulator.filesSize ) ) classes = splitThousands( str( accumulator.classes ) ) codeLines = splitThousands( str( accumulator.codeLines ) ) emptyLines = splitThousands( str( accumulator.emptyLines ) ) commentLines = splitThousands( str( accumulator.commentLines ) ) totalLines = splitThousands( str( accumulator.codeLines + accumulator.emptyLines + accumulator.commentLines ) ) output = "Classes: " + classes + "\n" \ "Code lines: " + codeLines + "\n" \ "Empty lines: " + emptyLines + "\n" \ "Comment lines: " + commentLines + "\n" \ "Total lines: " + totalLines if self.__editor is None: output = "Number of python files: " + nFiles + "\n" \ "Total files size: " + filesSize + " bytes\n" + \ output else: output = "Number of characters: " + filesSize + "\n" + \ output self.resultEdit.setText( output ) return
def showReport(self, metrics, reportOption, fileName, uuid): " Shows the pymetrics results " self.__clear() self.__noneLabel.hide() self.__report = metrics self.__reportUUID = uuid self.__reportFileName = fileName self.__reportOption = reportOption if len(metrics.report) > 1: accumulatedBasic = self.__accumulateBasicMetrics() accItem = QTreeWidgetItem(["Cumulative basic metrics"]) self.__totalResultsTree.addTopLevelItem(accItem) for key in accumulatedBasic: bmItem = [ BasicMetrics.metricsOfInterest[key], splitThousands(str(accumulatedBasic[key])) ] basicMetric = QTreeWidgetItem(bmItem) accItem.addChild(basicMetric) # Add the complete information for fileName in metrics.report: if reportOption == self.SingleBuffer: fileItem = QTreeWidgetItem(["Editor buffer"]) else: fileItem = QTreeWidgetItem([fileName]) info = GlobalData().briefModinfoCache.get(fileName) if info.docstring is not None: fileItem.setToolTip(0, info.docstring.text) else: fileItem.setToolTip(0, "") self.__totalResultsTree.addTopLevelItem(fileItem) # Messages part messages = metrics.report[fileName].messages if len(messages) > 0: messagesItem = QTreeWidgetItem(["Messages"]) fileItem.addChild(messagesItem) for message in messages: mItem = [message, "", "E"] messagesItem.addChild(QTreeWidgetItem(mItem)) # Basic metrics part basicItem = QTreeWidgetItem(["Basic metrics"]) fileItem.addChild(basicItem) basic = metrics.report[fileName].basicMetrics for key in basic.metrics: bmItem = [ BasicMetrics.metricsOfInterest[key], str(basic.metrics[key]) ] basicMetric = QTreeWidgetItem(bmItem) basicItem.addChild(basicMetric) # McCabe part mccabeItem = QTreeWidgetItem(["McCabe metrics"]) fileItem.addChild(mccabeItem) mccabe = metrics.report[fileName].mcCabeMetrics.metrics for objName in mccabe: objItem = [objName, str(mccabe[objName]), "M"] mccabeMetric = QTreeWidgetItem(objItem) mccabeItem.addChild(mccabeMetric) # COCOMO 2 part cocomo = [ "COCOMO 2", str(metrics.report[fileName].cocomo2Metrics.value) ] cocomoItem = QTreeWidgetItem(cocomo) fileItem.addChild(cocomoItem) # Resizing the table self.__totalResultsTree.header().resizeSections( QHeaderView.ResizeToContents) # Add McCabe complexity information for fileName in metrics.report: mccabe = metrics.report[fileName].mcCabeMetrics.metrics for objName in mccabe: values = ["", fileName, objName, str(mccabe[objName])] self.__mcCabeTable.addTopLevelItem(McCabeTableItem(values)) if not self.__shouldShowFileName(self.__mcCabeTable, 1): self.__mcCabeTable.setColumnHidden(1, True) # Resizing and sorting the table self.__mcCabeTable.header().setSortIndicator(3, Qt.DescendingOrder) self.__mcCabeTable.sortItems( 3, self.__mcCabeTable.header().sortIndicatorOrder()) self.__mcCabeTable.header().resizeSections( QHeaderView.ResizeToContents) # Show the complete information self.__mcCabeTable.hide() self.__totalResultsTree.show() self.__reportShown = True self.__updateButtonsStatus() self.__updateTooltip() # It helps, but why do I have flickering? QApplication.processEvents() return
def showReport( self, metrics, reportOption, fileName, uuid ): " Shows the pymetrics results " self.__clear() self.__noneLabel.hide() self.__report = metrics self.__reportUUID = uuid self.__reportFileName = fileName self.__reportOption = reportOption if len( metrics.report ) > 1: accumulatedBasic = self.__accumulateBasicMetrics() accItem = QTreeWidgetItem( [ "Cumulative basic metrics" ] ) self.__totalResultsTree.addTopLevelItem( accItem ) for key in accumulatedBasic: bmItem = [ BasicMetrics.metricsOfInterest[ key ], splitThousands( str( accumulatedBasic[ key ] ) ) ] basicMetric = QTreeWidgetItem( bmItem ) accItem.addChild( basicMetric ) # Add the complete information for fileName in metrics.report: if reportOption == self.SingleBuffer: fileItem = QTreeWidgetItem( [ "Editor buffer" ] ) else: fileItem = QTreeWidgetItem( [ fileName ] ) info = GlobalData().briefModinfoCache.get( fileName ) if info.docstring is not None: fileItem.setToolTip( 0, info.docstring.text ) else: fileItem.setToolTip( 0, "" ) self.__totalResultsTree.addTopLevelItem( fileItem ) # Messages part messages = metrics.report[ fileName ].messages if len( messages ) > 0: messagesItem = QTreeWidgetItem( [ "Messages" ] ) fileItem.addChild( messagesItem ) for message in messages: mItem = [ message, "", "E" ] messagesItem.addChild( QTreeWidgetItem( mItem ) ) # Basic metrics part basicItem = QTreeWidgetItem( [ "Basic metrics" ] ) fileItem.addChild( basicItem ) basic = metrics.report[ fileName ].basicMetrics for key in basic.metrics: bmItem = [ BasicMetrics.metricsOfInterest[ key ], str( basic.metrics[ key ] ) ] basicMetric = QTreeWidgetItem( bmItem ) basicItem.addChild( basicMetric ) # McCabe part mccabeItem = QTreeWidgetItem( [ "McCabe metrics" ] ) fileItem.addChild( mccabeItem ) mccabe = metrics.report[ fileName ].mcCabeMetrics.metrics for objName in mccabe: objItem = [ objName, str( mccabe[ objName ] ), "M" ] mccabeMetric = QTreeWidgetItem( objItem ) mccabeItem.addChild( mccabeMetric ) # COCOMO 2 part cocomo = [ "COCOMO 2", str( metrics.report[ fileName ].cocomo2Metrics.value ) ] cocomoItem = QTreeWidgetItem( cocomo ) fileItem.addChild( cocomoItem ) # Resizing the table self.__totalResultsTree.header().resizeSections( QHeaderView.ResizeToContents ) # Add McCabe complexity information for fileName in metrics.report: mccabe = metrics.report[ fileName ].mcCabeMetrics.metrics for objName in mccabe: values = [ "", fileName, objName, str( mccabe[ objName ] ) ] self.__mcCabeTable.addTopLevelItem( McCabeTableItem( values ) ) if not self.__shouldShowFileName( self.__mcCabeTable, 1 ): self.__mcCabeTable.setColumnHidden( 1, True ) # Resizing and sorting the table self.__mcCabeTable.header().setSortIndicator( 3, Qt.DescendingOrder ) self.__mcCabeTable.sortItems( 3, self.__mcCabeTable.header().sortIndicatorOrder() ) self.__mcCabeTable.header().resizeSections( QHeaderView.ResizeToContents ) # Show the complete information self.__mcCabeTable.hide() self.__totalResultsTree.show() self.__reportShown = True self.__updateButtonsStatus() self.__updateTooltip() # It helps, but why do I have flickering? QApplication.processEvents() return