Skip to content

Commit 7f0de2a

Browse files
committed
move repeated logic
1 parent 37bc3e6 commit 7f0de2a

File tree

4 files changed

+72
-45
lines changed

4 files changed

+72
-45
lines changed

stac_fastapi/core/stac_fastapi/core/utilities.py

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,75 @@
1212
MAX_LIMIT = 10000
1313

1414

15-
def get_bool_env(name: str, default: bool = False) -> bool:
15+
def validate_refresh(value: Union[str, bool]) -> str:
16+
"""
17+
Validate the `refresh` parameter value.
18+
19+
Args:
20+
value (Union[str, bool]): The `refresh` parameter value, which can be a string or a boolean.
21+
22+
Returns:
23+
str: The validated value of the `refresh` parameter, which can be "true", "false", or "wait_for".
24+
"""
25+
logger = logging.getLogger(__name__)
26+
27+
# Handle boolean-like values using get_bool_env
28+
if isinstance(value, bool) or value in {
29+
"true",
30+
"false",
31+
"1",
32+
"0",
33+
"yes",
34+
"no",
35+
"y",
36+
"n",
37+
}:
38+
is_true = get_bool_env("DATABASE_REFRESH", default=value)
39+
return "true" if is_true else "false"
40+
41+
# Normalize to lowercase for case-insensitivity
42+
value = value.lower()
43+
44+
# Handle "wait_for" explicitly
45+
if value == "wait_for":
46+
return "wait_for"
47+
48+
# Log a warning for invalid values and default to "false"
49+
logger.warning(
50+
f"Invalid value for `refresh`: '{value}'. Expected 'true', 'false', or 'wait_for'. Defaulting to 'false'."
51+
)
52+
return "false"
53+
54+
55+
def get_bool_env(name: str, default: Union[bool, str] = False) -> bool:
1656
"""
1757
Retrieve a boolean value from an environment variable.
1858
1959
Args:
2060
name (str): The name of the environment variable.
21-
default (bool, optional): The default value to use if the variable is not set or unrecognized. Defaults to False.
61+
default (Union[bool, str], optional): The default value to use if the variable is not set or unrecognized. Defaults to False.
2262
2363
Returns:
2464
bool: The boolean value parsed from the environment variable.
2565
"""
26-
value = os.getenv(name, str(default).lower())
2766
true_values = ("true", "1", "yes", "y")
2867
false_values = ("false", "0", "no", "n")
68+
69+
# Normalize the default value
70+
if isinstance(default, bool):
71+
default_str = "true" if default else "false"
72+
elif isinstance(default, str):
73+
default_str = default.lower()
74+
else:
75+
logger = logging.getLogger(__name__)
76+
logger.warning(
77+
f"The `default` parameter must be a boolean or string, got {type(default).__name__}. "
78+
f"Falling back to `False`."
79+
)
80+
default_str = "false"
81+
82+
# Retrieve and normalize the environment variable value
83+
value = os.getenv(name, default_str)
2984
if value.lower() in true_values:
3085
return True
3186
elif value.lower() in false_values:
@@ -34,9 +89,9 @@ def get_bool_env(name: str, default: bool = False) -> bool:
3489
logger = logging.getLogger(__name__)
3590
logger.warning(
3691
f"Environment variable '{name}' has unrecognized value '{value}'. "
37-
f"Expected one of {true_values + false_values}. Using default: {default}"
92+
f"Expected one of {true_values + false_values}. Using default: {default_str}"
3893
)
39-
return default
94+
return default_str in true_values
4095

4196

4297
def resolve_refresh(refresh: str) -> str:

stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/config.py

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from elasticsearch import Elasticsearch # type: ignore[attr-defined]
1212
from stac_fastapi.core.base_settings import ApiBaseSettings
13-
from stac_fastapi.core.utilities import get_bool_env
13+
from stac_fastapi.core.utilities import get_bool_env, validate_refresh
1414
from stac_fastapi.types.config import ApiSettings
1515

1616

