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
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,4 @@ GW2_WVW_COOLDOWN=20
GW2_API_RETRY_MAX_ATTEMPTS=5
GW2_API_RETRY_DELAY=3.0
GW2_API_SESSION_RETRY_BG_DELAY=30.0
GW2_API_SESSION_END_DELAY=120
GW2_API_SESSION_END_DELAY=180
10 changes: 8 additions & 2 deletions src/gw2/constants/gw2_settings.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from dotenv import load_dotenv
from functools import lru_cache
from pydantic import Field
from pydantic import Field, model_validator
from pydantic_settings import BaseSettings, SettingsConfigDict

# Lazy loading flag for dotenv
Expand Down Expand Up @@ -31,7 +31,13 @@ class Gw2Settings(BaseSettings):
api_retry_max_attempts: int | None = Field(default=5)
api_retry_delay: float | None = Field(default=3.0)
api_session_retry_bg_delay: float | None = Field(default=30.0)
api_session_end_delay: float | None = Field(default=120.0)
api_session_end_delay: float | None = Field(default=180.0)

@model_validator(mode="after")
def _clamp_session_end_delay(self) -> Gw2Settings:
if self.api_session_end_delay is not None and self.api_session_end_delay < 180.0:
self.api_session_end_delay = 180.0
return self


@lru_cache(maxsize=1)
Expand Down
21 changes: 21 additions & 0 deletions tests/unit/gw2/constants/test_gw2_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,27 @@ def test_large_values_are_preserved(self):
assert settings.session_cooldown == 3600
assert settings.account_cooldown == 86400

def test_session_end_delay_below_180_clamped(self):
"""Test that api_session_end_delay below 180 is clamped to 180."""
env_vars = {"GW2_API_SESSION_END_DELAY": "60"}
with patch.dict(os.environ, env_vars, clear=True):
settings = Gw2Settings()
assert settings.api_session_end_delay == 180.0

def test_session_end_delay_at_180_preserved(self):
"""Test that api_session_end_delay at exactly 180 is preserved."""
env_vars = {"GW2_API_SESSION_END_DELAY": "180"}
with patch.dict(os.environ, env_vars, clear=True):
settings = Gw2Settings()
assert settings.api_session_end_delay == 180.0

def test_session_end_delay_above_180_preserved(self):
"""Test that api_session_end_delay above 180 is preserved."""
env_vars = {"GW2_API_SESSION_END_DELAY": "300"}
with patch.dict(os.environ, env_vars, clear=True):
settings = Gw2Settings()
assert settings.api_session_end_delay == 300.0

def test_all_cooldown_fields_exist(self):
"""Test that all expected cooldown fields exist with correct types."""
settings = Gw2Settings()
Expand Down