Skip to content

Commit 9b77023

Browse files
authored
Merge pull request #175 from DakaraProject/fix/174-daphne
Fix websocket management for Daphne
2 parents 720e025 + 0a92ad2 commit 9b77023

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

dakara_server/dakara_server/asgi.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,18 @@
1010
from channels.security.websocket import AllowedHostsOriginValidator
1111
from django.core.asgi import get_asgi_application
1212

13-
from dakara_server.routing import websocket_urlpatterns
14-
from dakara_server.token_auth import TokenAuthMiddleware
15-
1613
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dakara_server.settings.development")
1714

15+
# Initialize Django ASGI application early to ensure the AppRegistry is
16+
# populated before importing code that may import ORM models.
17+
asgi_application = get_asgi_application()
18+
19+
from dakara_server.routing import websocket_urlpatterns # noqa E402
20+
from dakara_server.token_auth import TokenAuthMiddleware # noqa E402
21+
1822
application = ProtocolTypeRouter(
1923
{
20-
"http": get_asgi_application(),
24+
"http": asgi_application,
2125
"websocket": AllowedHostsOriginValidator(
2226
AuthMiddlewareStack(TokenAuthMiddleware(URLRouter(websocket_urlpatterns)))
2327
),

dakara_server/dakara_server/settings/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"django.contrib.contenttypes",
2929
"django.contrib.sessions",
3030
"django.contrib.messages",
31+
"daphne",
3132
"django.contrib.staticfiles",
3233
"rest_framework",
3334
"rest_framework.authtoken",

dakara_server/playlist/signals.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
1+
from threading import Event
2+
13
from django.db.backends.signals import connection_created
24
from django.dispatch import receiver
35

46
from internal.reloader import is_reloader
57

8+
connection_created_once = Event()
9+
610

711
@receiver(connection_created)
812
def handle_connection_created(connection, **kwargs):
913
"""Perform playlist initialization operations as soon as the database is
1014
ready."""
11-
from playlist.date_stop import check_date_stop_on_app_ready
12-
from playlist.models import clean_channel_names
15+
# make sure this code is called only once
16+
if not connection_created_once.is_set():
17+
connection_created_once.set()
18+
19+
from playlist.date_stop import check_date_stop_on_app_ready
20+
from playlist.models import clean_channel_names
1321

14-
clean_channel_names()
22+
clean_channel_names()
1523

16-
if is_reloader():
17-
return
24+
if is_reloader():
25+
return
1826

19-
# not called by the reloader
20-
check_date_stop_on_app_ready()
27+
# not called by the reloader
28+
check_date_stop_on_app_ready()

0 commit comments

Comments
 (0)