Mercurial > piecrust2
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 |