Add alt-svc header touchup
This commit is contained in:
parent
6e3e5f1662
commit
64d44192cc
@ -333,6 +333,12 @@ class Http(metaclass=TouchUpMeta):
|
|||||||
self.response_func = self.head_response_ignored
|
self.response_func = self.head_response_ignored
|
||||||
|
|
||||||
headers["connection"] = "keep-alive" if self.keep_alive else "close"
|
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)
|
ret = format_http1_response(status, res.processed_headers)
|
||||||
if data:
|
if data:
|
||||||
ret += data
|
ret += data
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from .altsvc import AltSvcCheck # noqa
|
||||||
from .base import BaseScheme
|
from .base import BaseScheme
|
||||||
from .ode import OptionalDispatchEvent # noqa
|
from .ode import OptionalDispatchEvent # noqa
|
||||||
|
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
from abc import ABC, abstractmethod
|
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):
|
class BaseScheme(ABC):
|
||||||
@ -10,11 +13,26 @@ class BaseScheme(ABC):
|
|||||||
self.app = app
|
self.app = app
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def run(self, method, module_globals) -> None:
|
def visitors(self) -> List[NodeTransformer]:
|
||||||
...
|
...
|
||||||
|
|
||||||
def __init_subclass__(cls):
|
def __init_subclass__(cls):
|
||||||
BaseScheme._registry.add(cls)
|
BaseScheme._registry.add(cls)
|
||||||
|
|
||||||
def __call__(self, method, module_globals):
|
def __call__(self):
|
||||||
return self.run(method, module_globals)
|
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 ast import Attribute, Await, Expr, NodeTransformer
|
||||||
from inspect import getsource
|
from typing import Any, List
|
||||||
from textwrap import dedent
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from sanic.log import logger
|
from sanic.log import logger
|
||||||
|
|
||||||
@ -20,18 +18,10 @@ class OptionalDispatchEvent(BaseScheme):
|
|||||||
signal.name for signal in app.signal_router.routes
|
signal.name for signal in app.signal_router.routes
|
||||||
]
|
]
|
||||||
|
|
||||||
def run(self, method, module_globals):
|
def visitors(self) -> List[NodeTransformer]:
|
||||||
raw_source = getsource(method)
|
return [
|
||||||
src = dedent(raw_source)
|
RemoveDispatch(self._registered_events, self.app.state.verbosity)
|
||||||
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 _sync_events(self):
|
def _sync_events(self):
|
||||||
all_events = set()
|
all_events = set()
|
||||||
|
@ -21,10 +21,8 @@ class TouchUp:
|
|||||||
|
|
||||||
module = getmodule(target)
|
module = getmodule(target)
|
||||||
module_globals = dict(getmembers(module))
|
module_globals = dict(getmembers(module))
|
||||||
|
modified = BaseScheme.build(method, module_globals, app)
|
||||||
for scheme in BaseScheme._registry:
|
setattr(target, method_name, modified)
|
||||||
modified = scheme(app)(method, module_globals)
|
|
||||||
setattr(target, method_name, modified)
|
|
||||||
|
|
||||||
target.__touched__ = True
|
target.__touched__ = True
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user