Mercurial > piecrust2
annotate piecrust/serving/middlewares.py @ 1145:e94737572542
serve: Fix an issue where false positive matches were rendered as the requested page.
Now we try to render the page, but also try to detect for the most common "empty" pages.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 05 Jun 2018 22:08:51 -0700 |
parents | 8d5b8a3dca02 |
children |
rev | line source |
---|---|
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 import os.path |
1082
8d5b8a3dca02
serve: Show debug info, report errors when debug info isn't available.
Ludovic Chabant <ludovic@chabant.com>
parents:
917
diff
changeset
|
2 from werkzeug.exceptions import HTTPException, NotFound, Forbidden |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 from werkzeug.wrappers import Request, Response |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 from werkzeug.wsgi import ClosingIterator |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
5 from piecrust import RESOURCES_DIR, CACHE_DIR |
556
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
6 from piecrust.data.builder import ( |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
7 DataBuildingContext, build_page_data) |
556
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
8 from piecrust.data.debug import build_var_debug_info |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
9 from piecrust.page import PageNotFoundError |
556
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
10 from piecrust.routing import RouteNotFoundError |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
11 from piecrust.serving.util import ( |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
12 make_wrapped_file_response, get_requested_page, get_app_for_server) |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 |
917
33a89139c284
serve: Add `--admin` option to run the administration panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
15 class PieCrustStaticResourcesMiddleware(object): |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 """ WSGI middleware that serves static files from the `resources/server` |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 directory in the PieCrust package. |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 """ |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 def __init__(self, app): |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 self.app = app |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
22 def __call__(self, environ, start_response): |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
23 static_mount = '/__piecrust_static/' |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 request = Request(environ) |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 if request.path.startswith(static_mount): |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 rel_req_path = request.path[len(static_mount):] |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
28 mount = os.path.join(RESOURCES_DIR, 'server') |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 full_path = os.path.join(mount, rel_req_path) |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 try: |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 response = make_wrapped_file_response( |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
32 environ, request, full_path) |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 return response(environ, start_response) |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 except OSError: |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 pass |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 return self.app(environ, start_response) |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
40 class PieCrustDebugMiddleware(object): |
917
33a89139c284
serve: Add `--admin` option to run the administration panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
41 """ WSGI middleware that handles debugging of PieCrust stuff, and runs |
33a89139c284
serve: Add `--admin` option to run the administration panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
853
diff
changeset
|
42 the asset pipeline in an SSE thread. |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 """ |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
44 def __init__(self, app, appfactory, |
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
45 run_sse_check=None): |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
46 self.app = app |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
47 self.appfactory = appfactory |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 self.run_sse_check = run_sse_check |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 self._proc_loop = None |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
50 self._out_dir = os.path.join( |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
51 appfactory.root_dir, CACHE_DIR, appfactory.cache_key, 'server') |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
52 self._handlers = { |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
53 'debug_info': self._getDebugInfo, |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
54 'werkzeug_shutdown': self._shutdownWerkzeug, |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
55 'pipeline_status': self._startSSEProvider} |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 if not self.run_sse_check or self.run_sse_check(): |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
58 # When using a server with code reloading, some implementations |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
59 # use process forking and we end up going here twice. We only want |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
60 # to start the pipeline loop in the inner process most of the |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 # time so we let the implementation tell us if this is OK. |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
62 from piecrust.serving.procloop import ProcessingLoop |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
63 self._proc_loop = ProcessingLoop(self.appfactory, self._out_dir) |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 self._proc_loop.start() |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 def __call__(self, environ, start_response): |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
67 debug_mount = '/__piecrust_debug/' |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
68 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
69 request = Request(environ) |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 if request.path.startswith(debug_mount): |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
71 rel_req_path = request.path[len(debug_mount):] |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
72 handler = self._handlers.get(rel_req_path) |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
73 if handler is not None: |
1082
8d5b8a3dca02
serve: Show debug info, report errors when debug info isn't available.
Ludovic Chabant <ludovic@chabant.com>
parents:
917
diff
changeset
|
74 try: |
8d5b8a3dca02
serve: Show debug info, report errors when debug info isn't available.
Ludovic Chabant <ludovic@chabant.com>
parents:
917
diff
changeset
|
75 return handler(request, start_response) |
8d5b8a3dca02
serve: Show debug info, report errors when debug info isn't available.
Ludovic Chabant <ludovic@chabant.com>
parents:
917
diff
changeset
|
76 except HTTPException as ex: |
8d5b8a3dca02
serve: Show debug info, report errors when debug info isn't available.
Ludovic Chabant <ludovic@chabant.com>
parents:
917
diff
changeset
|
77 return ex(environ, start_response) |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 return self.app(environ, start_response) |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
80 |
556
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
81 def _getDebugInfo(self, request, start_response): |
666
81d9c3a3a0b5
internal: Get rid of the whole "sub cache" business.
Ludovic Chabant <ludovic@chabant.com>
parents:
663
diff
changeset
|
82 app = get_app_for_server(self.appfactory) |
1082
8d5b8a3dca02
serve: Show debug info, report errors when debug info isn't available.
Ludovic Chabant <ludovic@chabant.com>
parents:
917
diff
changeset
|
83 if not app.config.get('site/enable_debug_info', True): |
8d5b8a3dca02
serve: Show debug info, report errors when debug info isn't available.
Ludovic Chabant <ludovic@chabant.com>
parents:
917
diff
changeset
|
84 raise Forbidden("PieCrust debug info isn't enabled.") |
556
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
85 |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
86 found = False |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
87 page_path = request.args.get('page') |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
88 try: |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
89 req_page = get_requested_page(app, page_path) |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
90 found = (req_page is not None) |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
91 except (RouteNotFoundError, PageNotFoundError): |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
92 pass |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
93 if not found: |
1082
8d5b8a3dca02
serve: Show debug info, report errors when debug info isn't available.
Ludovic Chabant <ludovic@chabant.com>
parents:
917
diff
changeset
|
94 raise NotFound("No such page: %s" % page_path) |
556
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
95 |
853
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
96 ctx = DataBuildingContext(req_page.page, |
f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
97 sub_num=req_page.sub_num) |
556
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
98 data = build_page_data(ctx) |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
99 |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
100 var_path = request.args.getlist('var') |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
101 if not var_path: |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
102 var_path = None |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
103 output = build_var_debug_info(data, var_path) |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
104 |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
105 response = Response(output, mimetype='text/html') |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
106 return response(request.environ, start_response) |
93b656f0af54
serve: Improve debug information in the preview server.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
107 |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
108 def _shutdownWerkzeug(self, request, start_response): |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
109 shutdown_func = request.environ.get('werkzeug.server.shutdown') |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
110 if shutdown_func is None: |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
111 raise RuntimeError('Not running with the Werkzeug Server') |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
112 shutdown_func() |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
113 response = Response("Server shutting down...") |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
114 return response(request.environ, start_response) |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
115 |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
116 def _startSSEProvider(self, request, start_response): |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
117 from piecrust.serving.procloop import ( |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
118 PipelineStatusServerSentEventProducer) |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
119 provider = PipelineStatusServerSentEventProducer( |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
120 self._proc_loop) |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
121 it = provider.run() |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
122 response = Response(it, mimetype='text/event-stream') |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
123 response.headers['Cache-Control'] = 'no-cache' |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
124 response.headers['Last-Event-ID'] = \ |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
125 self._proc_loop.last_status_id |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
126 return ClosingIterator( |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
127 response(request.environ, start_response), |
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
680
diff
changeset
|
128 [provider.close]) |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
129 |