diff --git a/api/src/damnit_api/metadata/mymdc.py b/api/src/damnit_api/metadata/mymdc.py index 92522b3..4c945a0 100644 --- a/api/src/damnit_api/metadata/mymdc.py +++ b/api/src/damnit_api/metadata/mymdc.py @@ -2,6 +2,7 @@ from dotenv import dotenv_values from .. import get_logger +from ..settings import settings logger = get_logger() @@ -14,11 +15,6 @@ class MyMDC: "Content-Type": "application/json", } - # TODO: Supply default env values - SERVER_URL = ENV_VARS.get("MYMDC_SERVER_URL", "") - CLIENT_ID = ENV_VARS.get("MYMDC_CLIENT_ID", "") - CLIENT_SECRET = ENV_VARS.get("MYMDC_CLIENT_SECRET", "") - token: str def __init__(self): @@ -26,12 +22,12 @@ def __init__(self): self.fetch_token() def fetch_token(self): - url = f"{self.SERVER_URL}/api/../oauth/token" + url = f"{settings.mymdc.base_url}/api/../oauth/token" logger.debug("Fetching MyMDC token", url=url) body = { "grant_type": "client_credentials", - "client_id": self.CLIENT_ID, - "client_secret": self.CLIENT_SECRET, + "client_id": settings.mymdc.client_id, + "client_secret": settings.mymdc.client_secret.get_secret_value(), } response = requests.post(url, headers=self.HEADERS, json=body) @@ -43,14 +39,14 @@ def fetch_token(self): return self.token def fetch_proposal_info(self, proposal_num): - url = f"{self.SERVER_URL}/api/proposals/by_number/{proposal_num}" + url = f"{settings.mymdc.base_url}/api/proposals/by_number/{proposal_num}" response = requests.get(url, headers=self.headers) response.raise_for_status() return response.json() def fetch_user(self, user_id): - url = f"{self.SERVER_URL}/api/users/{user_id}" + url = f"{settings.mymdc.base_url}/api/users/{user_id}" response = requests.get(url, headers=self.headers) response.raise_for_status() return response.json() diff --git a/api/src/damnit_api/settings.py b/api/src/damnit_api/settings.py index 70b41b0..b4d7cf9 100644 --- a/api/src/damnit_api/settings.py +++ b/api/src/damnit_api/settings.py @@ -1,3 +1,4 @@ +from datetime import UTC, datetime from typing import Annotated from pydantic import ( @@ -37,6 +38,22 @@ def factory_must_be_true(cls, v, values): model_config = SettingsConfigDict(extra="allow") +class MyMdCCredentials(BaseSettings): + """MyMdC client settings. + + Get from from . + """ + + client_id: str + client_secret: SecretStr + email: str + token_url: HttpUrl + base_url: HttpUrl + + _access_token: str = "" + _expires_at: datetime = datetime.fromisocalendar(1970, 1, 1).astimezone(UTC) + + class Settings(BaseSettings): auth: AuthSettings @@ -48,6 +65,8 @@ class Settings(BaseSettings): uvicorn: UvicornSettings = UvicornSettings() + mymdc: MyMdCCredentials + model_config = SettingsConfigDict( env_prefix="DW_API_", env_file=[".env"],