import logging
from pathlib import Path
from typing import Optional
from pydantic import ConfigDict, Field, field_validator
from pydantic_settings import BaseSettings
logger = logging.getLogger(__name__)
[docs]
class PosteraSettings(BaseSettings):
POSTERA_API_KEY: str
POSTERA_API_URL: str = "https://api.asap.postera.ai"
POSTERA_API_VERSION: str = "v1"
model_config = ConfigDict(arbitrary_types_allowed=True)
[docs]
class S3Settings(BaseSettings):
AWS_ACCESS_KEY_ID: str = Field(description="AWS access key ID")
AWS_SECRET_ACCESS_KEY: str = Field(description="AWS secret access key")
BUCKET_NAME: str = Field(description="S3 bucket name")
BUCKET_PREFIX: Optional[str] = Field(
None, description="The prefix to use for referencing objects in the bucket"
)
[docs]
class CloudfrontSettings(BaseSettings):
CLOUDFRONT_DOMAIN: str = Field(description="Cloudfront domain name")
CLOUDFRONT_KEY_ID: str = Field(description="Cloudfront public key ID")
CLOUDFRONT_PRIVATE_KEY_PEM: str = Field(
description="Path to Cloudfront private key PEM file"
)
# validate cloudfront_private_key_pem exists
@field_validator("CLOUDFRONT_PRIVATE_KEY_PEM")
def validate_cloudfront_private_key_pem_path(cls, v):
if not Path(v).exists():
raise ValueError(f"Cloudfront private key file does not exist: {v}")
return v
[docs]
class CDDSettings(BaseSettings):
CDD_API_KEY: str = Field(
description="The CDD API key with access to the specified vault."
)
CDD_VAULT_NUMBER: int = Field(
description="The id of the CDD vault you wish to query."
)
CDD_API_URL: str = Field(
"https://app.collaborativedrug.com", description="The base url of the CCD API"
)
CDD_API_VERSION: str = Field("v1", description="The version of CDD API to use.")