Skip to content

Commit a3e6ad6

Browse files
committed
feat: uses aws secrets manager
1 parent f6715bc commit a3e6ad6

6 files changed

Lines changed: 14 additions & 23 deletions

File tree

aind-tars-service-server/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ dynamic = ["version"]
1818

1919
dependencies = [
2020
'pydantic>=2.0',
21-
'pydantic-settings>=2.0',
21+
'aind-settings-utils>=0.1.0',
2222
'fastapi[standard]>=0.114.0',
2323
'azure-identity>=1.15.0',
2424
'fastapi-cache2[redis]>=0.2.2',

aind-tars-service-server/src/aind_tars_service_server/configs.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
from typing import Optional
44
from urllib.parse import urljoin
55

6+
from aind_settings_utils.aws import SecretsManagerBaseSettings
67
from pydantic import Field, HttpUrl, RedisDsn, SecretStr
7-
from pydantic_settings import BaseSettings, SettingsConfigDict
8+
from pydantic_settings import SettingsConfigDict
89

910

10-
class Settings(BaseSettings):
11+
class Settings(SecretsManagerBaseSettings):
1112
"""Settings needed to connect to TARS."""
1213

1314
# noinspection SpellCheckingInspection
@@ -57,6 +58,4 @@ def molecules_url(self) -> HttpUrl:
5758
)
5859

5960

60-
def get_settings() -> Settings:
61-
"""Utility method to return a settings object."""
62-
return Settings()
61+
settings = Settings()

aind-tars-service-server/src/aind_tars_service_server/main.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from redis.asyncio import from_url # noqa
1717

1818
from aind_tars_service_server import __version__ as service_version
19-
from aind_tars_service_server.configs import get_settings
19+
from aind_tars_service_server.configs import settings
2020
from aind_tars_service_server.route import router
2121

2222
# The log level can be set by adding an environment variable before launch.
@@ -34,7 +34,6 @@
3434
@asynccontextmanager
3535
async def lifespan(_: FastAPI) -> AsyncIterator[None]:
3636
"""Init cache and add to lifespan of app"""
37-
settings = get_settings()
3837
if settings.redis_url is not None:
3938
redis = from_url(settings.redis_url.unicode_string())
4039
FastAPICache.init(RedisBackend(redis), prefix="fastapi-cache")

aind-tars-service-server/src/aind_tars_service_server/route.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
from azure.core.credentials import AccessToken
66
from azure.identity import ClientSecretCredential
7-
from fastapi import APIRouter, Depends, Path, Query, status
7+
from fastapi import APIRouter, Path, Query, status
88
from fastapi_cache.decorator import cache
99
from httpx import AsyncClient
1010

11-
from aind_tars_service_server.configs import Settings, get_settings
11+
from aind_tars_service_server.configs import settings
1212
from aind_tars_service_server.handler import SessionHandler
1313
from aind_tars_service_server.models import (
1414
HealthCheck,
@@ -39,13 +39,10 @@ async def get_health() -> HealthCheck:
3939

4040

4141
@cache(expire=3500)
42-
async def get_access_token(settings: Settings) -> str:
42+
async def get_access_token() -> str:
4343
"""
4444
Get access token from either Azure or cache. Token is valid for 60 minutes.
4545
We set cache ttl to 3500 seconds.
46-
Parameters
47-
----------
48-
settings : Settings
4946
5047
Returns
5148
-------
@@ -100,13 +97,12 @@ async def get_viral_prep_lots(
10097
}
10198
},
10299
),
103-
settings: Settings = Depends(get_settings),
104100
):
105101
"""
106102
## TARS Endpoint to retrieve viral prep lot data.
107103
Retrieves viral prep lot information from TARS for a prep_lot_id.
108104
"""
109-
bearer_token = await get_access_token(settings=settings)
105+
bearer_token = await get_access_token()
110106
headers = {
111107
"Authorization": f"Bearer {bearer_token}",
112108
"Content-Type": "application/json",
@@ -169,12 +165,11 @@ async def get_molecules(
169165
}
170166
},
171167
),
172-
settings: Settings = Depends(get_settings),
173168
):
174169
"""
175170
## TARS Endpoint to molecule data.
176171
"""
177-
bearer_token = await get_access_token(settings=settings)
172+
bearer_token = await get_access_token()
178173
headers = {
179174
"Authorization": f"Bearer {bearer_token}",
180175
"Content-Type": "application/json",
@@ -237,12 +232,11 @@ async def get_viruses(
237232
}
238233
},
239234
),
240-
settings: Settings = Depends(get_settings),
241235
):
242236
"""
243237
## TARS Endpoint to virus data.
244238
"""
245-
bearer_token = await get_access_token(settings=settings)
239+
bearer_token = await get_access_token()
246240
headers = {
247241
"Authorization": f"Bearer {bearer_token}",
248242
"Content-Type": "application/json",

aind-tars-service-server/tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def client_with_redis() -> Generator[TestClient, Any, None]:
9090
)
9191
with (
9292
patch(
93-
"aind_tars_service_server.main.get_settings",
93+
"aind_tars_service_server.main.settings",
9494
return_value=settings_with_redis,
9595
),
9696
patch("aind_tars_service_server.main.from_url", return_value=None),

aind-tars-service-server/tests/test_route.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from azure.core.credentials import AccessToken
88
from fastapi.testclient import TestClient
99

10-
from aind_tars_service_server.configs import Settings
1110
from aind_tars_service_server.route import (
1211
get_access_token,
1312
)
@@ -29,7 +28,7 @@ async def test_get_access_token(self, mock_azure_credentials: MagicMock):
2928
mock_azure_credentials.return_value.get_token.return_value = (
3029
AccessToken(token="abc", expires_on=100)
3130
)
32-
token = await get_access_token(settings=Settings())
31+
token = await get_access_token()
3332
mock_azure_credentials.assert_has_calls(
3433
[
3534
call(

0 commit comments

Comments
 (0)