--- a/eric7/WebBrowser/VirusTotal/VirusTotalApi.py Sun Aug 29 20:21:41 2021 +0200 +++ b/eric7/WebBrowser/VirusTotal/VirusTotalApi.py Mon Aug 30 20:02:39 2021 +0200 @@ -8,6 +8,7 @@ API class. """ +import contextlib import json from PyQt6.QtCore import pyqtSignal, QObject, QUrl, QUrlQuery, QByteArray @@ -169,7 +170,7 @@ WebBrowser.WebBrowserWindow.WebBrowserWindow.networkManager() ) reply = nam.post(request, params) - reply.finished.connect(self.__submitUrlFinished) + reply.finished.connect(lambda: self.__submitUrlFinished(reply)) self.__replies.append(reply) def __submitUrlFinished(self, reply): @@ -216,7 +217,8 @@ WebBrowser.WebBrowserWindow.WebBrowserWindow.networkManager() ) reply = nam.post(request, params) - reply.finished.connect(self.__getUrlScanReportUrlFinished) + reply.finished.connect( + lambda: self.__getUrlScanReportUrlFinished(reply)) self.__replies.append(reply) def __getUrlScanReportUrlFinished(self, reply): @@ -252,7 +254,8 @@ WebBrowser.WebBrowserWindow.WebBrowserWindow.networkManager() ) reply = nam.post(request, params) - reply.finished.connect(self.__getFileScanReportUrlFinished) + reply.finished.connect( + lambda: self.__getFileScanReportUrlFinished(reply)) self.__replies.append(reply) def __getFileScanReportUrlFinished(self, reply): @@ -293,7 +296,8 @@ WebBrowser.WebBrowserWindow.WebBrowserWindow.networkManager() ) reply = nam.get(request) - reply.finished.connect(self.__getIpAddressReportFinished) + reply.finished.connect( + lambda: self.__getIpAddressReportFinished(reply)) self.__replies.append(reply) def __getIpAddressReportFinished(self, reply): @@ -365,6 +369,13 @@ @param reply reference to the network reply @type QNetworkReply """ + categoriesMapping = { + "bitdefender": ("BitDefender category",), + "sophos": ("sophos category", "Sophos category"), + "valkyrie": ("Comodo Valkyrie Verdict category",), + "alpha": ("alphaMountain.ai category",), + "forcepoint": ("Forcepoint ThreatSeeker category",), + } if reply.error() == QNetworkReply.NetworkError.NoError: result = json.loads(str(reply.readAll(), "utf-8")) if result["response_code"] == 0: @@ -388,29 +399,29 @@ subdomains = result["subdomains"] except KeyError: subdomains = [] - try: - bdCategory = result["BitDefender category"] - except KeyError: - bdCategory = self.tr("not available") - try: - tmCategory = result["TrendMicro category"] - except KeyError: - tmCategory = self.tr("not available") - try: - wtsCategory = result["Websense ThreatSeeker category"] - except KeyError: - wtsCategory = self.tr("not available") + categories = {} + for key, vtCategories in categoriesMapping.items(): + for vtCategory in vtCategories: + with contextlib.suppress(KeyError): + categories[key] = result[vtCategory] + break + else: + categories[key] = "--" try: whois = result["whois"] except KeyError: whois = "" + # TODO: add "Webutation domain info" with subdict + # "Adult content" (yes/no) + # "Safety score" (0-100, integer) + # "Verdict" (string) from .VirusTotalDomainReportDialog import ( VirusTotalDomainReportDialog ) self.__domainReportDlg = VirusTotalDomainReportDialog( self.__lastDomain, resolutions, urls, subdomains, - bdCategory, tmCategory, wtsCategory, whois) + categories, whois) self.__domainReportDlg.show() self.__replies.remove(reply) reply.deleteLater()