diff options
Diffstat (limited to 'DeDRM_plugin/utilities.py')
-rw-r--r-- | DeDRM_plugin/utilities.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/DeDRM_plugin/utilities.py b/DeDRM_plugin/utilities.py index cd08a66..5537349 100644 --- a/DeDRM_plugin/utilities.py +++ b/DeDRM_plugin/utilities.py @@ -45,3 +45,29 @@ def parseCustString(keystuff): except: pass return userkeys + + +# Wrap a stream so that output gets flushed immediately +# and also make sure that any unicode strings get safely +# encoded using "replace" before writing them. +class SafeUnbuffered: + def __init__(self, stream): + self.stream = stream + self.encoding = stream.encoding + if self.encoding == None: + self.encoding = "utf-8" + def write(self, data): + if isinstance(data,str) or isinstance(data,unicode): + # str for Python3, unicode for Python2 + data = data.encode(self.encoding,"replace") + try: + buffer = getattr(self.stream, 'buffer', self.stream) + # self.stream.buffer for Python3, self.stream for Python2 + buffer.write(data) + buffer.flush() + except: + # We can do nothing if a write fails + raise + def __getattr__(self, attr): + return getattr(self.stream, attr) +
\ No newline at end of file |