Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions py2http/default_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,9 @@ def framework_defaults(framework, *, error_handler, output_mapper):
"logger": None,
"plugins": [],
"enable_cors": False,
# Bottle only: max bytes of an in-memory request body (None keeps bottle's 100 KiB).
# A bigger request is answered "413 Request entity too large".
"max_request_size": None,
"cors_allowed_origins": "*",
"publish_openapi": False,
"openapi_insecure": False,
Expand Down
5 changes: 5 additions & 0 deletions py2http/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,11 @@ def mk_bottle_app(funcs, **configs):
configs = dict(configs, framework=BOTTLE)
routes, openapi_spec = mk_routes_and_openapi_specs(funcs, **configs)
app = Bottle(catchall=False)
max_request_size = mk_config("max_request_size", None, configs, default_configs)
if max_request_size is not None:
from bottle import BaseRequest

BaseRequest.MEMFILE_MAX = int(max_request_size) # bottle: process-wide
enable_cors = mk_config("enable_cors", None, configs, default_configs)
plugins = mk_config("plugins", None, configs, default_configs)
if enable_cors:
Expand Down
27 changes: 27 additions & 0 deletions py2http/tests/test_max_request_size.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
"""``max_request_size`` raises bottle's in-memory body limit (i2mint/py2http#4)."""

import pytest

pytest.importorskip("bottle")
from bottle import BaseRequest

from py2http import mk_app


def echo(x: str):
return x


def test_max_request_size_sets_bottle_limit():
original = BaseRequest.MEMFILE_MAX
try:
mk_app([echo], framework="bottle", max_request_size=5_000_000)
assert BaseRequest.MEMFILE_MAX == 5_000_000
finally:
BaseRequest.MEMFILE_MAX = original


def test_default_leaves_bottle_limit_alone():
original = BaseRequest.MEMFILE_MAX
mk_app([echo], framework="bottle")
assert BaseRequest.MEMFILE_MAX == original
Loading