@@ -96,15 +96,8 @@ def database_refresh(self) -> Union[bool, str]:
9696
Returns:
9797
Union[bool, str]: The value of DATABASE_REFRESH, which can be True, False, or "wait_for".
9898
"""
99-
value = os.getenv("DATABASE_REFRESH", "false").lower()
100-
if value in {"true", "false"}:
101-
return value == "true"
102-
elif value == "wait_for":
103-
return "wait_for"
104-
else:
105-
raise ValueError(
106-
"Invalid value for DATABASE_REFRESH. Must be 'true', 'false', or 'wait_for'."
107-
)
99+
value = os.getenv("DATABASE_REFRESH", "false")
100+
return validate_refresh(value)
108101

109102
@property
110103
def create_client(self):
@@ -135,15 +128,8 @@ def database_refresh(self) -> Union[bool, str]:
135128
Returns:
136129
Union[bool, str]: The value of DATABASE_REFRESH, which can be True, False, or "wait_for".
137130
"""
138-
value = os.getenv("DATABASE_REFRESH", "false").lower()
139-
if value in {"true", "false"}:
140-
return value == "true"
141-
elif value == "wait_for":
142-
return "wait_for"
143-
else:
144-
raise ValueError(
145-
"Invalid value for DATABASE_REFRESH. Must be 'true', 'false', or 'wait_for'."
146-
)
131+
value = os.getenv("DATABASE_REFRESH", "false")
132+
return validate_refresh(value)
147133

148134
@property
149135
def create_client(self):

stac_fastapi/opensearch/stac_fastapi/opensearch/config.py

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from opensearchpy import AsyncOpenSearch, OpenSearch
99

1010
from stac_fastapi.core.base_settings import ApiBaseSettings
11-
from stac_fastapi.core.utilities import get_bool_env
11+
from stac_fastapi.core.utilities import get_bool_env, validate_refresh
1212
from stac_fastapi.types.config import ApiSettings
1313

1414

@@ -93,15 +93,8 @@ def database_refresh(self) -> Union[bool, str]:
9393
Returns:
9494
Union[bool, str]: The value of DATABASE_REFRESH, which can be True, False, or "wait_for".
9595
"""
96-
value = os.getenv("DATABASE_REFRESH", "false").lower()
97-
if value in {"true", "false"}:
98-
return value == "true"
99-
elif value == "wait_for":
100-
return "wait_for"
101-
else:
102-
raise ValueError(
103-
"Invalid value for DATABASE_REFRESH. Must be 'true', 'false', or 'wait_for'."
104-
)
96+
value = os.getenv("DATABASE_REFRESH", "false")
97+
return validate_refresh(value)
10598

10699
@property
107100
def create_client(self):
@@ -132,15 +125,8 @@ def database_refresh(self) -> Union[bool, str]:
132125
Returns:
133126
Union[bool, str]: The value of DATABASE_REFRESH, which can be True, False, or "wait_for".
134127
"""
135-
value = os.getenv("DATABASE_REFRESH", "false").lower()
136-
if value in {"true", "false"}:
137-
return value == "true"
138-
elif value == "wait_for":
139-
return "wait_for"
140-
else:
141-
raise ValueError(
142-
"Invalid value for DATABASE_REFRESH. Must be 'true', 'false', or 'wait_for'."
143-
)
128+
value = os.getenv("DATABASE_REFRESH", "false")
129+
return validate_refresh(value)
144130

145131
@property
146132
def create_client(self):

stac_fastapi/tests/config/test_config_settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ def test_database_refresh_true(monkeypatch):
4444
monkeypatch.setenv("DATABASE_REFRESH", "true")
4545
settings_class, _ = get_settings_class()
4646
settings = settings_class()
47-
assert settings.database_refresh is True
47+
assert settings.database_refresh == "true"
4848

4949

5050
def test_database_refresh_false(monkeypatch):
5151
"""Test that DATABASE_REFRESH env var disables database refresh."""
5252
monkeypatch.setenv("DATABASE_REFRESH", "false")
5353
settings_class, _ = get_settings_class()
5454
settings = settings_class()
55-
assert settings.database_refresh is False
55+
assert settings.database_refresh == "false"
5656

5757

5858
def test_database_refresh_wait_for(monkeypatch):

0 commit comments

Comments
 (0)