Mercurial > piecrust2
changeset 575:657384f08ca3
serve: Make it possible to preview pages with a custom root URL.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 19 Dec 2015 18:06:16 -0800 |
parents | bc23465ed1b4 |
children | 0c74a6c4533d |
files | piecrust/serving/server.py piecrust/serving/util.py |
diffstat | 2 files changed, 13 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/piecrust/serving/server.py Sat Dec 19 18:05:28 2015 -0800 +++ b/piecrust/serving/server.py Sat Dec 19 18:06:16 2015 -0800 @@ -72,11 +72,12 @@ class Server(object): def __init__(self, root_dir, debug=False, sub_cache_dir=None, enable_debug_info=True, - static_preview=True): + root_url='/', static_preview=True): self.root_dir = root_dir self.debug = debug self.sub_cache_dir = sub_cache_dir self.enable_debug_info = enable_debug_info + self.root_url = root_url self.static_preview = static_preview self._page_record = ServeRecord() self._out_dir = os.path.join(root_dir, CACHE_DIR, 'server') @@ -109,14 +110,15 @@ # Create the app for this request. app = get_app_for_server(self.root_dir, debug=self.debug, - sub_cache_dir=self.sub_cache_dir) + sub_cache_dir=self.sub_cache_dir, + root_url=self.root_url) if (app.config.get('site/enable_debug_info') and self.enable_debug_info and '!debug' in request.args): app.config.set('site/show_debug_info', True) # We'll serve page assets directly from where they are. - app.env.base_asset_url_format = '/_asset/%path%' + app.env.base_asset_url_format = self.root_url + '_asset/%path%' # Let's see if it can be a page asset. response = self._try_serve_page_asset(app, environ, request) @@ -140,7 +142,8 @@ raise InternalServerError(msg) from ex def _try_serve_asset(self, environ, request): - rel_req_path = request.path.lstrip('/').replace('/', os.sep) + offset = len(self.root_url) + rel_req_path = request.path[offset:].replace('/', os.sep) if request.path.startswith('/_cache/'): # Some stuff needs to be served directly from the cache directory, # like LESS CSS map files. @@ -156,10 +159,11 @@ return None def _try_serve_page_asset(self, app, environ, request): - if not request.path.startswith('/_asset/'): + if not request.path.startswith(self.root_url + '_asset/'): return None - full_path = os.path.join(app.root_dir, request.path[len('/_asset/'):]) + offset = len(self.root_url + '_asset/') + full_path = os.path.join(app.root_dir, request.path[offset:]) if not os.path.isfile(full_path): return None
--- a/piecrust/serving/util.py Sat Dec 19 18:05:28 2015 -0800 +++ b/piecrust/serving/util.py Sat Dec 19 18:06:16 2015 -0800 @@ -16,11 +16,12 @@ logger = logging.getLogger(__name__) -def get_app_for_server(root_dir, debug=False, sub_cache_dir=None): +def get_app_for_server(root_dir, debug=False, sub_cache_dir=None, + root_url='/'): app = PieCrust(root_dir=root_dir, debug=debug) if sub_cache_dir: app._useSubCacheDir(sub_cache_dir) - app.config.set('site/root', '/') + app.config.set('site/root', root_url) app.config.set('server/is_serving', True) return app