PageRenderTime 40ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/pypy/module/_minimal_curses/interp_curses.py

https://bitbucket.org/dac_io/pypy
Python | 94 lines | 74 code | 15 blank | 5 comment | 21 complexity | 20916ef9b0b0e802d44bafdbc49fec0a MD5 | raw file
  1. from pypy.interpreter.gateway import unwrap_spec
  2. from pypy.interpreter.error import OperationError
  3. from pypy.module._minimal_curses import _curses
  4. class ModuleInfo:
  5. def __init__(self):
  6. self.setupterm_called = False
  7. module_info = ModuleInfo()
  8. class curses_error(Exception):
  9. def __init__(self, msg):
  10. self.msg = msg
  11. from pypy.annotation.classdef import FORCE_ATTRIBUTES_INTO_CLASSES
  12. from pypy.annotation.model import SomeString
  13. # this is necessary due to annmixlevel
  14. FORCE_ATTRIBUTES_INTO_CLASSES[curses_error] = {'msg': SomeString()}
  15. def convert_error(space, error):
  16. msg = error.msg
  17. w_module = space.getbuiltinmodule('_minimal_curses')
  18. w_exception_class = space.getattr(w_module, space.wrap('error'))
  19. w_exception = space.call_function(w_exception_class, space.wrap(msg))
  20. return OperationError(w_exception_class, w_exception)
  21. def _curses_setupterm_null(fd):
  22. # NOT_RPYTHON
  23. try:
  24. _curses.setupterm(None, fd)
  25. except _curses.error, e:
  26. raise curses_error(e.args[0])
  27. def _curses_setupterm(termname, fd):
  28. # NOT_RPYTHON
  29. try:
  30. _curses.setupterm(termname, fd)
  31. except _curses.error, e:
  32. raise curses_error(e.args[0])
  33. @unwrap_spec(fd=int)
  34. def setupterm(space, w_termname=None, fd=-1):
  35. if fd == -1:
  36. w_stdout = space.getattr(space.getbuiltinmodule('sys'),
  37. space.wrap('stdout'))
  38. fd = space.int_w(space.call_function(space.getattr(w_stdout,
  39. space.wrap('fileno'))))
  40. try:
  41. if space.is_w(w_termname, space.w_None) or w_termname is None:
  42. _curses_setupterm_null(fd)
  43. else:
  44. _curses_setupterm(space.str_w(w_termname), fd)
  45. except curses_error, e:
  46. raise convert_error(space, e)
  47. class TermError(Exception):
  48. pass
  49. def _curses_tigetstr(capname):
  50. # NOT_RPYTHON
  51. try:
  52. res = _curses.tigetstr(capname)
  53. except _curses.error, e:
  54. raise curses_error(e.args[0])
  55. if res is None:
  56. raise TermError
  57. return res
  58. def _curses_tparm(s, args):
  59. # NOT_RPYTHON
  60. try:
  61. return _curses.tparm(s, *args)
  62. except _curses.error, e:
  63. raise curses_error(e.args[0])
  64. @unwrap_spec(capname=str)
  65. def tigetstr(space, capname):
  66. try:
  67. result = _curses_tigetstr(capname)
  68. except TermError:
  69. return space.w_None
  70. except curses_error, e:
  71. raise convert_error(space, e)
  72. return space.wrap(result)
  73. @unwrap_spec(s=str)
  74. def tparm(space, s, args_w):
  75. args = [space.int_w(a) for a in args_w]
  76. try:
  77. return space.wrap(_curses_tparm(s, args))
  78. except curses_error, e:
  79. raise convert_error(space, e)