Skip to content

Commit d105812

Browse files
authored
Merge pull request #1 from cloudlinux/feature/autodiff
Keep original CSV format
2 parents 80ae13d + 4c3519d commit d105812

File tree

1 file changed

+37
-29
lines changed

1 file changed

+37
-29
lines changed

src/kcare_qualys.py

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import collections
99
import fileinput
1010
import hashlib
11+
import tempfile
1112

1213
from xml.etree import ElementTree
1314

@@ -183,23 +184,6 @@ def patch(args, qgc, keys):
183184
""" Entrypoint for patch command.
184185
"""
185186
logger.info("Started")
186-
files_input = fileinput.input(files=args.files if args.files else ('-', ))
187-
csv.register_dialect('qualys', delimiter=',', quotechar='"',
188-
quoting=csv.QUOTE_NONNUMERIC)
189-
190-
reader = csv.reader(files_input, dialect='qualys')
191-
writer = csv.writer(sys.stdout, dialect='qualys')
192-
193-
# Seach headers
194-
headers = []
195-
lineno = 0
196-
while 'QID' not in headers:
197-
headers = next(reader)
198-
lineno += 1
199-
writer.writerow(headers)
200-
201-
if not headers:
202-
raise KcareQualysError("There was no QID column in a report.")
203187

204188
cache = collections.defaultdict(set)
205189
plan = collections.defaultdict(set)
@@ -223,20 +207,44 @@ def patch(args, qgc, keys):
223207
logger.info('{0} QIDs was found for {1} assets'.format(
224208
len(qid_list), len(asset_list)))
225209

226-
for lineno, row in enumerate(reader, lineno):
227-
data = dict(zip(headers, row))
228-
if 'QID' in data:
229-
qid, ip = data['QID'], data['IP']
230-
dns_name = data.get('DNS Name') or data.get("DNS")
231-
qids_to_exclude = cache[ip] | cache[dns_name]
232-
if qid not in qids_to_exclude:
233-
writer.writerow(row)
210+
files_input = fileinput.input(files=args.files if args.files else ('-', ))
211+
csv.register_dialect('qualys', delimiter=',', quotechar='"',
212+
quoting=csv.QUOTE_NONNUMERIC)
213+
214+
orig_fd, orig = tempfile.mkstemp(prefix='kcare-qualys-', suffix='.csv')
215+
with open(orig_fd, 'w', newline='\r\n') as orig_file:
216+
reader = csv.reader(files_input, dialect='qualys')
217+
writer = csv.writer(orig_file, dialect='qualys')
218+
219+
# Seach headers
220+
headers = []
221+
while 'QID' not in headers:
222+
headers = next(reader)
223+
writer.writerow(headers)
224+
225+
if not headers:
226+
raise KcareQualysError("There was no QID column in a report.")
227+
228+
for row in reader:
229+
data = dict(zip(headers, row))
230+
if 'QID' in data:
231+
qid, ip = data['QID'], data['IP']
232+
dns_name = data.get('DNS Name') or data.get("DNS")
233+
qids_to_exclude = cache[ip] | cache[dns_name]
234+
if qid not in qids_to_exclude:
235+
writer.writerow(row)
236+
else:
237+
logger.info("Line {0} was skipped [QID: {1}, ip: {2}]".format(reader.line_num, qid, ip))
234238
else:
235-
logger.info("Line {0} was skipped [QID: {1}, ip: {2}]".format(lineno, qid, ip))
236-
else:
237-
# Malformed line write as is
238-
writer.writerow(row)
239+
# Malformed line write as is
240+
writer.writerow(row)
241+
242+
with open(orig, 'r', newline='\r\n') as orig_file:
243+
for idx, line in enumerate(orig_file):
244+
line = line.replace('"",', ',')
245+
sys.stdout.write(line)
239246

247+
os.unlink(orig)
240248
logger.info("Done")
241249

242250

0 commit comments

Comments
 (0)