From 6b33357f03016bb7a4e8780be2d27ec225b4933c Mon Sep 17 00:00:00 2001 From: Jon Janzen Date: Sun, 14 Apr 2024 18:59:49 -0700 Subject: [PATCH] Use the async sessions api if it exists --- channels/sessions.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/channels/sessions.py b/channels/sessions.py index fa16ec998..eaa630a5a 100644 --- a/channels/sessions.py +++ b/channels/sessions.py @@ -2,6 +2,7 @@ import time from importlib import import_module +import django from django.conf import settings from django.contrib.sessions.backends.base import UpdateError from django.core.exceptions import SuspiciousOperation @@ -167,9 +168,7 @@ def __init__(self, scope, send): async def resolve_session(self): session_key = self.scope["cookies"].get(self.cookie_name) - self.scope["session"]._wrapped = await database_sync_to_async( - self.session_store - )(session_key) + self.scope["session"]._wrapped = self.session_store(session_key) async def send(self, message): """ @@ -187,7 +186,7 @@ async def send(self, message): and message.get("status", 200) != 500 and (modified or settings.SESSION_SAVE_EVERY_REQUEST) ): - await database_sync_to_async(self.save_session)() + await self.save_session() # If this is a message type that can transport cookies back to the # client, then do so. if message["type"] in self.cookie_response_message_types: @@ -225,12 +224,15 @@ async def send(self, message): # Pass up the send return await self.real_send(message) - def save_session(self): + async def save_session(self): """ Saves the current session. """ try: - self.scope["session"].save() + if django.VERSION >= (5, 1): + await self.scope["session"].asave() + else: + database_sync_to_async(self.scope["session"].save)() except UpdateError: raise SuspiciousOperation( "The request's session was deleted before the "