forked from jaxley/python-fortify
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathutils.py
50 lines (37 loc) · 1.23 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# -*- coding: utf-8 -*-
'''
fortify.utils
~~~~~~~~~~~~~
'''
import os
from lxml import objectify
from zipfile import ZipFile
import logging
logger = logging.getLogger(__name__)
from .fvdl import AuditParser, FilterTemplateParser, FVDLParser
from .externalmetadata import ExternalMetadataParser
XML_PARSERS = {
'audit.fvdl': FVDLParser,
'audit.xml': AuditParser,
'filtertemplate.xml': FilterTemplateParser,
'ExternalMetadata/externalmetadata.xml': ExternalMetadataParser
}
def openfpr(fprfile):
'''
Read and parse important files from an FPR.
:param fprfile: Path to the FPR file, or a file-like object.
:returns: A dict of :class:`lxml.etree._ElementTree` objects.
'''
zfpr = fprfile
if not isinstance(fprfile, ZipFile):
zfpr = ZipFile(fprfile)
pkg = {}
for filename in (f for f in zfpr.namelist() if f in XML_PARSERS):
parser = XML_PARSERS.get(filename)
artifact = zfpr.open(filename)
logger.debug("Parsing %s w/parser %r", filename, parser)
# index by filename only, not folder
filename = os.path.basename(filename)
pkg[filename] = objectify.parse(artifact, parser=parser)
logger.debug("Done parsing files from FPR")
return pkg