comparison piecrust/serving.py @ 130:7f81c84f7ddb

Handle the case where the debug server needs to serve an asset created after it was started.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 15 Nov 2014 16:03:50 +0100
parents 28444014ce7d
children 9e4c2e68a129
comparison
equal deleted inserted replaced
129:3080b6d02f40 130:7f81c84f7ddb
144 144
145 def _try_serve_asset(self, app, environ, request): 145 def _try_serve_asset(self, app, environ, request):
146 logger.debug("Searching for asset with path: %s" % request.path) 146 logger.debug("Searching for asset with path: %s" % request.path)
147 rel_req_path = request.path.lstrip('/').replace('/', os.sep) 147 rel_req_path = request.path.lstrip('/').replace('/', os.sep)
148 entry = self._asset_record.previous.findEntry(rel_req_path) 148 entry = self._asset_record.previous.findEntry(rel_req_path)
149 do_synchronous_process = True
150 mounts = app.assets_dirs
149 if entry is None: 151 if entry is None:
150 return None 152 # We don't know any asset that could have created this path,
153 # but we'll see if there's a new asset that could fit.
154 pipeline = ProcessorPipeline(
155 app, mounts, self._out_dir,
156 skip_patterns=self._skip_patterns,
157 force_patterns=self._force_patterns)
158 record = pipeline.run(new_only=True)
159 entry = record.current.findEntry(rel_req_path)
160 if entry is None:
161 return None
162
163 logger.debug("Found new asset: %s" % entry.path)
164 self._asset_record.addEntry(entry)
165 do_synchronous_process = False
151 166
152 # Yep, we know about this URL because we processed an asset that 167 # Yep, we know about this URL because we processed an asset that
153 # maps to it... make sure it's up to date by re-processing it 168 # maps to it... make sure it's up to date by re-processing it
154 # before serving. 169 # before serving.
155 mounts = app.assets_dirs
156 asset_in_path = entry.path 170 asset_in_path = entry.path
157 asset_out_path = os.path.join(self._out_dir, rel_req_path) 171 asset_out_path = os.path.join(self._out_dir, rel_req_path)
158 172
159 if self.synchronous_asset_pipeline: 173 if self.synchronous_asset_pipeline and do_synchronous_process:
160 pipeline = ProcessorPipeline( 174 pipeline = ProcessorPipeline(
161 app, mounts, self._out_dir, 175 app, mounts, self._out_dir,
162 skip_patterns=self._skip_patterns, 176 skip_patterns=self._skip_patterns,
163 force_patterns=self._force_patterns) 177 force_patterns=self._force_patterns)
164 pipeline.run(asset_in_path) 178 pipeline.run(asset_in_path)