summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2016-11-21 21:31:41 -0600
committerMichael Merickel <michael@merickel.org>2016-11-21 21:38:52 -0600
commit9cab0e7cc24dc95e357db026cead2507111ee93a (patch)
tree7050d32e06924233d007fe1693292c74b5b1dbaa
parentabfb2f61458b111008fd1d9de1553380715889a3 (diff)
downloadpyramid-9cab0e7cc24dc95e357db026cead2507111ee93a.tar.gz
pyramid-9cab0e7cc24dc95e357db026cead2507111ee93a.tar.bz2
pyramid-9cab0e7cc24dc95e357db026cead2507111ee93a.zip
support asset specs in watch_files and variable interpolation
-rw-r--r--pyramid/scripts/pserve.py46
-rw-r--r--pyramid/tests/test_scripts/dummy.py8
-rw-r--r--pyramid/tests/test_scripts/test_pserve.py19
3 files changed, 45 insertions, 28 deletions
diff --git a/pyramid/scripts/pserve.py b/pyramid/scripts/pserve.py
index c67dc86ba..b8776d44f 100644
--- a/pyramid/scripts/pserve.py
+++ b/pyramid/scripts/pserve.py
@@ -32,6 +32,7 @@ from pyramid.compat import configparser
from pyramid.scripts.common import parse_vars
from pyramid.scripts.common import setup_logging
+from pyramid.path import AssetResolver
from pyramid.settings import aslist
def main(argv=sys.argv, quiet=False):
@@ -119,8 +120,14 @@ class PServeCommand(object):
restvars = self.args[1:]
return parse_vars(restvars)
- def pserve_file_config(self, filename):
- config = self.ConfigParser()
+ def pserve_file_config(self, filename, global_conf=None):
+ here = os.path.abspath(os.path.dirname(filename))
+ defaults = {}
+ if global_conf:
+ defaults.update(global_conf)
+ defaults['here'] = here
+
+ config = self.ConfigParser(defaults=defaults)
config.optionxform = str
config.read(filename)
try:
@@ -131,11 +138,13 @@ class PServeCommand(object):
watch_files = aslist(items.get('watch_files', ''), flatten=False)
# track file paths relative to the ini file
- basedir = os.path.dirname(filename)
+ resolver = AssetResolver(package=None)
for file in watch_files:
- if not os.path.isabs(file):
- file = os.path.join(basedir, file)
- self.watch_files.append(os.path.normpath(file))
+ if ':' in file:
+ 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))
def run(self): # pragma: no cover
if not self.args:
@@ -185,8 +194,8 @@ 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.pserve_file_config(config_path)
if hupper.is_active():
reloader = hupper.get_reloader()
@@ -205,19 +214,16 @@ class PServeCommand(object):
msg = 'Starting server.'
self.out(msg)
- def serve():
- try:
- server(app)
- except (SystemExit, KeyboardInterrupt) as e:
- if self.options.verbose > 1:
- raise
- if str(e):
- msg = ' ' + str(e)
- else:
- msg = ''
- self.out('Exiting%s (-v to see traceback)' % msg)
-
- serve()
+ try:
+ server(app)
+ except (SystemExit, KeyboardInterrupt) as e:
+ if self.options.verbose > 1:
+ raise
+ if str(e):
+ msg = ' ' + str(e)
+ else:
+ msg = ''
+ self.out('Exiting%s (-v to see traceback)' % msg)
# For paste.deploy server instantiation (egg:pyramid#wsgiref)
def wsgiref_server_runner(wsgi_app, global_conf, **kw): # pragma: no cover
diff --git a/pyramid/tests/test_scripts/dummy.py b/pyramid/tests/test_scripts/dummy.py
index f3aa20e7c..ced09d0b0 100644
--- a/pyramid/tests/test_scripts/dummy.py
+++ b/pyramid/tests/test_scripts/dummy.py
@@ -82,8 +82,9 @@ class DummyMultiView(object):
self.__request_attrs__ = attrs
class DummyConfigParser(object):
- def __init__(self, result):
+ def __init__(self, result, defaults=None):
self.result = result
+ self.defaults = defaults
def read(self, filename):
self.filename = filename
@@ -98,8 +99,9 @@ class DummyConfigParser(object):
class DummyConfigParserFactory(object):
items = None
- def __call__(self):
- self.parser = DummyConfigParser(self.items)
+ def __call__(self, defaults=None):
+ self.defaults = defaults
+ self.parser = DummyConfigParser(self.items, defaults)
return self.parser
class DummyCloser(object):
diff --git a/pyramid/tests/test_scripts/test_pserve.py b/pyramid/tests/test_scripts/test_pserve.py
index cf9426943..18f7c8c2f 100644
--- a/pyramid/tests/test_scripts/test_pserve.py
+++ b/pyramid/tests/test_scripts/test_pserve.py
@@ -2,6 +2,8 @@ import os
import unittest
from pyramid.tests.test_scripts import dummy
+here = os.path.abspath(os.path.dirname(__file__))
+
class TestPServeCommand(unittest.TestCase):
def setUp(self):
from pyramid.compat import NativeIO
@@ -59,12 +61,19 @@ class TestPServeCommand(unittest.TestCase):
def test_config_file_finds_watch_files(self):
inst = self._makeOne('development.ini')
- self.config_factory.items = [('watch_files', 'foo\nbar\n/baz')]
- inst.pserve_file_config('/base/path.ini')
+ self.config_factory.items = [(
+ 'watch_files',
+ 'foo\n/baz\npyramid.tests.test_scripts:*.py',
+ )]
+ inst.pserve_file_config('/base/path.ini', global_conf={'a': '1'})
+ self.assertEqual(self.config_factory.defaults, {
+ 'a': '1',
+ 'here': os.path.abspath('/base'),
+ })
self.assertEqual(inst.watch_files, [
- os.path.normpath('/base/foo'),
- os.path.normpath('/base/bar'),
- os.path.normpath('/baz'),
+ os.path.abspath('/base/foo'),
+ os.path.abspath('/baz'),
+ os.path.abspath(os.path.join(here, '*.py')),
])
class Test_main(unittest.TestCase):