summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Client/__init__.py
blob: 8c8c4fd94e75eca56284559a6aff46e9a7c3057a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""This contains all Bcfg2 Client modules"""

import os
import sys
import select
from Bcfg2.Compat import input, walk_packages  # pylint: disable=W0622

__all__ = [m[1] for m in walk_packages(path=__path__)]


def prompt(msg):
    """ Helper to give a yes/no prompt to the user.  Flushes input
    buffers, handles exceptions, etc.  Returns True if the user
    answers in the affirmative, False otherwise.

    :param msg: The message to show to the user.  The message is not
                altered in any way for display; i.e., it should
                contain "[y/N]" if desired, etc.
    :type msg: string
    :returns: bool - True if yes, False if no """
    while len(select.select([sys.stdin.fileno()], [], [], 0.0)[0]) > 0:
        os.read(sys.stdin.fileno(), 4096)
    try:
        ans = input(msg.encode(sys.stdout.encoding, 'replace'))
        return ans in ['y', 'Y']
    except EOFError:
        # python 2.4.3 on CentOS doesn't like ^C for some reason
        return False
    except:
        print("Error while reading input: %s" % sys.exc_info()[1])
        return False