summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2017-03-28 02:19:47 -0500
committerMichael Merickel <michael@merickel.org>2017-03-28 02:20:16 -0500
commit50cebd7dea8a11188c383200f81e63a0b8b377ae (patch)
tree4da39f9b103d0deec02d7f70da7024ec681458a0
parent441503653073f465c0140f6f78f079526cf8efc2 (diff)
downloadpyramid-50cebd7dea8a11188c383200f81e63a0b8b377ae.tar.gz
pyramid-50cebd7dea8a11188c383200f81e63a0b8b377ae.tar.bz2
pyramid-50cebd7dea8a11188c383200f81e63a0b8b377ae.zip
require "open_url" setting in order to know what browser to open
Parsing the port from the server section could be brought back but it would be a fallback that depends on finding a "port" variable in the [server:server_name] section of the config.
-rw-r--r--pyramid/scripts/pserve.py49
-rw-r--r--pyramid/tests/test_scripts/test_pserve.py4
2 files changed, 31 insertions, 22 deletions
diff --git a/pyramid/scripts/pserve.py b/pyramid/scripts/pserve.py
index b89f9b982..caa73704a 100644
--- a/pyramid/scripts/pserve.py
+++ b/pyramid/scripts/pserve.py
@@ -22,10 +22,6 @@ from paste.deploy import (
loadapp,
loadserver,
)
-from paste.deploy.loadwsgi import (
- SERVER,
- loadcontext,
-)
from pyramid.compat import PY2
from pyramid.compat import configparser
@@ -87,7 +83,9 @@ class PServeCommand(object):
'-b', '--browser',
dest='browser',
action='store_true',
- help="Open a web browser to server url")
+ help=("Open a web browser to the server url. The server url is "
+ "determined from the 'open_url' setting in the 'pserve' "
+ "section of the configuration file."))
parser.add_argument(
'-v', '--verbose',
default=default_verbosity,
@@ -119,6 +117,8 @@ class PServeCommand(object):
loadapp = staticmethod(loadapp) # testing
loadserver = staticmethod(loadserver) # testing
+ open_url = None
+
_scheme_re = re.compile(r'^[a-z][a-z]+:', re.I)
def __init__(self, argv, quiet=False):
@@ -127,7 +127,7 @@ class PServeCommand(object):
self.args.verbose = 0
if self.args.reload:
self.worker_kwargs = {'argv': argv, "quiet": quiet}
- self.watch_files = []
+ self.watch_files = set()
def out(self, msg): # pragma: no cover
if self.args.verbose > 0:
@@ -150,7 +150,7 @@ class PServeCommand(object):
try:
items = dict(config.items('pserve'))
except configparser.NoSectionError:
- return
+ items = {}
watch_files = aslist(items.get('watch_files', ''), flatten=False)
@@ -161,7 +161,11 @@ class PServeCommand(object):
file = resolver.resolve(file).abspath()
elif not os.path.isabs(file):
file = os.path.join(here, file)
- self.watch_files.append(os.path.abspath(file))
+ self.watch_files.add(os.path.abspath(file))
+
+ open_url = items.get('open_url')
+ if open_url:
+ self.open_url = open_url
def run(self): # pragma: no cover
if not self.args.config_uri:
@@ -188,16 +192,21 @@ class PServeCommand(object):
# do not open the browser on each reload so check hupper first
if self.args.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()
+ self.pserve_file_config(config_path, global_conf=vars)
+ url = self.open_url
+ if not url:
+ self.out('WARNING: could not determine the server\'s url to '
+ 'open the browser. To fix this set the "open_url" '
+ 'setting in the [pserve] section of the '
+ 'configuration file.')
+
+ else:
+ def open_browser():
+ time.sleep(1)
+ webbrowser.open(url)
+ t = threading.Thread(target=open_browser)
+ t.setDaemon(True)
+ t.start()
if self.args.reload and not hupper.is_active():
if self.args.verbose > 1:
@@ -213,11 +222,11 @@ class PServeCommand(object):
if config_path:
setup_logging(config_path, global_conf=vars)
self.pserve_file_config(config_path, global_conf=vars)
- self.watch_files.append(config_path)
+ self.watch_files.add(config_path)
if hupper.is_active():
reloader = hupper.get_reloader()
- reloader.watch_files(self.watch_files)
+ reloader.watch_files(list(self.watch_files))
server = self.loadserver(
server_spec, name=server_name, relative_to=base, global_conf=vars)
diff --git a/pyramid/tests/test_scripts/test_pserve.py b/pyramid/tests/test_scripts/test_pserve.py
index 8eb63b8d6..bb3303a10 100644
--- a/pyramid/tests/test_scripts/test_pserve.py
+++ b/pyramid/tests/test_scripts/test_pserve.py
@@ -74,11 +74,11 @@ class TestPServeCommand(unittest.TestCase):
'a': '1',
'here': os.path.abspath('/base'),
})
- self.assertEqual(inst.watch_files, [
+ self.assertEqual(inst.watch_files, set([
os.path.abspath('/base/foo'),
os.path.abspath('/baz'),
os.path.abspath(os.path.join(here, '*.py')),
- ])
+ ]))
def test_reload_call_hupper_with_correct_args(self):
from pyramid.scripts import pserve