Skip to content

Commit ecedd7e

Browse files
authored
Merge pull request #573 from PROCOLLAB-github/feature/asgi-daphne
Feature/asgi daphne
2 parents fc691d1 + a284a60 commit ecedd7e

5 files changed

Lines changed: 41 additions & 27 deletions

File tree

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
up:
22
docker compose -f docker-compose.yml up -d
33
down:
4-
docker compose -f docker-compose.yml down
4+
docker compose -f docker-compose.yml down
5+
6+
run-local:
7+
poetry run daphne -b 0.0.0.0 -p 8000 procollab.asgi:application

core/log/middleware.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
1-
from loguru import logger
2-
from django.conf import settings
1+
import copy
32
import logging
3+
4+
from django.conf import settings
5+
from loguru import logger
6+
47
from core.log.utils import InterceptHandler
58

69

10+
def _add_logger_handler(path: str, level: str) -> None:
11+
"""
12+
Attach loguru handler, falling back to synchronous mode if multiprocessing
13+
queues are not permitted (e.g. limited dev envs).
14+
"""
15+
kwargs = copy.deepcopy(settings.LOGURU_LOGGING)
16+
try:
17+
logger.add(path, level=level, **kwargs)
18+
except PermissionError:
19+
kwargs.pop("enqueue", None)
20+
logger.add(path, level=level, **kwargs)
21+
22+
723
class CustomLoguruMiddleware:
824
def __init__(self, get_response):
925
self.get_response = get_response
1026
logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True)
1127

1228
if settings.DEBUG:
13-
logger.add(
14-
f"{settings.BASE_DIR}/log/debug.log",
15-
level="DEBUG",
16-
**settings.LOGURU_LOGGING,
17-
)
18-
logger.add(
19-
f"{settings.BASE_DIR}/log/info.log",
20-
level="INFO",
21-
**settings.LOGURU_LOGGING,
22-
)
23-
logger.add(
24-
f"{settings.BASE_DIR}/log/warning.log",
25-
level="WARNING",
26-
**settings.LOGURU_LOGGING,
27-
)
29+
_add_logger_handler(f"{settings.BASE_DIR}/log/debug.log", "DEBUG")
30+
_add_logger_handler(f"{settings.BASE_DIR}/log/info.log", "INFO")
31+
_add_logger_handler(f"{settings.BASE_DIR}/log/warning.log", "WARNING")
2832

2933
def __call__(self, request):
3034
response = self.get_response(request)

files/models.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import reprlib
22

3-
from django.contrib.auth import get_user_model
3+
from django.conf import settings
44
from django.db import models
55

6-
User = get_user_model()
7-
86

97
class UserFile(models.Model):
108
"""
@@ -20,7 +18,11 @@ class UserFile(models.Model):
2018
"""
2119

2220
link = models.URLField(primary_key=True, null=False)
23-
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
21+
user = models.ForeignKey(
22+
settings.AUTH_USER_MODEL,
23+
on_delete=models.SET_NULL,
24+
null=True,
25+
)
2426
datetime_uploaded = models.DateTimeField(auto_now_add=True)
2527
name = models.TextField(blank=False, default="file")
2628
extension = models.TextField(blank=True, default="")

procollab/asgi.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
import os
2-
import chats.routing
32

43
from channels.routing import ProtocolTypeRouter, URLRouter
54
from django.core.asgi import get_asgi_application
65

7-
from chats.middleware import TokenAuthMiddleware
8-
96
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "procollab.settings")
107

8+
# Ensure Django app registry is loaded before importing project routes.
9+
django_asgi_app = get_asgi_application()
10+
11+
import chats.routing # noqa: E402
12+
from chats.middleware import TokenAuthMiddleware # noqa: E402
13+
1114
application = ProtocolTypeRouter(
1215
{
13-
"http": get_asgi_application(),
16+
"http": django_asgi_app,
1417
"websocket": TokenAuthMiddleware(URLRouter(chats.routing.websocket_urlpatterns)),
1518
}
1619
)

scripts/startup.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22

33
python manage.py migrate
44
python manage.py collectstatic --no-input
5-
python manage.py runserver 0.0.0.0:8000
5+
6+
# Use Daphne ASGI server instead of Django's dev server.
7+
exec daphne -b 0.0.0.0 -p 8000 procollab.asgi:application

0 commit comments

Comments
 (0)