summaryrefslogtreecommitdiffstats
path: root/DeDRM_plugin/utilities.py
diff options
context:
space:
mode:
Diffstat (limited to 'DeDRM_plugin/utilities.py')
-rw-r--r--DeDRM_plugin/utilities.py26
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