scon/logs/logfile.py
Gabor Guzmics 45c7d1e393 * fix in stacktrace made it work.
* added debug config to analyze.
= from now on logging.debug should be utilized to remark stuff, so final
implementations can ignore such messages.
2015-04-15 00:57:59 +02:00

61 lines
1.8 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Author: Gabor Guzmics, 2013-2014
LogFile is an object capable to load SCon Logfiles and parse their ingredients
It can be extended by overriding resolve to understand Logentries further.
Each Logfile represents a physical file parsed, however theoretically, you can also parse arbitrary
data by setting the LogFile<instance>._data yourself.
"""
from .logstream import LogStream
class LogFile(LogStream):
def __init__(self, fname=None,
folder=None):
super(LogFile, self).__init__()
self.fname = fname
self.folder = folder # only for custom tagging.
self._data = None
def read(self, fname=None):
fname = fname or self.fname
try:
f = open(fname, 'r')
self.set_data(f.read())
finally:
f.close()
def filter(self, klasses):
ret = []
for line in self.lines:
for k in klasses:
if isinstance(line, k):
ret.append(line)
break
return ret
def parse(self):
# parse _data if we still have no lines.
lines = []
if self.has_data():
data_lines = self.get_data(
).replace('\r', '\n'
).replace('\n\n', '\n'
).split('\n'
)
for line in data_lines:
line = self.pre_parse_line(line)
if not line:
continue
else:
lines.append(line)
elif self.lines:
lines = self.lines
if lines:
for line in lines:
self._parse_line(line)