Skip to content

Commit

Permalink
require "open_url" setting in order to know what browser to open
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mmerickel committed Mar 28, 2017
1 parent 4415036 commit 50cebd7
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 22 deletions.
49 changes: 29 additions & 20 deletions pyramid/scripts/pserve.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@
loadapp,
loadserver,
)
from paste.deploy.loadwsgi import (
SERVER,
loadcontext,
)

from pyramid.compat import PY2
from pyramid.compat import configparser
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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):
Expand All @@ -127,7 +127,7 @@ def __init__(self, argv, quiet=False):
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:
Expand All @@ -150,7 +150,7 @@ def pserve_file_config(self, filename, global_conf=None):
try:
items = dict(config.items('pserve'))
except configparser.NoSectionError:
return
items = {}

watch_files = aslist(items.get('watch_files', ''), flatten=False)

Expand All @@ -161,7 +161,11 @@ def pserve_file_config(self, filename, global_conf=None):
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:
Expand All @@ -188,16 +192,21 @@ def run(self): # pragma: no cover

# 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:
Expand All @@ -213,11 +222,11 @@ def open_browser():
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)
Expand Down
4 changes: 2 additions & 2 deletions pyramid/tests/test_scripts/test_pserve.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,11 @@ def test_config_file_finds_watch_files(self):
'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
Expand Down

0 comments on commit 50cebd7

Please sign in to comment.