Skip to content

Commit eff9216

Browse files
committed
set none for db migration config. easier deployment
1 parent 9326c70 commit eff9216

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

backend/app/core/config.py

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,23 +51,46 @@ def all_cors_origins(self) -> list[str]:
5151

5252
PROJECT_NAME: str
5353
SENTRY_DSN: HttpUrl | None = None
54-
POSTGRES_SERVER: str
55-
POSTGRES_PORT: int = 5432
56-
POSTGRES_USER: str
57-
POSTGRES_PASSWORD: str = ""
58-
POSTGRES_DB: str = ""
54+
55+
# Add DATABASE_URL as an optional field
56+
DATABASE_URL: PostgresDsn | None = None
57+
58+
# Make individual PG fields optional
59+
POSTGRES_SERVER: str | None = None
60+
POSTGRES_PORT: int | None = 5432
61+
POSTGRES_USER: str | None = None
62+
POSTGRES_PASSWORD: str | None = None
63+
POSTGRES_DB: str | None = None
5964

6065
@computed_field # type: ignore[prop-decorator]
6166
@property
6267
def SQLALCHEMY_DATABASE_URI(self) -> PostgresDsn:
63-
return MultiHostUrl.build(
64-
scheme="postgresql+psycopg",
65-
username=self.POSTGRES_USER,
66-
password=self.POSTGRES_PASSWORD,
67-
host=self.POSTGRES_SERVER,
68-
port=self.POSTGRES_PORT,
69-
path=self.POSTGRES_DB,
70-
)
68+
if self.DATABASE_URL:
69+
print("Using DATABASE_URL from environment")
70+
return self.DATABASE_URL
71+
elif (
72+
self.POSTGRES_SERVER
73+
and self.POSTGRES_USER
74+
# Password can be None or empty
75+
and self.POSTGRES_DB
76+
and self.POSTGRES_PORT
77+
):
78+
print("Using individual POSTGRES variables from environment")
79+
# Ensure password is a string, even if None was provided
80+
pg_password = self.POSTGRES_PASSWORD or ""
81+
return MultiHostUrl.build(
82+
scheme="postgresql+psycopg",
83+
username=self.POSTGRES_USER,
84+
password=pg_password,
85+
host=self.POSTGRES_SERVER,
86+
port=self.POSTGRES_PORT,
87+
path=self.POSTGRES_DB,
88+
)
89+
else:
90+
raise ValueError(
91+
"Database configuration error: Set DATABASE_URL or all individual "
92+
"POSTGRES_SERVER, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB, POSTGRES_PORT variables."
93+
)
7194

7295
SMTP_TLS: bool = True
7396
SMTP_SSL: bool = False
@@ -109,7 +132,9 @@ def _check_default_secret(self, var_name: str, value: str | None) -> None:
109132
@model_validator(mode="after")
110133
def _enforce_non_default_secrets(self) -> Self:
111134
self._check_default_secret("SECRET_KEY", self.SECRET_KEY)
112-
self._check_default_secret("POSTGRES_PASSWORD", self.POSTGRES_PASSWORD)
135+
# Only check PG password if individual variables are used
136+
if not self.DATABASE_URL and self.POSTGRES_PASSWORD:
137+
self._check_default_secret("POSTGRES_PASSWORD", self.POSTGRES_PASSWORD)
113138
self._check_default_secret(
114139
"FIRST_SUPERUSER_PASSWORD", self.FIRST_SUPERUSER_PASSWORD
115140
)

0 commit comments

Comments
 (0)