diff options
| author | Michael Merickel <michael@merickel.org> | 2016-11-04 02:20:53 -0500 |
|---|---|---|
| committer | Michael Merickel <michael@merickel.org> | 2016-11-20 17:20:15 -0600 |
| commit | 38fc72ca66f718414b66782518c3698d7a5d8f2f (patch) | |
| tree | 233b698bed78adc2080f3b37a4ad59fde43eaa14 | |
| parent | 1b7d853a09d97968af708c7ebe10ff26827090ed (diff) | |
| download | pyramid-38fc72ca66f718414b66782518c3698d7a5d8f2f.tar.gz pyramid-38fc72ca66f718414b66782518c3698d7a5d8f2f.tar.bz2 pyramid-38fc72ca66f718414b66782518c3698d7a5d8f2f.zip | |
restore --browser support and watch the ini file
| -rw-r--r-- | pyramid/scripts/pserve.py | 58 |
1 files changed, 42 insertions, 16 deletions
diff --git a/pyramid/scripts/pserve.py b/pyramid/scripts/pserve.py index eb0c0b126..969bc07f1 100644 --- a/pyramid/scripts/pserve.py +++ b/pyramid/scripts/pserve.py @@ -13,10 +13,19 @@ import os import re import sys import textwrap +import threading +import time +import webbrowser import hupper -from paste.deploy import loadserver -from paste.deploy import loadapp +from paste.deploy import ( + loadapp, + loadserver, +) +from paste.deploy.loadwsgi import ( + SERVER, + loadcontext, +) from pyramid.compat import PY2 @@ -109,19 +118,8 @@ class PServeCommand(object): return 2 app_spec = self.args[0] - if self.options.reload and not hupper.is_active(): - if self.options.verbose > 1: - self.out('Running reloading file monitor') - hupper.start_reloader( - 'pyramid.scripts.pserve.main', - reload_interval=int(self.options.reload_interval), - verbose=self.options.verbose, - ) - return 0 - - app_name = self.options.app_name - vars = self.get_options() + app_name = self.options.app_name if not self._scheme_re.search(app_spec): app_spec = 'config:' + app_spec @@ -134,6 +132,34 @@ class PServeCommand(object): server_spec = app_spec base = os.getcwd() + # do not open the browser on each reload so check hupper first + if self.options.browser and not hupper.is_active(): + def open_browser(): + context = loadcontext( + SERVER, app_spec, name=server_name, relative_to=base, + global_conf=vars) + url = 'http://127.0.0.1:{port}/'.format(**context.config()) + time.sleep(1) + webbrowser.open(url) + t = threading.Thread(target=open_browser) + t.setDaemon(True) + t.start() + + if self.options.reload and not hupper.is_active(): + if self.options.verbose > 1: + self.out('Running reloading file monitor') + hupper.start_reloader( + 'pyramid.scripts.pserve.main', + reload_interval=int(self.options.reload_interval), + verbose=self.options.verbose, + ) + return 0 + + if hupper.is_active(): + reloader = hupper.get_reloader() + if app_spec.startswith('config:'): + reloader.watch_files([app_spec[len('config:'):]]) + log_fn = app_spec if log_fn.startswith('config:'): log_fn = app_spec[len('config:'):] @@ -146,8 +172,8 @@ class PServeCommand(object): server = self.loadserver(server_spec, name=server_name, relative_to=base, global_conf=vars) - app = self.loadapp(app_spec, name=app_name, relative_to=base, - global_conf=vars) + app = self.loadapp( + app_spec, name=app_name, relative_to=base, global_conf=vars) if self.options.verbose > 0: if hasattr(os, 'getpid'): |
