__init__.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import contextlib
  2. import locale
  3. import readline
  4. import threading
  5. class UnsupportedLocaleSettingError(locale.Error):
  6. pass
  7. locale_lock = threading.Lock()
  8. @contextlib.contextmanager
  9. def setlocale(temporary_locale):
  10. with locale_lock:
  11. primary_locale = locale.setlocale(locale.LC_ALL)
  12. try:
  13. try:
  14. yield locale.setlocale(locale.LC_ALL, temporary_locale)
  15. except locale.Error, ex:
  16. if ex.message == 'unsupported locale setting':
  17. raise UnsupportedLocaleSettingError(temporary_locale)
  18. else:
  19. raise ex
  20. finally:
  21. locale.setlocale(locale.LC_ALL, primary_locale)
  22. def raw_input_with_default(prompt, default):
  23. def pre_input_hook():
  24. readline.insert_text(default)
  25. readline.redisplay()
  26. readline.set_pre_input_hook(pre_input_hook)
  27. try:
  28. return raw_input(prompt)
  29. finally:
  30. readline.set_pre_input_hook(None)
  31. def int_input_with_default(prompt, default):
  32. if default:
  33. default = str(default)
  34. else:
  35. default = ''
  36. s = raw_input_with_default(prompt, default).strip()
  37. if s:
  38. return int(s)
  39. else:
  40. return None