summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2015-10-28 12:15:07 -0500
committerMichael Merickel <michael@merickel.org>2015-10-28 12:33:59 -0500
commit565058df3e98ba45945b6254b5c69c3de399bcb7 (patch)
tree8fce5b53a70ae8d6bf452ebb89fb830043d09cf0
parent315b19e8ea997f6b10c23dffa65d831aa42f3563 (diff)
downloadpyramid-565058df3e98ba45945b6254b5c69c3de399bcb7.tar.gz
pyramid-565058df3e98ba45945b6254b5c69c3de399bcb7.tar.bz2
pyramid-565058df3e98ba45945b6254b5c69c3de399bcb7.zip
avoid spamming by outputting state only once when a file changes
-rw-r--r--pyramid/scripts/pserve.py46
1 files changed, 28 insertions, 18 deletions
diff --git a/pyramid/scripts/pserve.py b/pyramid/scripts/pserve.py
index 1184d7faa..4a6e917a7 100644
--- a/pyramid/scripts/pserve.py
+++ b/pyramid/scripts/pserve.py
@@ -844,7 +844,8 @@ class Monitor(object): # pragma: no cover
self.poll_interval = poll_interval
self.extra_files = list(self.global_extra_files)
self.instances.append(self)
- self.syntax_error_files = []
+ self.syntax_error_files = set()
+ self.pending_reload = False
self.file_callbacks = list(self.global_file_callbacks)
def _exit(self):
@@ -892,25 +893,34 @@ class Monitor(object): # pragma: no cover
pyc = True
else:
pyc = False
- if filename not in self.module_mtimes:
- self.module_mtimes[filename] = mtime
- elif self.module_mtimes[filename] < mtime:
+ old_mtime = self.module_mtimes.get(filename)
+ self.module_mtimes[filename] = mtime
+ if old_mtime is not None and old_mtime < mtime:
+ self.pending_reload = True
if pyc:
filename = filename[:-1]
- # check if a file has syntax errors. If so, track it until it's fixed
- for filename_promise in self.syntax_error_files + [filename]:
- try:
- py_compile.compile(filename_promise, doraise=True)
- except py_compile.PyCompileError:
- print("%s has a SyntaxError; NOT reloading." % filename_promise)
- if filename_promise not in self.syntax_error_files:
- self.syntax_error_files.append(filename_promise)
- else:
- if filename_promise in self.syntax_error_files:
- self.syntax_error_files.remove(filename_promise)
- if not self.syntax_error_files:
- print("%s changed; reloading..." % filename)
- return False
+ is_valid = True
+ if filename.endswith('.py'):
+ is_valid = self.check_syntax(filename)
+ if is_valid:
+ print("%s changed ..." % filename)
+ if self.pending_reload and not self.syntax_error_files:
+ self.pending_reload = False
+ return False
+ return True
+
+ def check_syntax(self, filename):
+ # check if a file has syntax errors.
+ # If so, track it until it's fixed.
+ try:
+ py_compile.compile(filename, doraise=True)
+ except py_compile.PyCompileError:
+ print("%s has a SyntaxError; NOT reloading." % filename)
+ self.syntax_error_files.add(filename)
+ return False
+ else:
+ if filename in self.syntax_error_files:
+ self.syntax_error_files.remove(filename)
return True
def watch_file(self, cls, filename):