comparison piecrust/serving.py @ 205:e725af1d48fb

bake: Changes in how assets directories are configured. Change `skip_patterns` and `force_patterns` to `ignore` and `force`. Put less responsibility on the `bake` command to specify all those settings, and more on the `Baker` and `ProcessorPipeline` themselves. Add some tests.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 18 Jan 2015 12:12:57 -0800
parents 76e459d48c43
children 7a5a7a7e8cee
comparison
equal deleted inserted replaced
204:f98451237371 205:e725af1d48fb
61 self.debug = debug 61 self.debug = debug
62 self.use_reloader = use_reloader 62 self.use_reloader = use_reloader
63 self.static_preview = static_preview 63 self.static_preview = static_preview
64 self.synchronous_asset_pipeline = synchronous_asset_pipeline 64 self.synchronous_asset_pipeline = synchronous_asset_pipeline
65 self._out_dir = None 65 self._out_dir = None
66 self._skip_patterns = None
67 self._force_patterns = None
68 self._asset_record = None 66 self._asset_record = None
69 self._page_record = None 67 self._page_record = None
70 self._mimetype_map = load_mimetype_map() 68 self._mimetype_map = load_mimetype_map()
71 69
72 def run(self): 70 def run(self):
73 # Bake all the assets so we know what we have, and so we can serve 71 # Bake all the assets so we know what we have, and so we can serve
74 # them to the client. We need a temp app for this. 72 # them to the client. We need a temp app for this.
75 app = PieCrust(root_dir=self.root_dir, debug=self.debug) 73 app = PieCrust(root_dir=self.root_dir, debug=self.debug)
76 mounts = app.assets_dirs
77 self._out_dir = os.path.join(app.cache_dir, 'server') 74 self._out_dir = os.path.join(app.cache_dir, 'server')
78 self._skip_patterns = app.config.get('baker/skip_patterns') 75 pipeline = ProcessorPipeline(app, self._out_dir)
79 self._force_patterns = app.config.get('baker/force_patterns')
80 pipeline = ProcessorPipeline(
81 app, mounts, self._out_dir,
82 skip_patterns=self._skip_patterns,
83 force_patterns=self._force_patterns)
84 self._asset_record = pipeline.run() 76 self._asset_record = pipeline.run()
85 self._page_record = ServeRecord() 77 self._page_record = ServeRecord()
86 78
87 # Run the WSGI app. 79 # Run the WSGI app.
88 wsgi_wrapper = WsgiServer(self) 80 wsgi_wrapper = WsgiServer(self)
182 return None 174 return None
183 175
184 # Yep, we know about this URL because we processed an asset that 176 # Yep, we know about this URL because we processed an asset that
185 # maps to it... make sure it's up to date by re-processing it 177 # maps to it... make sure it's up to date by re-processing it
186 # before serving. 178 # before serving.
187 mounts = app.assets_dirs
188 asset_in_path = entry.path 179 asset_in_path = entry.path
189 asset_out_path = os.path.join(self._out_dir, rel_req_path) 180 asset_out_path = os.path.join(self._out_dir, rel_req_path)
190 181
191 if self.synchronous_asset_pipeline: 182 if self.synchronous_asset_pipeline:
192 logger.debug("Making sure '%s' is up-to-date." % asset_in_path) 183 logger.debug("Making sure '%s' is up-to-date." % asset_in_path)
193 pipeline = ProcessorPipeline( 184 pipeline = ProcessorPipeline(app, self._out_dir)
194 app, mounts, self._out_dir,
195 skip_patterns=self._skip_patterns,
196 force_patterns=self._force_patterns,
197 num_workers=1)
198 r = pipeline.run(asset_in_path, delete=False, save_record=False, 185 r = pipeline.run(asset_in_path, delete=False, save_record=False,
199 previous_record=self._asset_record) 186 previous_record=self._asset_record)
200 assert len(r.entries) == 1 187 assert len(r.entries) == 1
201 self._asset_record.replaceEntry(r.entries[0]) 188 self._asset_record.replaceEntry(r.entries[0])
202 189
203 return self._make_wrapped_file_response(environ, asset_out_path) 190 return self._make_wrapped_file_response(environ, asset_out_path)
204 191
205 def _try_serve_new_asset(self, app, environ, request): 192 def _try_serve_new_asset(self, app, environ, request):
206 logger.debug("Searching for a new asset with path: %s" % request.path) 193 logger.debug("Searching for a new asset with path: %s" % request.path)
207 mounts = app.assets_dirs 194 pipeline = ProcessorPipeline(app, self._out_dir)
208 pipeline = ProcessorPipeline(
209 app, mounts, self._out_dir,
210 skip_patterns=self._skip_patterns,
211 force_patterns=self._force_patterns)
212 r = pipeline.run(new_only=True, delete=False, save_record=False, 195 r = pipeline.run(new_only=True, delete=False, save_record=False,
213 previous_record=self._asset_record) 196 previous_record=self._asset_record)
214 for e in r.entries: 197 for e in r.entries:
215 self._asset_record.addEntry(e) 198 self._asset_record.addEntry(e)
216 199