Skip to content

Commit 52bd4ea

Browse files
committed
fix: load db config
1 parent 26e7587 commit 52bd4ea

File tree

3 files changed

+134
-5
lines changed

3 files changed

+134
-5
lines changed

Pipfile

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ name = "pypi"
2424

2525
[packages]
2626
codeforlife = "==0.22.12"
27+
boto3 = "==1.34.162"
2728
# 🚫 Don't add [packages] below that are inherited from the CFL package.
2829

2930
[dev-packages]

Pipfile.lock

+38-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

settings.py

+95
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,98 @@
6060
# https://docs.djangoproject.com/en/3.2/howto/static-files/
6161

6262
STATIC_ROOT = get_static_root(BASE_DIR)
63+
64+
# TODO: delete this
65+
66+
import json
67+
68+
import boto3
69+
70+
71+
def check_for_pointer_file(S3_APP_BUCKET, S3_APP_KEY):
72+
s3 = boto3.client("s3")
73+
74+
pointer = s3.list_objects(
75+
Bucket=S3_APP_BUCKET, Prefix=f"{S3_APP_KEY}/dbMetadata/pointer"
76+
)
77+
78+
if pointer.get("Contents"):
79+
resp = s3.get_object(
80+
Bucket=S3_APP_BUCKET, Key=pointer["Contents"][0]["Key"]
81+
)
82+
return resp["Body"].read().decode("utf-8")
83+
84+
return None
85+
86+
87+
def construct_db_config(S3_APP_BUCKET, S3_KEY, DB_DATA):
88+
s3 = boto3.client("s3")
89+
90+
cfg = s3.get_object(Bucket=S3_APP_BUCKET, Key=S3_KEY)
91+
92+
config = json.loads(cfg["Body"].read().decode("utf-8"))
93+
94+
if config and config["DBEngine"] == "postgres":
95+
DB_DATA["default"].update(
96+
{
97+
"NAME": config["Database"],
98+
"USER": config["user"],
99+
"PASSWORD": config["password"],
100+
"HOST": config["Endpoint"],
101+
"PORT": config["Port"],
102+
}
103+
)
104+
105+
return DB_DATA
106+
107+
108+
def load_db_config(S3_APP_BUCKET, S3_APP_KEY):
109+
s3 = boto3.client("s3")
110+
111+
default_dict = {
112+
"default": {
113+
# "ENGINE": "django.db.backends.postgresql_psycopg2",
114+
"ENGINE": "django.db.backends.postgresql",
115+
"NAME": "",
116+
"USER": "",
117+
"PASSWORD": "",
118+
"HOST": "",
119+
"PORT": "",
120+
"OPTIONS": {
121+
"connect_timeout": 300,
122+
},
123+
"ATOMIC_REQUESTS": True,
124+
}
125+
}
126+
127+
link = check_for_pointer_file(S3_APP_BUCKET, S3_APP_KEY)
128+
if link:
129+
return construct_db_config(S3_APP_BUCKET, link, default_dict)
130+
131+
objs = s3.list_objects(
132+
Bucket=S3_APP_BUCKET, Prefix=f"{S3_APP_KEY}/dbMetadata/"
133+
)
134+
for config_file in objs.get("Contents", []):
135+
return construct_db_config(
136+
S3_APP_BUCKET, config_file["Key"], default_dict
137+
)
138+
139+
140+
S3_BUCKET = os.getenv("aws_s3_app_bucket")
141+
S3_PREFIX = os.getenv("aws_s3_app_folder")
142+
# AWS_REGION = os.getenv("aws_region")
143+
144+
145+
DATABASES = load_db_config(S3_BUCKET, S3_PREFIX)
146+
147+
# DATABASES = {
148+
# "default": {
149+
# "ENGINE": "django.db.backends.postgresql",
150+
# "NAME": os.getenv("DB_NAME", SERVICE_NAME),
151+
# "HOST": os.getenv("DB_HOST", "localhost"),
152+
# "PORT": int(os.getenv("DB_PORT", "5432")),
153+
# # "USER": os.getenv("DB_USER", "root"),
154+
# # "PASSWORD": os.getenv("DB_PASSWORD", "password"),
155+
# "ATOMIC_REQUESTS": True,
156+
# }
157+
# }

0 commit comments

Comments
 (0)