pyramid/scripts/pserve.py | ●●●●● patch | view | raw | blame | history | |
pyramid/tests/test_scripts/dummy.py | ●●●●● patch | view | raw | blame | history | |
pyramid/tests/test_scripts/test_pserve.py | ●●●●● patch | view | raw | blame | history |
pyramid/scripts/pserve.py
@@ -32,6 +32,7 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 pyramid/tests/test_scripts/dummy.py
@@ -82,8 +82,9 @@ 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 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): pyramid/tests/test_scripts/test_pserve.py
@@ -2,6 +2,8 @@ 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 @@ 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):