Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions backend/backend/asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
application = get_asgi_application()

from .startup import warn_missing_critical_settings

warn_missing_critical_settings()
34 changes: 34 additions & 0 deletions backend/backend/startup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""Startup checks for critical deployment settings."""

import sys

from django.conf import settings

CRITICAL_STARTUP_SETTINGS = (
'GEMINI_API_KEY',
'GOOGLE_CLIENT_ID',
'GOOGLE_CLIENT_SECRET',
)


def warn_missing_critical_settings(stream=None):
"""
Print a bold-style warning for missing startup settings and return them.
"""
missing = [
name
for name in CRITICAL_STARTUP_SETTINGS
if not str(getattr(settings, name, '') or '').strip()
]

if not missing:
return []

output = stream or sys.stdout
print(
'*** WARNING: Missing LeadOrbit startup settings: '
f"{', '.join(missing)} ***",
file=output,
flush=True,
)
return missing
36 changes: 36 additions & 0 deletions backend/backend/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from io import StringIO

from django.test import SimpleTestCase, override_settings

from .startup import warn_missing_critical_settings


class StartupSettingsValidationTests(SimpleTestCase):
@override_settings(
GEMINI_API_KEY='',
GOOGLE_CLIENT_ID='',
GOOGLE_CLIENT_SECRET='',
)
def test_warns_when_critical_settings_are_missing(self):
buffer = StringIO()

missing = warn_missing_critical_settings(stream=buffer)

self.assertEqual(
missing,
['GEMINI_API_KEY', 'GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET'],
)
self.assertIn('Missing LeadOrbit startup settings', buffer.getvalue())

@override_settings(
GEMINI_API_KEY='gemini-key',
GOOGLE_CLIENT_ID='client-id',
GOOGLE_CLIENT_SECRET='client-secret',
)
def test_returns_quietly_when_all_settings_exist(self):
buffer = StringIO()

missing = warn_missing_critical_settings(stream=buffer)

self.assertEqual(missing, [])
self.assertEqual(buffer.getvalue(), '')
4 changes: 4 additions & 0 deletions backend/backend/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
application = get_wsgi_application()

from .startup import warn_missing_critical_settings

warn_missing_critical_settings()