aboutsummaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorAvatar Piotr Jaroszyński <peper@gentoo.org> 2007-09-10 09:50:32 +0000
committerAvatar Piotr Jaroszyński <peper@gentoo.org> 2007-09-10 09:50:32 +0000
commit7f30d2d58c9649051616d0691d9e68ed6c823295 (patch)
treea2544d43a94894dfe868428c75117d2a79fd9a0c /python
parentf0b9aa0c2d9f8058ec8c73e961bfb14591ce04ee (diff)
downloadpaludis-7f30d2d58c9649051616d0691d9e68ed6c823295.tar.gz
paludis-7f30d2d58c9649051616d0691d9e68ed6c823295.tar.xz
Python Hooks.
Diffstat (limited to 'python')
-rw-r--r--python/Makefile.am2
-rw-r--r--python/paludis_output_wrapper.py102
2 files changed, 103 insertions, 1 deletions
diff --git a/python/Makefile.am b/python/Makefile.am
index b6aba3e..45b1d12 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -167,7 +167,7 @@ libadditionaltests_la_LIBADD = $(libpaludispython_la_LIBADD)
check_DATA = .libs/paludis.so .libs/additional_tests.so
pythonlibdir = @PYTHON_INSTALL_DIR@
-pythonlib_DATA = paludis.so
+pythonlib_DATA = paludis.so paludis_output_wrapper.py
.libs/paludis.so : libpaludispython.la paludis_python_so.o
mkdir -p .libs
diff --git a/python/paludis_output_wrapper.py b/python/paludis_output_wrapper.py
new file mode 100644
index 0000000..66dee76
--- /dev/null
+++ b/python/paludis_output_wrapper.py
@@ -0,0 +1,102 @@
+# vim: set fileencoding=utf-8 sw=4 sts=4 et :
+
+#
+# Copyright (c) 2007 Piotr Jaroszyński <peper@gentoo.org>
+#
+# This file is part of the Paludis package manager. Paludis is free software;
+# you can redistribute it and/or modify it under the terms of the GNU General
+# Public License version 2, as published by the Free Software Foundation.
+#
+# Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+import sys
+
+stdout_cache = []
+stderr_cache = []
+
+class CommonOutput:
+ def __init__(self, out):
+ self.out = out
+
+ def writelines(self, seq):
+ for s in seq:
+ self.write(s)
+
+ def closed(self):
+ self.out.closed()
+
+ def close(self):
+ self.out.close()
+
+ def isatty(self):
+ return self.out.isatty()
+
+ def mode(self):
+ return self.out.mode()
+
+ def name(self):
+ return self.out.name()
+
+ def encoding(self):
+ return self.out.encoding()
+
+class PrefixOutput(CommonOutput):
+ def __init__(self, out, prefix):
+ CommonOutput.__init__(self, out)
+
+ self.prefix = prefix
+ self.need_prefix = True
+
+ def write(self, str):
+ if self.need_prefix:
+ self.out.write(self.prefix)
+
+ if str.endswith("\n"):
+ self.need_prefix = True
+ newlines = -1
+ else:
+ self.need_prefix = False
+ newlines = 0
+
+ newlines += str.count("\n")
+ self.out.write(str.replace("\n", "\n" + self.prefix, newlines))
+
+def save(what):
+ if what == "stderr" or what == "both":
+ stderr_cache.append(sys.stderr)
+ elif what == "stdout" or what == "both":
+ stdout_cache.append(sys.stdout)
+
+def restore(what):
+ if what == "stderr" or what == "both":
+ if len(stderr_cache):
+ sys.stderr = stderr_cache.pop()
+ else:
+ sys.stderr = sys.__stderr__
+
+ elif what == "stdout" or what == "both":
+ if len(stdout_cache):
+ sys.stdout = stdout_cache.pop()
+ else:
+ sys.stdout = sys.__stdout__
+
+def set_prefix(prefix):
+ save("both")
+ if prefix:
+ sys.stdout = PrefixOutput(sys.__stdout__, prefix)
+ sys.stderr = PrefixOutput(sys.__stderr__, prefix)
+ else:
+ sys.stdout = sys.__stdout__
+ sys.stderr = sys.__stderr__
+
+def restore_prefix():
+ restore("both")
+