123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import contextlib
- import locale
- import readline
- import threading
- class UnsupportedLocaleSettingError(locale.Error):
- pass
- locale_lock = threading.Lock()
- @contextlib.contextmanager
- def setlocale(temporary_locale):
- with locale_lock:
- primary_locale = locale.setlocale(locale.LC_ALL)
- try:
- try:
- yield locale.setlocale(locale.LC_ALL, temporary_locale)
- except locale.Error, ex:
- if ex.message == 'unsupported locale setting':
- raise UnsupportedLocaleSettingError(temporary_locale)
- else:
- raise ex
- finally:
- locale.setlocale(locale.LC_ALL, primary_locale)
- def raw_input_with_default(prompt, default):
- def pre_input_hook():
- readline.insert_text(default)
- readline.redisplay()
- readline.set_pre_input_hook(pre_input_hook)
- try:
- return raw_input(prompt)
- finally:
- readline.set_pre_input_hook(None)
- def int_input_with_default(prompt, default):
- if default:
- default = str(default)
- else:
- default = ''
- s = raw_input_with_default(prompt, default).strip()
- if s:
- return int(s)
- else:
- return None
|