summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Glick <david@glicksoftware.com>2015-02-12 21:10:30 -0800
committerDavid Glick <david@glicksoftware.com>2015-02-12 21:10:30 -0800
commitc45d6aea833245fa4fd9bb81352feb37045dfb07 (patch)
tree342b36823b87999813642967c7f2908a36bfb25b
parent1dc1f28e1184960f5359c6c510d23a0e6e9dafe8 (diff)
downloadpyramid-c45d6aea833245fa4fd9bb81352feb37045dfb07.tar.gz
pyramid-c45d6aea833245fa4fd9bb81352feb37045dfb07.tar.bz2
pyramid-c45d6aea833245fa4fd9bb81352feb37045dfb07.zip
Add workaround to make sure echo is enabled after reload (refs #689)
Also add myself to CONTRIBUTORS.txt
-rw-r--r--CHANGES.txt3
-rw-r--r--CONTRIBUTORS.txt2
-rw-r--r--pyramid/scripts/pserve.py14
3 files changed, 19 insertions, 0 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 1e50a623f..6a174bb1c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -88,6 +88,9 @@ Features
Bug Fixes
---------
+- Work around an issue where ``pserve --reload`` would leave terminal echo
+ disabled if it reloaded during a pdb session.
+
- ``pyramid.wsgi.wsgiapp`` and ``pyramid.wsgi.wsgiapp2`` now raise
``ValueError`` when accidentally passed ``None``.
See https://github.com/Pylons/pyramid/pull/1320
diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
index 319d41434..4f9bd6e41 100644
--- a/CONTRIBUTORS.txt
+++ b/CONTRIBUTORS.txt
@@ -242,3 +242,5 @@ Contributors
- Ilja Everila, 2015/02/05
- Geoffrey T. Dairiki, 2015/02/06
+
+- David Glick, 2015/02/12
diff --git a/pyramid/scripts/pserve.py b/pyramid/scripts/pserve.py
index 314efd839..d2ea1719b 100644
--- a/pyramid/scripts/pserve.py
+++ b/pyramid/scripts/pserve.py
@@ -36,6 +36,11 @@ from pyramid.scripts.common import parse_vars
MAXFD = 1024
+try:
+ import termios
+except ImportError: # pragma: no cover
+ termios = None
+
if WIN and not hasattr(os, 'kill'): # pragma: no cover
# py 2.6 on windows
def kill(pid, sig=None):
@@ -709,6 +714,14 @@ def _turn_sigterm_into_systemexit(): # pragma: no cover
raise SystemExit
signal.signal(signal.SIGTERM, handle_term)
+def ensure_echo_on(): # pragma: no cover
+ if termios:
+ fd = sys.stdin.fileno()
+ attr_list = termios.tcgetattr(fd)
+ if not attr_list[3] & termios.ECHO:
+ attr_list[3] |= termios.ECHO
+ termios.tcsetattr(fd, termios.TCSANOW, attr_list)
+
def install_reloader(poll_interval=1, extra_files=None): # pragma: no cover
"""
Install the reloading monitor.
@@ -718,6 +731,7 @@ def install_reloader(poll_interval=1, extra_files=None): # pragma: no cover
``raise_keyboard_interrupt`` option creates a unignorable signal
which causes the whole application to shut-down (rudely).
"""
+ ensure_echo_on()
mon = Monitor(poll_interval=poll_interval)
if extra_files is None:
extra_files = []