Skip to content

Commit 12a0e9e

Browse files
committed
updated some functionality
1 parent f2d19d1 commit 12a0e9e

File tree

4 files changed

+78
-727
lines changed

4 files changed

+78
-727
lines changed

services/api-v3/api/routes/object.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@
1818
from minio import Minio
1919
from sqlalchemy import text
2020
from starlette.datastructures import UploadFile as StarletteUploadFile
21-
from macrostrat.core import app as app_
21+
from api.settings import settings
2222

2323
router = APIRouter(
2424
prefix="/object",
2525
tags=["file"],
2626
responses={404: {"description": "Not found"}},
2727
)
2828

29-
settings = app_.settings
3029

3130
def guess_mime_type(filename: str) -> str:
3231
mime, _ = mimetypes.guess_type(filename)
@@ -53,10 +52,10 @@ def sha256_of_uploadfile(
5352
def get_s3_client():
5453
# TODO need to add or configure these envs within api v3 kubernetes config
5554
return Minio(
56-
endpoint=settings.get("storage.endpoint"),
57-
access_key=settings.get("storage.access_key"),
58-
secret_key=settings.get("storage.secret_key"),
59-
secure=True,
55+
endpoint=settings.s3_endpoint,
56+
access_key=settings.s3_access_key,
57+
secret_key=settings.s3_secret_key,
58+
secure=settings.s3_secure,
6059
)
6160

6261
def get_storage_host_bucket() -> tuple[str, str]:
@@ -66,12 +65,12 @@ def get_storage_host_bucket() -> tuple[str, str]:
6665
"""
6766
import urllib.parse
6867

69-
raw_host = settings.get("storage.endpoint")
68+
raw_host = settings.s3_endpoint
7069
parsed = urllib.parse.urlparse(
7170
raw_host if "://" in raw_host else f"https://{raw_host}"
7271
)
7372
host = parsed.hostname or raw_host.split(":")[0]
74-
bucket = settings.get("storage.bucket_name")
73+
bucket = settings.s3_bucket
7574
return host, bucket
7675

7776

services/api-v3/api/settings.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from pydantic import Field
2+
from pydantic_settings import BaseSettings, SettingsConfigDict
3+
4+
5+
class Settings(BaseSettings):
6+
"""
7+
Centralized application settings for API v3.
8+
Values are loaded from environment variables and .env.
9+
"""
10+
11+
model_config = SettingsConfigDict(
12+
env_file=".env",
13+
env_file_encoding="utf-8",
14+
extra="ignore",
15+
)
16+
17+
# Environment
18+
environment: str = Field(default="development", alias="ENVIRONMENT")
19+
20+
# Database
21+
database_uri: str = Field(alias="uri")
22+
23+
# OAuth
24+
redirect_uri: str = Field(alias="REDIRECT_URI_ENV")
25+
oauth_authorization_url: str = Field(alias="OAUTH_AUTHORIZATION_URL")
26+
oauth_token_url: str = Field(alias="OAUTH_TOKEN_URL")
27+
oauth_userinfo_url: str = Field(alias="OAUTH_USERINFO_URL")
28+
oauth_client_id: str = Field(alias="OAUTH_CLIENT_ID")
29+
oauth_client_secret: str = Field(alias="OAUTH_CLIENT_SECRET")
30+
31+
# JWT
32+
jwt_secret_key: str = Field(alias="SECRET_KEY")
33+
jwt_algorithm: str = Field(
34+
default="HS256",
35+
alias="JWT_ENCRYPTION_ALGORITHM",
36+
)
37+
38+
# S3 / MinIO
39+
s3_access_key: str = Field(alias="S3_ACCESS_KEY")
40+
s3_secret_key: str = Field(alias="S3_SECRET_KEY")
41+
s3_bucket: str = Field(alias="S3_BUCKET")
42+
s3_endpoint: str = Field(alias="S3_ENDPOINT")
43+
s3_secure: bool = Field(default=True, alias="S3_SECURE")
44+
45+
46+
settings = Settings()

services/api-v3/pyproject.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "api"
33
version = "2.3.3"
44
description = ""
55
authors = [{ name = "Cannon Lock", email = "[email protected]" }]
6-
requires-python = ">=3.11,<4"
6+
requires-python = ">=3.11,<3.13"
77
readme = "README.md"
88
dependencies = [
99
"sqlalchemy[asyncio]>=2.0.22,<3",
@@ -26,6 +26,8 @@ dependencies = [
2626
"macrostrat.database>=3.0.0,<4",
2727
"macrostrat.match-utils",
2828
"morecantile>=7.0.2",
29+
"pydantic-settings>2"
30+
2931
]
3032

3133
[dependency-groups]

0 commit comments

Comments
 (0)