comparison piecrust/serving/server.py @ 391:3e4bb57d8506

tests: Add support for testing the Chef server. * Make the server be functional without calling `getWsgiApp`. * Add new type of test files that use a Werkzeug test client.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 17 May 2015 10:48:41 -0700
parents 3a184fbc900b
children 2bb5327c4c1f
comparison
equal deleted inserted replaced
390:3a184fbc900b 391:3e4bb57d8506
10 from werkzeug.exceptions import ( 10 from werkzeug.exceptions import (
11 NotFound, MethodNotAllowed, InternalServerError, HTTPException) 11 NotFound, MethodNotAllowed, InternalServerError, HTTPException)
12 from werkzeug.wrappers import Request, Response 12 from werkzeug.wrappers import Request, Response
13 from werkzeug.wsgi import ClosingIterator, wrap_file 13 from werkzeug.wsgi import ClosingIterator, wrap_file
14 from jinja2 import FileSystemLoader, Environment 14 from jinja2 import FileSystemLoader, Environment
15 from piecrust import CACHE_DIR
15 from piecrust.app import PieCrust 16 from piecrust.app import PieCrust
16 from piecrust.rendering import QualifiedPage, PageRenderingContext, render_page 17 from piecrust.rendering import QualifiedPage, PageRenderingContext, render_page
17 from piecrust.sources.base import MODE_PARSING 18 from piecrust.sources.base import MODE_PARSING
18 from piecrust.uriutil import split_sub_uri 19 from piecrust.uriutil import split_sub_uri
19 20
60 self.debug = debug 61 self.debug = debug
61 self.sub_cache_dir = sub_cache_dir 62 self.sub_cache_dir = sub_cache_dir
62 self.enable_debug_info = enable_debug_info 63 self.enable_debug_info = enable_debug_info
63 self.run_sse_check = run_sse_check 64 self.run_sse_check = run_sse_check
64 self.static_preview = static_preview 65 self.static_preview = static_preview
65 self._out_dir = None 66 self._page_record = ServeRecord()
66 self._page_record = None 67 self._out_dir = os.path.join(root_dir, CACHE_DIR, 'server')
67 self._proc_loop = None 68 self._proc_loop = None
68 self._mimetype_map = load_mimetype_map() 69 self._mimetype_map = load_mimetype_map()
69 70
70 def getWsgiApp(self): 71 def getWsgiApp(self):
71 # Bake all the assets so we know what we have, and so we can serve 72 # Bake all the assets so we know what we have, and so we can serve
72 # them to the client. We need a temp app for this. 73 # them to the client. We need a temp app for this.
73 app = PieCrust(root_dir=self.root_dir, debug=self.debug) 74 app = PieCrust(root_dir=self.root_dir, debug=self.debug)
74 app._useSubCacheDir(self.sub_cache_dir) 75 if self.sub_cache_dir:
76 app._useSubCacheDir(self.sub_cache_dir)
75 self._out_dir = os.path.join(app.sub_cache_dir, 'server') 77 self._out_dir = os.path.join(app.sub_cache_dir, 'server')
76 self._page_record = ServeRecord()
77 78
78 if not self.run_sse_check or self.run_sse_check(): 79 if not self.run_sse_check or self.run_sse_check():
79 # When using a server with code reloading, some implementations 80 # When using a server with code reloading, some implementations
80 # use process forking and we end up going here twice. We only want 81 # use process forking and we end up going here twice. We only want
81 # to start the pipeline loop in the inner process most of the 82 # to start the pipeline loop in the inner process most of the
118 if response is not None: 119 if response is not None:
119 return response(environ, start_response) 120 return response(environ, start_response)
120 121
121 # Create the app for this request. 122 # Create the app for this request.
122 app = PieCrust(root_dir=self.root_dir, debug=self.debug) 123 app = PieCrust(root_dir=self.root_dir, debug=self.debug)
123 app._useSubCacheDir(self.sub_cache_dir) 124 if self.sub_cache_dir:
125 app._useSubCacheDir(self.sub_cache_dir)
124 app.config.set('site/root', '/') 126 app.config.set('site/root', '/')
125 app.config.set('server/is_serving', True) 127 app.config.set('server/is_serving', True)
126 if (app.config.get('site/enable_debug_info') and 128 if (app.config.get('site/enable_debug_info') and
127 self.enable_debug_info and 129 self.enable_debug_info and
128 '!debug' in request.args): 130 '!debug' in request.args):