1from __future__ import print_function
2
3import sys
4import xml.sax
5import json
6
7from cpe import CPE
8
9def emit_mismatch(**kwargs):
10    out = {}
11    for k, v in kwargs.items():
12        out[k] = {}
13        out[k]['value'] = v.cpe_str
14        out[k]['fs'] = v.as_fs()
15        out[k]['uri'] = v.as_uri_2_3()
16        out[k]['wfn'] = v.as_wfn()
17    print(json.dumps(out))
18
19
20class ABContentHandler(xml.sax.ContentHandler):
21    def __init__(self):
22        xml.sax.ContentHandler.__init__(self)
23
24    def startElement(self, name, attrs):
25        if name == "cpe-item":
26            value = attrs.getValue("name")
27            try:
28                self.current_cpe_uri = CPE(value)
29            except Exception as err:
30                print(err, value)
31        elif name == "cpe-23:cpe23-item":
32            value = attrs.getValue("name")
33            try:
34                self.current_cpe_fs = CPE(value)
35            except Exception as err:
36                print(err, value)
37            if self.current_cpe_uri is not None and \
38               self.current_cpe_fs is not None:
39                if self.current_cpe_fs != self.current_cpe_uri:
40                    emit_mismatch(a=self.current_cpe_uri, b=self.current_cpe_fs)
41
42
43def main(sourceFileName):
44    source = open(sourceFileName)
45    xml.sax.parse(source, ABContentHandler())
46
47
48if __name__ == "__main__":
49    main(sys.argv[1])
50