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
2 changes: 2 additions & 0 deletions backend/backend/asgi.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import os
from django.core.asgi import get_asgi_application
from .startup import warn_missing_startup_env_vars

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
application = get_asgi_application()
warn_missing_startup_env_vars()
20 changes: 20 additions & 0 deletions backend/backend/startup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from django.conf import settings

_WARNED = False


def warn_missing_startup_env_vars():
global _WARNED
if _WARNED:
return

required = ('GEMINI_API_KEY', 'GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET')
missing = [name for name in required if not str(getattr(settings, name, '') or '').strip()]
if not missing:
return

_WARNED = True
print(
f"\033[1m[LeadOrbit startup warning]\033[0m Missing environment variables: {', '.join(missing)}",
flush=True,
)
2 changes: 2 additions & 0 deletions backend/backend/wsgi.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import os
from django.core.wsgi import get_wsgi_application
from .startup import warn_missing_startup_env_vars

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
application = get_wsgi_application()
warn_missing_startup_env_vars()
17 changes: 17 additions & 0 deletions backend/users/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from unittest.mock import patch

from django.test import SimpleTestCase, override_settings
from rest_framework import status
from rest_framework.test import APITestCase

Expand Down Expand Up @@ -104,3 +107,17 @@ def test_member_cannot_delete_organization(self):
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
self.assertTrue(Organization.objects.filter(id=self.organization.id).exists())
self.assertTrue(User.objects.filter(id=self.user.id).exists())


@override_settings(GEMINI_API_KEY='', GOOGLE_CLIENT_ID='', GOOGLE_CLIENT_SECRET='')
class StartupValidationTests(SimpleTestCase):
@patch('builtins.print')
def test_warn_missing_startup_env_vars_prints_bold_warning(self, mock_print):
from backend.startup import warn_missing_startup_env_vars

warn_missing_startup_env_vars()

mock_print.assert_called_once()
warning_message = mock_print.call_args.args[0]
self.assertIn('[LeadOrbit startup warning]', warning_message)
self.assertIn('Missing environment variables: GEMINI_API_KEY, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET', warning_message)