Skip to content

Commit

Permalink
new stream wrap strategy
Browse files Browse the repository at this point in the history
  • Loading branch information
joamag committed Sep 26, 2015
1 parent f5feb2b commit 1f928ea
Showing 1 changed file with 30 additions and 18 deletions.
48 changes: 30 additions & 18 deletions src/admin_scripts/extra/log.py
Expand Up @@ -44,6 +44,29 @@
STDOUT = sys.stdout
STDERR = sys.stderr if USE_STDERR else STDOUT

class StreamWrapper(object):

def __init__(self, stream):
self.stream = stream
self.counter = 0

def __getattr__(self, name):
if hasattr(self.stream, name):
return getattr(self.stream, name)
raise AttributeError("'%s' not found" % name)

@classmethod
def wrap(cls, stream):
if hasattr(stream, "counter"): return stream
return cls(stream)

def write(self, *args, **kwargs):
self.counter += 1
self.stream.write(*args, **kwargs)

def written(self):
return self.counter > 0

def echo(message):
STDOUT.write(message + "\n")
STDOUT.flush()
Expand All @@ -57,23 +80,12 @@ def error(message):
STDERR.flush()

def has_errors():
if not hasattr(STDERR, "_counter"): return False
return STDERR._counter > 0

def patch(stream):
if hasattr(stream, "_patched"): return

def writer(*args, **kwargs):
stream._counter += 1
stream._write(*args, **kwargs)

stream._patched = True
stream._counter = 0
stream._write = stream.write
stream.write = writer
return STDERR.written()

def patch_all():
patch(STDOUT)
patch(STDERR)
def wrap_all():
global STDOUT
global STDERR
STDOUT = StreamWrapper.wrap(STDOUT)
STDERR = StreamWrapper.wrap(STDERR)

patch_all()
wrap_all()

0 comments on commit 1f928ea

Please sign in to comment.