| 186 | |
| 187 | |
| 188 | class Application(dict): |
| 189 | |
| 190 | def __init__(self, *, logger=web_logger, loop=None, |
| 191 | router=None, handler_factory=RequestHandlerFactory, |
| 192 | middlewares=(), debug=False): |
| 193 | if loop is None: |
| 194 | loop = asyncio.get_event_loop() |
| 195 | if router is None: |
| 196 | router = web_urldispatcher.UrlDispatcher() |
| 197 | assert isinstance(router, AbstractRouter), router |
| 198 | |
| 199 | self._debug = debug |
| 200 | self._router = router |
| 201 | self._handler_factory = handler_factory |
| 202 | self._loop = loop |
| 203 | self.logger = logger |
| 204 | |
| 205 | for factory in middlewares: |
| 206 | assert asyncio.iscoroutinefunction(factory), factory |
| 207 | self._middlewares = list(middlewares) |
| 208 | |
| 209 | self._on_pre_signal = PreSignal() |
| 210 | self._on_post_signal = PostSignal() |
| 211 | self._on_response_prepare = Signal(self) |
| 212 | self._on_shutdown = Signal(self) |
| 213 | self._on_cleanup = Signal(self) |
| 214 | |
| 215 | @property |
| 216 | def debug(self): |
| 217 | return self._debug |
| 218 | |
| 219 | @property |
| 220 | def on_response_prepare(self): |
| 221 | return self._on_response_prepare |
| 222 | |
| 223 | @property |
| 224 | def on_pre_signal(self): |
| 225 | return self._on_pre_signal |
| 226 | |
| 227 | @property |
| 228 | def on_post_signal(self): |
| 229 | return self._on_post_signal |
| 230 | |
| 231 | @property |
| 232 | def on_shutdown(self): |
| 233 | return self._on_shutdown |
| 234 | |
| 235 | @property |
| 236 | def on_cleanup(self): |
| 237 | return self._on_cleanup |
| 238 | |
| 239 | @property |
| 240 | def router(self): |
| 241 | return self._router |
| 242 | |
| 243 | @property |
| 244 | def loop(self): |
| 245 | return self._loop |