Support disabling response compression

Return fixed server header
This commit is contained in:
allegroai 2022-03-15 16:21:14 +02:00
parent e537651f29
commit 02933a9c93
3 changed files with 27 additions and 1 deletions

View File

@ -25,6 +25,7 @@ from apiserver.server_init.request_handlers import RequestHandlers
from apiserver.service_repo import ServiceRepo
from apiserver.sync import distributed_lock
from apiserver.updates import check_updates_thread
from apiserver.utilities.env import get_bool
from apiserver.utilities.threads_manager import ThreadsManager
log = config.logger(__file__)
@ -46,9 +47,12 @@ class AppSequence:
def _attach_request_handlers(self, request_handlers: RequestHandlers):
self.app.before_first_request(request_handlers.before_app_first_request)
self.app.before_request(request_handlers.before_request)
self.app.after_request(request_handlers.after_request)
def _configure(self):
CORS(self.app, **config.get("apiserver.cors"))
if get_bool("CLEARML_COMPRESS_RESP", default=True):
Compress(self.app)
self.app.config["SECRET_KEY"] = config.get(

View File

@ -18,6 +18,7 @@ log = config.logger(__file__)
class RequestHandlers:
_request_strip_prefix = config.get("apiserver.request.strip_prefix", None)
_server_header = config.get("apiserver.response.headers.server", "clearml")
def before_app_first_request(self):
pass
@ -28,6 +29,9 @@ class RequestHandlers:
if "/static/" in request.path:
return
if request.content_encoding:
return f"Content encoding is not supported ({request.content_encoding})", 415
try:
call = self._create_api_call(request)
load_data_callback = partial(self._load_call_data, req=request)
@ -81,6 +85,10 @@ class RequestHandlers:
log.exception(f"Failed processing request {request.url}: {ex}")
return f"Failed processing request {request.url}", 500
def after_request(self, response):
response.headers["server"] = self._server_header
return response
@staticmethod
def _apply_multi_dict(body: dict, md: ImmutableMultiDict):
def convert_value(v: str):

View File

@ -0,0 +1,14 @@
from distutils.util import strtobool
from os import getenv
from typing import Optional
def get_bool(*keys: str, default: bool = None) -> Optional[bool]:
try:
value = next(env for env in (getenv(key) for key in keys) if env is not None)
except StopIteration:
return default
try:
return bool(strtobool(value))
except ValueError:
return bool(value)