diff options
| author | Manuel Traut <manut@mecka.net> | 2011-04-29 09:09:27 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@mecka.net> | 2011-04-29 09:09:27 +0200 |
| commit | 5238ad5a0c4a9e1c8cd036f5de4055e39bd71297 (patch) | |
| tree | 4407c087b9fb5432b1dc11e70b52dacfa0b99feb /beagle/debian-rfs/usr/lib/python2.4 | |
| parent | 60ead65c41afba7e6aa4bbcf507a1d52f7a8fe9f (diff) | |
added debootstrap stuff
Signed-off-by: Manuel Traut <manut@mecka.net>
Diffstat (limited to 'beagle/debian-rfs/usr/lib/python2.4')
| -rw-r--r-- | beagle/debian-rfs/usr/lib/python2.4/site-packages/debconf.py | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/beagle/debian-rfs/usr/lib/python2.4/site-packages/debconf.py b/beagle/debian-rfs/usr/lib/python2.4/site-packages/debconf.py new file mode 100644 index 0000000..b046c5c --- /dev/null +++ b/beagle/debian-rfs/usr/lib/python2.4/site-packages/debconf.py @@ -0,0 +1,184 @@ +# Copyright: +# Moshe Zadka (c) 2002 +# Canonical Ltd. (c) 2005 (DebconfCommunicator) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHORS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +import sys, os +import errno +import re +try: + import subprocess + using_subprocess = True +except ImportError: + import popen2 + using_subprocess = False +import fcntl + +class DebconfError(Exception): + pass + +LOW, MEDIUM, HIGH, CRITICAL = 'low', 'medium', 'high', 'critical' + +class Debconf: + + def __init__(self, title=None, read=None, write=None): + for command in ('capb set reset title input beginblock endblock go get' + ' register unregister subst fset fget previous_module' + ' visible purge metaget exist version settitle' + ' info progress data').split(): + self.setCommand(command) + self.read = read or sys.stdin + self.write = write or sys.stdout + sys.stdout = sys.stderr + self.setUp(title) + + def setUp(self, title): + self.version = self.version(2) + if self.version[:2] != '2.': + raise DebconfError(256, "wrong version: %s" % self.version) + self.capabilities = self.capb().split() + if title: + self.title(title) + + def setCommand(self, command): + setattr(self, command, + lambda *args, **kw: self.command(command, *args, **kw)) + + def command(self, command, *params): + command = command.upper() + self.write.write("%s %s\n" % (command, ' '.join(map(str, params)))) + self.write.flush() + + while True: + try: + resp = self.read.readline().rstrip('\n') + break + except IOError, e: + if e.errno == errno.EINTR: + continue + else: + raise + + if ' ' in resp: + status, data = resp.split(' ', 1) + else: + status, data = resp, '' + status = int(status) + if status == 0: + return data + elif status == 1: # unescaped data + unescaped = '' + for chunk in re.split(r'(\\.)', data): + if chunk.startswith('\\') and len(chunk) == 2: + if chunk[1] == 'n': + unescaped += '\n' + else: + unescaped += chunk[1] + else: + unescaped += chunk + return unescaped + else: + raise DebconfError(status, data) + + def stop(self): + self.write.write('STOP\n') + self.write.flush() + + def forceInput(self, priority, question): + try: + self.input(priority, question) + return 1 + except DebconfError, e: + if e.args[0] != 30: + raise + return 0 + + def getBoolean(self, question): + result = self.get(question) + return result == 'true' + + def getString(self, question): + return self.get(question) + + +class DebconfCommunicator(Debconf, object): + def __init__(self, owner, title=None, cloexec=False): + args = ['debconf-communicate', '-fnoninteractive', owner] + if using_subprocess: + self.dccomm = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, close_fds=True) + read = self.dccomm.stdout + write = self.dccomm.stdin + else: + self.dccomm = popen2.Popen3(args) + read = self.dccomm.fromchild + write = self.dccomm.tochild + super(DebconfCommunicator, self).__init__(title=title, + read=read, + write=write) + if cloexec: + fcntl.fcntl(self.read.fileno(), fcntl.F_SETFD, fcntl.FD_CLOEXEC) + fcntl.fcntl(self.write.fileno(), fcntl.F_SETFD, fcntl.FD_CLOEXEC) + + def shutdown(self): + if self.dccomm is not None: + if using_subprocess: + self.dccomm.stdin.close() + self.dccomm.stdout.close() + else: + self.dccomm.tochild.close() + self.dccomm.fromchild.close() + self.dccomm.wait() + self.dccomm = None + + # Don't rely on this; call .shutdown() explicitly. + def __del__(self): + try: + self.shutdown() + except AttributeError: + pass + + +if ('DEBCONF_USE_CDEBCONF' in os.environ and + os.environ['DEBCONF_USE_CDEBCONF'] != ''): + _frontEndProgram = '/usr/lib/cdebconf/debconf' +else: + _frontEndProgram = '/usr/share/debconf/frontend' + +def runFrontEnd(): + if 'DEBIAN_HAS_FRONTEND' not in os.environ: + os.environ['PERL_DL_NONLAZY']='1' + os.execv(_frontEndProgram, [_frontEndProgram, sys.executable]+sys.argv) + + +if __name__ == '__main__': + runFrontEnd() + db = Debconf() + db.forceInput(CRITICAL, 'bsdmainutils/calendar_lib_is_not_empty') + db.go() + less = db.getBoolean('less/add_mime_handler') + aptlc = db.getString('apt-listchanges/email-address') + db.stop() + print db.version + print db.capabilities + print less + print aptlc |
