Add alt-svc header touchup
This commit is contained in:
		| @@ -333,6 +333,12 @@ class Http(metaclass=TouchUpMeta): | ||||
|             self.response_func = self.head_response_ignored | ||||
|  | ||||
|         headers["connection"] = "keep-alive" if self.keep_alive else "close" | ||||
|  | ||||
|         # This header may be removed or modified by the AltSvcCheck Touchup | ||||
|         # service. At server start, we either remove this header from ever | ||||
|         # being assigned, or we change the value as required. | ||||
|         headers["alt-svc"] = "" | ||||
|  | ||||
|         ret = format_http1_response(status, res.processed_headers) | ||||
|         if data: | ||||
|             ret += data | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| from .altsvc import AltSvcCheck  # noqa | ||||
| from .base import BaseScheme | ||||
| from .ode import OptionalDispatchEvent  # noqa | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,8 @@ | ||||
| from abc import ABC, abstractmethod | ||||
| from typing import Set, Type | ||||
| from ast import NodeTransformer, parse | ||||
| from inspect import getsource | ||||
| from textwrap import dedent | ||||
| from typing import Any, Dict, List, Set, Type | ||||
|  | ||||
|  | ||||
| class BaseScheme(ABC): | ||||
| @@ -10,11 +13,26 @@ class BaseScheme(ABC): | ||||
|         self.app = app | ||||
|  | ||||
|     @abstractmethod | ||||
|     def run(self, method, module_globals) -> None: | ||||
|     def visitors(self) -> List[NodeTransformer]: | ||||
|         ... | ||||
|  | ||||
|     def __init_subclass__(cls): | ||||
|         BaseScheme._registry.add(cls) | ||||
|  | ||||
|     def __call__(self, method, module_globals): | ||||
|         return self.run(method, module_globals) | ||||
|     def __call__(self): | ||||
|         return self.visitors() | ||||
|  | ||||
|     @classmethod | ||||
|     def build(cls, method, module_globals, app): | ||||
|         raw_source = getsource(method) | ||||
|         src = dedent(raw_source) | ||||
|         node = parse(src) | ||||
|  | ||||
|         for scheme in cls._registry: | ||||
|             for visitor in scheme(app)(): | ||||
|                 node = visitor.visit(node) | ||||
|  | ||||
|         compiled_src = compile(node, method.__name__, "exec") | ||||
|         exec_locals: Dict[str, Any] = {} | ||||
|         exec(compiled_src, module_globals, exec_locals)  # nosec | ||||
|         return exec_locals[method.__name__] | ||||
|   | ||||
| @@ -1,7 +1,5 @@ | ||||
| from ast import Attribute, Await, Dict, Expr, NodeTransformer, parse | ||||
| from inspect import getsource | ||||
| from textwrap import dedent | ||||
| from typing import Any | ||||
| from ast import Attribute, Await, Expr, NodeTransformer | ||||
| from typing import Any, List | ||||
|  | ||||
| from sanic.log import logger | ||||
|  | ||||
| @@ -20,18 +18,10 @@ class OptionalDispatchEvent(BaseScheme): | ||||
|             signal.name for signal in app.signal_router.routes | ||||
|         ] | ||||
|  | ||||
|     def run(self, method, module_globals): | ||||
|         raw_source = getsource(method) | ||||
|         src = dedent(raw_source) | ||||
|         tree = parse(src) | ||||
|         node = RemoveDispatch( | ||||
|             self._registered_events, self.app.state.verbosity | ||||
|         ).visit(tree) | ||||
|         compiled_src = compile(node, method.__name__, "exec") | ||||
|         exec_locals: Dict[str, Any] = {} | ||||
|         exec(compiled_src, module_globals, exec_locals)  # nosec | ||||
|  | ||||
|         return exec_locals[method.__name__] | ||||
|     def visitors(self) -> List[NodeTransformer]: | ||||
|         return [ | ||||
|             RemoveDispatch(self._registered_events, self.app.state.verbosity) | ||||
|         ] | ||||
|  | ||||
|     def _sync_events(self): | ||||
|         all_events = set() | ||||
|   | ||||
| @@ -21,10 +21,8 @@ class TouchUp: | ||||
|  | ||||
|             module = getmodule(target) | ||||
|             module_globals = dict(getmembers(module)) | ||||
|  | ||||
|             for scheme in BaseScheme._registry: | ||||
|                 modified = scheme(app)(method, module_globals) | ||||
|                 setattr(target, method_name, modified) | ||||
|             modified = BaseScheme.build(method, module_globals, app) | ||||
|             setattr(target, method_name, modified) | ||||
|  | ||||
|             target.__touched__ = True | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Adam Hopkins
					Adam Hopkins