diff --git a/fortify/externalmetadata.py b/fortify/externalmetadata.py index 11ae22d..a7396f5 100644 --- a/fortify/externalmetadata.py +++ b/fortify/externalmetadata.py @@ -1,7 +1,7 @@ from lxml.etree import ElementNamespaceClassLookup from lxml.objectify import ObjectifyElementClassLookup, ElementMaker, ObjectifiedElement from lxml import objectify -from fvdl import FortifyObjectifiedDataElement +from .fvdl import FortifyObjectifiedDataElement ExternalMetadataParser = objectify.makeparser(ns_clean=True, remove_blank_text=True, @@ -43,4 +43,4 @@ def get_shortcuts_for_name(self, name): nsmap={ None: 'xmlns://www.fortifysoftware.com/schema/externalMetadata' } -) \ No newline at end of file +) diff --git a/fortify/fpr.py b/fortify/fpr.py index e1169c6..c109f51 100644 --- a/fortify/fpr.py +++ b/fortify/fpr.py @@ -12,7 +12,7 @@ class FPR(object): cache = {} def __init__(self, project, **kwargs): - if isinstance(project, basestring): + if isinstance(project, str): self._project = project = openfpr(project) elif isinstance(project, dict): self._project = project diff --git a/fortify/fvdl.py b/fortify/fvdl.py index 300c8bc..213947c 100644 --- a/fortify/fvdl.py +++ b/fortify/fvdl.py @@ -27,13 +27,13 @@ class lazyproperty(object): def __init__(self,fget): self.fget = fget - self.func_name = fget.__name__ + self.__name__ = fget.__name__ def __get__(self,obj,cls): if obj is None: return None value = self.fget(obj) - setattr(obj,self.func_name,value) + setattr(obj,self.__name__,value) return value AuditParser = objectify.makeparser(ns_clean=True, @@ -113,11 +113,11 @@ def datetime(self): class TimeStampElement(FortifyObjectifiedDataElement): @property def date(self): - return datetime.date(*map(int, self.get('date').split('-'))) + return datetime.date(*list(map(int, self.get('date').split('-')))) @property def time(self): - return datetime.time(*map(int, self.get('time').split(':'))) + return datetime.time(*list(map(int, self.get('time').split(':')))) @property def datetime(self): diff --git a/fortify/issue.py b/fortify/issue.py index fcbf920..a1eb4e1 100644 --- a/fortify/issue.py +++ b/fortify/issue.py @@ -7,13 +7,13 @@ # object representing a Fortify issue class Issue: def __init__(self, iid, ruleid, kingdom, type, subtype): + self.metadata = {} self.id = iid # instance ID self.ruleid = ruleid self.kingdom = kingdom self.type = type self.subtype = subtype self.suppressed = False - self.metadata = {} # Factory method to create an instance from a vulnerability XML object directly @classmethod diff --git a/fortify/project.py b/fortify/project.py index 6562c8e..8bd8567 100644 --- a/fortify/project.py +++ b/fortify/project.py @@ -1,4 +1,5 @@ from __future__ import print_function + from . import FPR, Issue, RemovedIssue import sys import logging @@ -62,10 +63,10 @@ def create_project(fprpath): ri = RemovedIssue.from_auditxml(removed) project.add_or_update_issue(ri) - removedissues = [i for i in issues.values() if i.removed] - suppressedissues = [i for i in issues.values() if i.suppressed] - hiddenissues = [i for i in issues.values() if i.hidden] - naiissues = [i for i in issues.values() if i.is_NAI()] + removedissues = [i for i in list(issues.values()) if i.removed] + suppressedissues = [i for i in list(issues.values()) if i.suppressed] + hiddenissues = [i for i in list(issues.values()) if i.hidden] + naiissues = [i for i in list(issues.values()) if i.is_NAI()] eprint("Got [%d] issues, [%d] hidden, [%d] NAI, [%d] Suppressed, [%d] Removed" % (len(issues), len(hiddenissues), len(naiissues), len(suppressedissues), len(removedissues))) return project # A fortify project, containing one or more issues, with metadata @@ -120,7 +121,7 @@ def print_vuln_counts(self): 'Medium': 0, 'Low': 0, } - for i in self._issues.values(): + for i in list(self._issues.values()): # exclude hidden, NAI and suppressed (TODO: could be configurable) if not (i.hidden or i.is_NAI() or i.suppressed): if i.risk is None: @@ -134,7 +135,7 @@ def print_vuln_counts(self): def print_vuln_summaries(self, open_high_priority): # TODO: enable sorting by severity and file_line by default. print("file_line,path,id,kingdom,type_subtype,severity,nai,filtered,suppressed,removed,analysis") - for i in self._issues.itervalues(): + for i in self._issues.values(): if not open_high_priority or i.is_open_high_priority: print("%s:%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s" % \ (i.metadata['shortfile'], i.metadata['line'], i.metadata['file'], i.id, i.kingdom, i.category, i.risk, i.is_NAI(), "H" if i.hidden else "V", i.suppressed, i.removed, i.analysis))