summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2016-11-04 02:20:53 -0500
committerMichael Merickel <michael@merickel.org>2016-11-20 17:20:15 -0600
commit38fc72ca66f718414b66782518c3698d7a5d8f2f (patch)
tree233b698bed78adc2080f3b37a4ad59fde43eaa14
parent1b7d853a09d97968af708c7ebe10ff26827090ed (diff)
downloadpyramid-38fc72ca66f718414b66782518c3698d7a5d8f2f.tar.gz
pyramid-38fc72ca66f718414b66782518c3698d7a5d8f2f.tar.bz2
pyramid-38fc72ca66f718414b66782518c3698d7a5d8f2f.zip
restore --browser support and watch the ini file
-rw-r--r--pyramid/scripts/pserve.py58
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'):