Skip to content

Instantly share code, notes, and snippets.

@leontrolski
Created February 27, 2024 12:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leontrolski/06508fcdcbffbbdec333a08e36d808c4 to your computer and use it in GitHub Desktop.
Save leontrolski/06508fcdcbffbbdec333a08e36d808c4 to your computer and use it in GitHub Desktop.
import os
from typing import TypeVar
import pydantic
T = TypeVar("T")
class _Missing:
...
MISSING = _Missing()
def default(*, dev: T, ci: T | _Missing = MISSING) -> pydantic.Field:
def inner() -> T:
if os.environ["ENVIRONMENT"] == "dev":
return dev
if os.environ["ENVIRONMENT"] == "ci" and not isinstance(ci, _Missing):
return ci
raise ValueError("No default value")
return pydantic.Field(default_factory=inner)
class Environ(pydantic.BaseModel):
ENVIRONMENT: str
DB_NAME: str
DB_HOST: str
DB_PORT: int
DB_USER: str
DB_PASS: str
AWS_ACCESS_KEY: str = default(dev="testkey", ci="testkey")
AWS_SECRET_ACCESS_KEY: str = default(dev="testsecret", ci="testsecret")
S3_ENDPOINT_URL: str | None = None # where None mean the library constructs it
RELEASE_ID: str = "latest"
SENTRY_DSN: str = default(dev="", ci="")
BUCKET_INBOUND: str
FTP_ELECTRICITY_OUTBOUND_URL: str = default(
dev="ftp://ftp-user:ftp-password@localhost",
ci="ftp://ftp-user:ftp-password@flux-ftp",
)
FTP_GAS_OUTBOUND_URL: str = default(
dev="ftp://ftp-user:ftp-password@localhost",
ci="ftp://ftp-user:ftp-password@flux-ftp",
)
FTP_ELECTRICITY_OUTBOUND_SSH_KEY: str | None = None
FTP_GAS_OUTBOUND_SSH_KEY: str | None = None
DIP_CERT_VALUE: str | None = None
DIP_PKEY_VALUE: str | None = None
DIP_API_KEY: str = "NOT-A-REAL-KEY"
DIPSIM_CERT_VALUE: str | None = None
DIPSIM_PKEY_VALUE: str | None = None
ECOES_API_KEY: str | None = default(dev=None, ci=None)
KRAKEN_FIELD_WEBHOOK_TOKEN: str = ""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment