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