Skip to content

Commit 0067adb

Browse files
authored
Fix: Improve env-handling (#71)
* fix: improve env-handling, tests * bump version
1 parent f56e0f2 commit 0067adb

File tree

3 files changed

+69
-5
lines changed

3 files changed

+69
-5
lines changed

python/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "jentic"
3-
version = "0.9.7"
3+
version = "0.9.8"
44
description = "Jentic SDK for the discovery and execution of APIs and workflows"
55
requires-python = ">=3.11"
66
readme = "README.md"

python/src/jentic/lib/cfg.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import os
22
from dataclasses import dataclass
33
from typing import cast
4+
import logging
5+
6+
logger = logging.getLogger(__name__)
47

58
from jentic.lib.exc import JenticEnvironmentError, MissingAgentKeyError
69

@@ -51,11 +54,14 @@ def from_env(cls) -> "AgentConfig":
5154
raise JenticEnvironmentError(f"Invalid environment: {environment}")
5255

5356
# Expose timeouts as environment variables
54-
connect_timeout = cast(float, os.getenv("JENTIC_CONNECT_TIMEOUT", 10.0))
55-
read_timeout = cast(float, os.getenv("JENTIC_READ_TIMEOUT", 10.0))
56-
write_timeout = cast(float, os.getenv("JENTIC_WRITE_TIMEOUT", 120.0))
57-
pool_timeout = cast(float, os.getenv("JENTIC_POOL_TIMEOUT", 120.0))
57+
connect_timeout = float(os.getenv("JENTIC_CONNECT_TIMEOUT", "10.0"))
58+
read_timeout = float(os.getenv("JENTIC_READ_TIMEOUT", "10.0"))
59+
write_timeout = float(os.getenv("JENTIC_WRITE_TIMEOUT", "120.0"))
60+
pool_timeout = float(os.getenv("JENTIC_POOL_TIMEOUT", "120.0"))
5861

62+
logger.debug(
63+
f"Built config for {environment} with connect_timeout: {connect_timeout}, read_timeout: {read_timeout}, write_timeout: {write_timeout}, pool_timeout: {pool_timeout}"
64+
)
5965
return AgentConfig(
6066
agent_api_key=agent_api_key,
6167
environment=environment,

python/tests/test_cfg.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,61 @@ def test_cfg_from_env__happy_path(monkeypatch):
2929
cfg = AgentConfig.from_env()
3030
assert cfg.environment == "qa"
3131
assert cfg.core_api_url == "https://api-gw.qa1.eu-west-1.jenticdev.net/api/v1/"
32+
33+
34+
def test_cfg_from_env__timeouts_defaults(monkeypatch):
35+
# Ensure required env vars are set and timeout vars are *not* set
36+
monkeypatch.setenv("JENTIC_AGENT_API_KEY", "ak_19814bi2f98jhwg")
37+
monkeypatch.setenv("JENTIC_ENVIRONMENT", "prod")
38+
monkeypatch.delenv("JENTIC_CONNECT_TIMEOUT", raising=False)
39+
monkeypatch.delenv("JENTIC_READ_TIMEOUT", raising=False)
40+
monkeypatch.delenv("JENTIC_WRITE_TIMEOUT", raising=False)
41+
monkeypatch.delenv("JENTIC_POOL_TIMEOUT", raising=False)
42+
43+
cfg = AgentConfig.from_env()
44+
45+
assert cfg.connect_timeout == 10.0
46+
assert cfg.read_timeout == 10.0
47+
assert cfg.write_timeout == 120.0
48+
assert cfg.pool_timeout == 120.0
49+
50+
51+
@pytest.mark.parametrize(
52+
"env_var, value, attr",
53+
[
54+
("JENTIC_CONNECT_TIMEOUT", "1.5", "connect_timeout"),
55+
("JENTIC_READ_TIMEOUT", "2.5", "read_timeout"),
56+
("JENTIC_WRITE_TIMEOUT", "130.0", "write_timeout"),
57+
("JENTIC_POOL_TIMEOUT", "140.0", "pool_timeout"),
58+
],
59+
)
60+
def test_cfg_from_env__timeouts_overrides(monkeypatch, env_var, value, attr):
61+
monkeypatch.setenv("JENTIC_AGENT_API_KEY", "ak_19814bi2f98jhwg")
62+
monkeypatch.setenv("JENTIC_ENVIRONMENT", "prod")
63+
monkeypatch.setenv(env_var, value)
64+
65+
cfg = AgentConfig.from_env()
66+
67+
assert getattr(cfg, attr) == float(value)
68+
69+
70+
@pytest.mark.parametrize(
71+
"env_var, bad_value",
72+
[
73+
("JENTIC_CONNECT_TIMEOUT", ""),
74+
("JENTIC_CONNECT_TIMEOUT", " "),
75+
("JENTIC_READ_TIMEOUT", ""),
76+
("JENTIC_READ_TIMEOUT", " "),
77+
("JENTIC_WRITE_TIMEOUT", ""),
78+
("JENTIC_WRITE_TIMEOUT", " "),
79+
("JENTIC_POOL_TIMEOUT", ""),
80+
("JENTIC_POOL_TIMEOUT", " "),
81+
],
82+
)
83+
def test_cfg_from_env__timeouts_invalid_values(monkeypatch, env_var, bad_value):
84+
monkeypatch.setenv("JENTIC_AGENT_API_KEY", "ak_19814bi2f98jhwg")
85+
monkeypatch.setenv("JENTIC_ENVIRONMENT", "prod")
86+
monkeypatch.setenv(env_var, bad_value)
87+
88+
with pytest.raises(ValueError):
89+
AgentConfig.from_env()

0 commit comments

Comments
 (0)