Mercurial > piecrust2
comparison piecrust/serving/server.py @ 666:81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
* Compute cache keys up front, so the cache directory is only chosen once.
* Buffer up config variants to apply before loading the config. Makes it
possible to cache variant-resulting configs, too.
* Make a factory class to reuse the logic that creates the `PieCrust` object
correctly for multi-process workers and such.
* Add a test.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Thu, 03 Mar 2016 08:22:41 -0800 |
| parents | 3ceeca7bb71c |
| children | c2ea75e37540 |
comparison
equal
deleted
inserted
replaced
| 665:5dc13c816045 | 666:81d9c3a3a0b5 |
|---|---|
| 20 | 20 |
| 21 logger = logging.getLogger(__name__) | 21 logger = logging.getLogger(__name__) |
| 22 | 22 |
| 23 | 23 |
| 24 class WsgiServer(object): | 24 class WsgiServer(object): |
| 25 def __init__(self, root_dir, **kwargs): | 25 def __init__(self, appfactory, **kwargs): |
| 26 self.server = Server(root_dir, **kwargs) | 26 self.server = Server(appfactory, **kwargs) |
| 27 | 27 |
| 28 def __call__(self, environ, start_response): | 28 def __call__(self, environ, start_response): |
| 29 return self.server._run_request(environ, start_response) | 29 return self.server._run_request(environ, start_response) |
| 30 | 30 |
| 31 | 31 |
| 68 desc += '</p>' | 68 desc += '</p>' |
| 69 return desc | 69 return desc |
| 70 | 70 |
| 71 | 71 |
| 72 class Server(object): | 72 class Server(object): |
| 73 def __init__(self, root_dir, | 73 def __init__(self, appfactory, |
| 74 debug=False, theme_site=False, | 74 enable_debug_info=True, |
| 75 sub_cache_dir=None, enable_debug_info=True, | 75 root_url='/', |
| 76 root_url='/', static_preview=True): | 76 static_preview=True): |
| 77 self.root_dir = root_dir | 77 self.appfactory = appfactory |
| 78 self.debug = debug | |
| 79 self.theme_site = theme_site | |
| 80 self.sub_cache_dir = sub_cache_dir | |
| 81 self.enable_debug_info = enable_debug_info | 78 self.enable_debug_info = enable_debug_info |
| 82 self.root_url = root_url | 79 self.root_url = root_url |
| 83 self.static_preview = static_preview | 80 self.static_preview = static_preview |
| 84 self._page_record = ServeRecord() | 81 self._page_record = ServeRecord() |
| 85 self._out_dir = os.path.join(root_dir, CACHE_DIR, 'server') | 82 self._out_dir = os.path.join( |
| 86 if sub_cache_dir: | 83 appfactory.root_dir, |
| 87 self._out_dir = os.path.join(sub_cache_dir, 'server') | 84 CACHE_DIR, |
| 85 (appfactory.cache_key or 'default'), | |
| 86 'server') | |
| 88 | 87 |
| 89 def _run_request(self, environ, start_response): | 88 def _run_request(self, environ, start_response): |
| 90 try: | 89 try: |
| 91 response = self._try_run_request(environ) | 90 response = self._try_run_request(environ) |
| 92 return response(environ, start_response) | 91 return response(environ, start_response) |
| 109 response = self._try_serve_asset(environ, request) | 108 response = self._try_serve_asset(environ, request) |
| 110 if response is not None: | 109 if response is not None: |
| 111 return response | 110 return response |
| 112 | 111 |
| 113 # Create the app for this request. | 112 # Create the app for this request. |
| 114 app = get_app_for_server(self.root_dir, debug=self.debug, | 113 app = get_app_for_server(self.appfactory, |
| 115 theme_site=self.theme_site, | |
| 116 sub_cache_dir=self.sub_cache_dir, | |
| 117 root_url=self.root_url) | 114 root_url=self.root_url) |
| 118 if (app.config.get('site/enable_debug_info') and | 115 if (app.config.get('site/enable_debug_info') and |
| 119 self.enable_debug_info and | 116 self.enable_debug_info and |
| 120 '!debug' in request.args): | 117 '!debug' in request.args): |
| 121 app.config.set('site/show_debug_info', True) | 118 app.config.set('site/show_debug_info', True) |
