Skip to content

Commit d481b1c

Browse files
committed
feat: add compression configuration settings
- Add COMPRESSION_ENABLED flag (default: true) - Add COMPRESSION_THRESHOLD_BYTES (default: 512) - Add COMPRESSION_LEVEL (default: 6, balanced) - Add validators for safe defaults - Update .env.example with new settings
1 parent 1a93a2e commit d481b1c

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

backend/.env.example

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ APP_BASE_FOLDER_PATH=./files
3434
APP_MIN_STORAGE_MB=1024
3535
APP_KEEP_DELETED_PASTES_TIME_HOURS=336
3636

37+
# Compression settings
38+
APP_COMPRESSION_ENABLED=true
39+
APP_COMPRESSION_THRESHOLD_BYTES=512
40+
APP_COMPRESSION_LEVEL=6
41+
3742
# Caching
3843
APP_CACHE_SIZE_LIMIT=1000
3944
APP_CACHE_TTL=300

backend/app/config.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,23 @@ class Config(BaseSettings):
4848
description="Minimum storage size in MB free",
4949
)
5050

51+
# Compression settings
52+
COMPRESSION_ENABLED: bool = Field(
53+
default=True,
54+
validation_alias="APP_COMPRESSION_ENABLED",
55+
description="Enable gzip compression for paste content"
56+
)
57+
COMPRESSION_THRESHOLD_BYTES: int = Field(
58+
default=512,
59+
validation_alias="APP_COMPRESSION_THRESHOLD_BYTES",
60+
description="Minimum content size in bytes to trigger compression"
61+
)
62+
COMPRESSION_LEVEL: int = Field(
63+
default=6,
64+
validation_alias="APP_COMPRESSION_LEVEL",
65+
description="Gzip compression level (1-9, 6=balanced)"
66+
)
67+
5168
KEEP_DELETED_PASTES_TIME_HOURS: int = Field(
5269
default=336,
5370
validation_alias="APP_KEEP_DELETED_PASTES_TIME_HOURS",
@@ -129,6 +146,28 @@ def validate_cors_domains(cls, domains: list[str], info) -> list[str]:
129146
logging.info("CORS domains: %s", domains)
130147
return domains
131148

149+
@field_validator("COMPRESSION_LEVEL", mode="after")
150+
def validate_compression_level(cls, level: int) -> int:
151+
"""Validate compression level is in valid range."""
152+
if not 1 <= level <= 9:
153+
logging.warning(
154+
"Invalid compression level %d, must be 1-9. Using default 6.",
155+
level
156+
)
157+
return 6
158+
return level
159+
160+
@field_validator("COMPRESSION_THRESHOLD_BYTES", mode="after")
161+
def validate_compression_threshold(cls, threshold: int) -> int:
162+
"""Validate compression threshold is reasonable."""
163+
if threshold < 0:
164+
logging.warning(
165+
"Invalid compression threshold %d, must be >= 0. Using default 512.",
166+
threshold
167+
)
168+
return 512
169+
return threshold
170+
132171

133172
config = Config()
134173

0 commit comments

Comments
 (0)