That looks like a problem with the version of Python you are running - what
version is it?

Andrew

On Fri, Feb 2, 2018 at 11:36 PM, Ahmed Magdy <[email protected]> wrote:

> Since you closed the issue, I'm posting here.
> Ok, so I've updated asgiref package to 2.1.1 and now getting different
> exception.
>
>
> [2018/02/03 09:29:23] WebSocket HANDSHAKING /sessions/ [127.0.0.1:13235]
>> ERROR:root:Exception inside application: '_WindowsSelectorEventLoop'
>> object has no attribute 'create_future'
>>   File "c:\python35\Lib\asyncio\tasks.py", line 241, in _step
>>     result = coro.throw(exc)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py",
>> line 51, in __call__
>>     await await_many_dispatch([receive, self.channel_receive],
>> self.dispatch)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\utils.py",
>> line 48, in await_many_dispatch
>>     await dispatch(result)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>> line 99, in inner
>>     return await async_func(*args, **kwargs)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>> line 79, in __call__
>>     return await asyncio.wait_for(future, timeout=None)
>>   File "c:\python35\Lib\asyncio\tasks.py", line 367, in wait_for
>>     return (yield from fut)
>>   File "c:\python35\Lib\asyncio\futures.py", line 358, in __iter__
>>     yield self  # This tells Task to wait for completion.
>>   File "c:\python35\Lib\asyncio\tasks.py", line 290, in _wakeup
>>     future.result()
>>   File "c:\python35\Lib\asyncio\futures.py", line 274, in result
>>     raise self._exception
>>   File "c:\python35\Lib\concurrent\futures\thread.py", line 55, in run
>>     result = self.fn(*self.args, **self.kwargs)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>> line 91, in thread_handler
>>     raise e
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>> line 89, in thread_handler
>>     self.func(*args, **kwargs)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py",
>> line 93, in dispatch
>>     handler(message)
>>   File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\
>> channels\generic\websocket.py", line 19, in websocket_connect
>>     self.connect()
>>   File "D:\Programming\DjangoWebsite\HUWebsite\husite\
>> djangoChannels\djangoChannels\consumers.py", line 7, in connect
>>     AsyncToSync(self.channel_layer.group_add)("chat", self.channel_name)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>> line 45, in __call__
>>     call_result.result()
>>   File "c:\python35\Lib\concurrent\futures\_base.py", line 405, in result
>>     return self.__get_result()
>>   File "c:\python35\Lib\concurrent\futures\_base.py", line 357, in
>> __get_result
>>     raise self._exception
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>> line 53, in main_wrap
>>     result = await self.awaitable(*args, **kwargs)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py",
>> line 280, in group_add
>>     pool = await self.connection(self.consistent_hash(group))
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py",
>> line 377, in connection
>>     self.pools[index] = await aioredis.create_redis_pool(**
>> self.hosts[index])
>>   File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\
>> aioredis\commands\__init__.py", line 197, in create_redis_pool
>>     loop=loop)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\pool.py",
>> line 56, in create_pool
>>     await pool._fill_free(override_min=False)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\pool.py",
>> line 388, in _fill_free
>>     conn = await self._create_new_connection(address)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\connection.py",
>> line 124, in create_connection
>>     loop=loop)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\connection.py",
>> line 163, in __init__
>>     self._close_waiter = loop.create_future()
>>   '_WindowsSelectorEventLoop' object has no attribute 'create_future'
>> [2018/02/03 09:29:24] WebSocket DISCONNECT /sessions/ [127.0.0.1:13235]
>> [2018/02/03 09:30:24] HTTP GET /sessions/ 503 [60.64, 127.0.0.1:13235]
>> ERROR:asyncio:Task exception was never retrieved
>> future: <Task finished coro=<receive() done, defined at
>> D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py:137>
>> exception=AttributeError("'_WindowsSelectorEventLoop'
>> object has no attribute 'create_future'",)>
>> Traceback (most recent call last):
>>   File "c:\python35\Lib\asyncio\tasks.py", line 239, in _step
>>     result = coro.send(None)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py",
>> line 158, in receive
>>     return await self.receive_buffer_lpop(channel)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py",
>> line 220, in receive_buffer_lpop
>>     task.result()
>>   File "c:\python35\Lib\asyncio\futures.py", line 274, in result
>>     raise self._exception
>>   File "c:\python35\Lib\asyncio\tasks.py", line 239, in _step
>>     result = coro.send(None)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py",
>> line 171, in receive_loop
>>     real_channel, message = await self.receive_single(channel)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py",
>> line 187, in receive_single
>>     pool = await self.connection(index)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels_redis\core.py",
>> line 377, in connection
>>     self.pools[index] = await aioredis.create_redis_pool(**
>> self.hosts[index])
>>   File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\
>> aioredis\commands\__init__.py", line 197, in create_redis_pool
>>     loop=loop)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\pool.py",
>> line 56, in create_pool
>>     await pool._fill_free(override_min=False)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\pool.py",
>> line 388, in _fill_free
>>     conn = await self._create_new_connection(address)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\connection.py",
>> line 124, in create_connection
>>     loop=loop)
>>   File 
>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\aioredis\connection.py",
>> line 163, in __init__
>>     self._close_waiter = loop.create_future()
>> AttributeError: '_WindowsSelectorEventLoop' object has no attribute
>> 'create_future'
>>
>>
> On Saturday, February 3, 2018 at 8:47:01 AM UTC+2, Andrew Godwin wrote:
>>
>> Yup, that looks like a genuine bug, I have opened a GitHub issue to track
>> it: https://github.com/django/channels/issues/848
>>
>> Andrew
>>
>> On Fri, Feb 2, 2018 at 10:35 PM, Ahmed Magdy <[email protected]> wrote:
>>
>>> I even made sure to read the docs multiple times before posting. :/
>>>
>>> I've been reading about Redis, and since I got windows OS, I installed
>>> the port for Windows based redis
>>> <https://github.com/MicrosoftArchive/redis>, tested the server and
>>> client they are working ok <https://i.imgur.com/78Ycvvj.jpg>.
>>>
>>> # settings.py
>>> # ...
>>> ASGI_APPLICATION = 'djangoChannels.routing.application'
>>>
>>> CHANNEL_LAYERS = {
>>>    "default": {
>>>        "BACKEND": "channels_redis.core.RedisChannelLayer",
>>>        "CONFIG": {
>>>            "hosts": [("localhost", 6379)],
>>>        },
>>>    },
>>> }
>>>
>>>
>>> # consumers.py
>>> from asgiref.sync import AsyncToSync
>>> from channels.generic.websocket import WebsocketConsumer
>>>
>>> class ChatConsumer(WebsocketConsumer):
>>>    def connect(self):
>>>        AsyncToSync(self.channel_layer.group_add)("chat", self
>>> .channel_name)
>>>
>>>     def disconnect(self):
>>>        AsyncToSync(self.channel_layer.group_discard)("chat", self
>>> .channel_name)
>>>
>>> raises an exception
>>>
>>> [2018/02/03 08:30:19] WebSocket HANDSHAKING /sessions/ [127.0.0.1:12778]
>>>> ERROR:root:Exception inside application: There is no current event loop
>>>> in thread 'Thread-3'.
>>>>   File "c:\python35\Lib\asyncio\tasks.py", line 241, in _step
>>>>     result = coro.throw(exc)
>>>>   File 
>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py",
>>>> line 51, in __call__
>>>>     await await_many_dispatch([receive, self.channel_receive],
>>>> self.dispatch)
>>>>   File 
>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\utils.py",
>>>> line 48, in await_many_dispatch
>>>>     await dispatch(result)
>>>>   File 
>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>>>> line 84, in inner
>>>>     return await async_func(*args, **kwargs)
>>>>   File 
>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>>>> line 67, in __call__
>>>>     return await asyncio.wait_for(future, timeout=None)
>>>>   File "c:\python35\Lib\asyncio\tasks.py", line 367, in wait_for
>>>>     return (yield from fut)
>>>>   File "c:\python35\Lib\asyncio\futures.py", line 358, in __iter__
>>>>     yield self  # This tells Task to wait for completion.
>>>>   File "c:\python35\Lib\asyncio\tasks.py", line 290, in _wakeup
>>>>     future.result()
>>>>   File "c:\python35\Lib\asyncio\futures.py", line 274, in result
>>>>     raise self._exception
>>>>   File "c:\python35\Lib\concurrent\futures\thread.py", line 55, in run
>>>>     result = self.fn(*self.args, **self.kwargs)
>>>>   File 
>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>>>> line 76, in thread_handler
>>>>     raise e
>>>>   File 
>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>>>> line 74, in thread_handler
>>>>     self.func(*args, **kwargs)
>>>>   File 
>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py",
>>>> line 93, in dispatch
>>>>     handler(message)
>>>>   File 
>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\generic\websocket.py",
>>>> line 19, in websocket_connect
>>>>     self.connect()
>>>>   File "D:\Programming\DjangoWebsite\HUWebsite\husite\djangoChannel
>>>> s\djangoChannels\consumers.py", line 7, in connect
>>>>     AsyncToSync(self.channel_layer.group_add)("chat",
>>>> self.channel_name)
>>>>   File 
>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py",
>>>> line 17, in __init__
>>>>     self.main_event_loop = asyncio.get_event_loop()
>>>>   File "c:\python35\Lib\asyncio\events.py", line 626, in get_event_loop
>>>>     return get_event_loop_policy().get_event_loop()
>>>>   File "c:\python35\Lib\asyncio\events.py", line 572, in get_event_loop
>>>>     % threading.current_thread().name)
>>>>   There is no current event loop in thread 'Thread-3'.
>>>>
>>>
>>> Thanks for what you did so far!
>>>
>>> On Saturday, February 3, 2018 at 6:58:56 AM UTC+2, Andrew Godwin wrote:
>>>>
>>>> The docs do mention this in a big callout at the top of the Channel
>>>> Layers page :) http://channels.readthedocs.io/en/latest/topics/channel_
>>>> layers.html
>>>>
>>>> Andrew
>>>>
>>>> On Fri, Feb 2, 2018 at 8:52 PM, Ahmed Magdy <[email protected]> wrote:
>>>>
>>>>> Aha thanks for making it clear, I will read more about redis then.
>>>>> Shouldn't the docs mention that though?
>>>>>
>>>>> On Saturday, February 3, 2018 at 6:47:47 AM UTC+2, Andrew Godwin wrote:
>>>>>>
>>>>>> No, there is no in-memory channel layer any more, only Redis is
>>>>>> available at the moment. You must put something into the settings in 
>>>>>> order
>>>>>> to make it function.
>>>>>>
>>>>>> Andrew
>>>>>>
>>>>>> On Fri, Feb 2, 2018 at 8:42 PM, Ahmed Magdy <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> I thought it uses in memory channel layer by default if it's empty?
>>>>>>> I didn't try setting a value, because only redis was available in v2.0.0
>>>>>>> and I don't like using stuff I don't understand.
>>>>>>>
>>>>>>> On Saturday, February 3, 2018 at 6:08:02 AM UTC+2, Andrew Godwin
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> It needs to contain a value to work - what value were you trying
>>>>>>>> that was not empty?
>>>>>>>>
>>>>>>>> Andrew
>>>>>>>>
>>>>>>>> On Fri, Feb 2, 2018 at 8:04 PM, Ahmed Magdy <[email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> I tried not having CHANNEL_LAYERS or setting it to {}
>>>>>>>>> same exception
>>>>>>>>>
>>>>>>>>> On Saturday, February 3, 2018 at 3:36:43 AM UTC+2, Andrew Godwin
>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> Do you have a CHANNEL_LAYERS setting in your settings file? If
>>>>>>>>>> so, what is it set to?
>>>>>>>>>>
>>>>>>>>>> Andrew
>>>>>>>>>>
>>>>>>>>>> On Fri, Feb 2, 2018 at 5:17 PM, Ahmed Magdy <[email protected]>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> That's what I did after reading the documentation here's how my
>>>>>>>>>>> channels files look like
>>>>>>>>>>>
>>>>>>>>>>> # settings.py
>>>>>>>>>>> # ...
>>>>>>>>>>> ASGI_APPLICATION = 'djangoChannels.routing.application'
>>>>>>>>>>> # ...
>>>>>>>>>>>
>>>>>>>>>>> # routing.py
>>>>>>>>>>> from django.conf.urls import url
>>>>>>>>>>>
>>>>>>>>>>> from channels.routing import ProtocolTypeRouter, URLRouter
>>>>>>>>>>> from channels.auth import AuthMiddlewareStack
>>>>>>>>>>>
>>>>>>>>>>> from .consumers import ChatConsumer
>>>>>>>>>>>
>>>>>>>>>>> application = ProtocolTypeRouter({
>>>>>>>>>>>    # Empty for now (http->django views is added by default)
>>>>>>>>>>>    'websocket': AuthMiddlewareStack(
>>>>>>>>>>>        URLRouter([
>>>>>>>>>>>            url('^sessions/$', ChatConsumer)
>>>>>>>>>>>        ])
>>>>>>>>>>>    )
>>>>>>>>>>> })
>>>>>>>>>>>
>>>>>>>>>>> # consumers.py
>>>>>>>>>>> from asgiref.sync import AsyncToSync
>>>>>>>>>>> from channels.generic.websocket import WebsocketConsumer
>>>>>>>>>>>
>>>>>>>>>>> class ChatConsumer(WebsocketConsumer):
>>>>>>>>>>>
>>>>>>>>>>>     def connect(self):
>>>>>>>>>>>        AsyncToSync(self.channel_layer.group_add)("chat", self
>>>>>>>>>>> .channel_name)
>>>>>>>>>>>
>>>>>>>>>>>     def disconnect(self):
>>>>>>>>>>>        AsyncToSync(self.channel_layer.group_discard)("chat",
>>>>>>>>>>> self.channel_name)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> After connecting with JS websocket to
>>>>>>>>>>>
>>>>>>>>>>> ws://127.0.0.1:8000/sessions/
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Raises an exception
>>>>>>>>>>>
>>>>>>>>>>> Performing system checks...
>>>>>>>>>>>>
>>>>>>>>>>>> System check identified no issues (0 silenced).
>>>>>>>>>>>> February 03, 2018 - 03:14:29
>>>>>>>>>>>> Django version 2.0.2, using settings 'djangoChannels.settings'
>>>>>>>>>>>> Starting ASGI/Channels development server at
>>>>>>>>>>>> http://127.0.0.1:8000/
>>>>>>>>>>>> Quit the server with CTRL-BREAK.
>>>>>>>>>>>> 2018-02-03 03:14:29,799 - INFO - server - HTTP/2 support not
>>>>>>>>>>>> enabled (install the http2 and tls Twisted extras)
>>>>>>>>>>>> 2018-02-03 03:14:29,800 - INFO - server - Listening on endpoint
>>>>>>>>>>>> tcp:port=8000:interface=127.0.0.1
>>>>>>>>>>>> [2018/02/03 03:14:32] WebSocket HANDSHAKING /sessions/ [
>>>>>>>>>>>> 127.0.0.1:8631]
>>>>>>>>>>>> ERROR:root:Exception inside application: 'NoneType' object has
>>>>>>>>>>>> no attribute 'group_add'
>>>>>>>>>>>>   File "c:\python35\Lib\asyncio\tasks.py", line 241, in _step
>>>>>>>>>>>>     result = coro.throw(exc)
>>>>>>>>>>>>   File "D:\Programming\DjangoWebsite\
>>>>>>>>>>>> HUWebsite\lib\site-packages\channels\consumer.py", line 53, in
>>>>>>>>>>>> __call__
>>>>>>>>>>>>     await await_many_dispatch([receive], self.dispatch)
>>>>>>>>>>>>   File "D:\Programming\DjangoWebsite\
>>>>>>>>>>>> HUWebsite\lib\site-packages\channels\utils.py", line 48, in
>>>>>>>>>>>> await_many_dispatch
>>>>>>>>>>>>     await dispatch(result)
>>>>>>>>>>>>   File "D:\Programming\DjangoWebsite\
>>>>>>>>>>>> HUWebsite\lib\site-packages\asgiref\sync.py", line 84, in inner
>>>>>>>>>>>>     return await async_func(*args, **kwargs)
>>>>>>>>>>>>   File "D:\Programming\DjangoWebsite\
>>>>>>>>>>>> HUWebsite\lib\site-packages\asgiref\sync.py", line 67, in
>>>>>>>>>>>> __call__
>>>>>>>>>>>>     return await asyncio.wait_for(future, timeout=None)
>>>>>>>>>>>>   File "c:\python35\Lib\asyncio\tasks.py", line 367, in
>>>>>>>>>>>> wait_for
>>>>>>>>>>>>     return (yield from fut)
>>>>>>>>>>>>   File "c:\python35\Lib\asyncio\futures.py", line 358, in
>>>>>>>>>>>> __iter__
>>>>>>>>>>>>     yield self  # This tells Task to wait for completion.
>>>>>>>>>>>>   File "c:\python35\Lib\asyncio\tasks.py", line 290, in _wakeup
>>>>>>>>>>>>     future.result()
>>>>>>>>>>>>   File "c:\python35\Lib\asyncio\futures.py", line 274, in
>>>>>>>>>>>> result
>>>>>>>>>>>>     raise self._exception
>>>>>>>>>>>>   File "c:\python35\Lib\concurrent\futures\thread.py", line
>>>>>>>>>>>> 55, in run
>>>>>>>>>>>>     result = self.fn(*self.args, **self.kwargs)
>>>>>>>>>>>>   File "D:\Programming\DjangoWebsite\
>>>>>>>>>>>> HUWebsite\lib\site-packages\asgiref\sync.py", line 76, in
>>>>>>>>>>>> thread_handler
>>>>>>>>>>>>     raise e
>>>>>>>>>>>>   File "D:\Programming\DjangoWebsite\
>>>>>>>>>>>> HUWebsite\lib\site-packages\asgiref\sync.py", line 74, in
>>>>>>>>>>>> thread_handler
>>>>>>>>>>>>     self.func(*args, **kwargs)
>>>>>>>>>>>>   File "D:\Programming\DjangoWebsite\
>>>>>>>>>>>> HUWebsite\lib\site-packages\channels\consumer.py", line 93, in
>>>>>>>>>>>> dispatch
>>>>>>>>>>>>     handler(message)
>>>>>>>>>>>>   File "D:\Programming\DjangoWebsite\
>>>>>>>>>>>> HUWebsite\lib\site-packages\channels\generic\websocket.py",
>>>>>>>>>>>> line 19, in websocket_connect
>>>>>>>>>>>>     self.connect()
>>>>>>>>>>>>   File "D:\Programming\DjangoWebsite\
>>>>>>>>>>>> HUWebsite\husite\djangoChannels\djangoChannels\consumers.py",
>>>>>>>>>>>> line 8, in connect
>>>>>>>>>>>>     AsyncToSync(self.channel_layer.group_add)("chat",
>>>>>>>>>>>> self.channel_name)
>>>>>>>>>>>>   'NoneType' object has no attribute 'group_add'
>>>>>>>>>>>> [2018/02/03 03:14:32] WebSocket DISCONNECT /sessions/ [
>>>>>>>>>>>> 127.0.0.1:8631]
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Friday, February 2, 2018 at 7:37:36 PM UTC+2, Andrew Godwin
>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> Hi Ahmed,
>>>>>>>>>>>>
>>>>>>>>>>>> In the new release channel layers are optional - if you don't
>>>>>>>>>>>> configure them they will indeed come through as None. The settings 
>>>>>>>>>>>> format
>>>>>>>>>>>> changed slightly too - you can read more here:
>>>>>>>>>>>> http://channels.readthedocs.io/en/latest/topics/
>>>>>>>>>>>> channel_layers.html
>>>>>>>>>>>>
>>>>>>>>>>>> Andrew
>>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Feb 2, 2018 at 3:31 AM, Ahmed Magdy <[email protected]
>>>>>>>>>>>> > wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> I'm relatively new to channels and was using Channels v1.x.x
>>>>>>>>>>>>> groups easily, but after v2.0.0 update and reading the 
>>>>>>>>>>>>> documentation
>>>>>>>>>>>>>
>>>>>>>>>>>>> # This example uses WebSocket consumer, which is synchronous, and 
>>>>>>>>>>>>> so
>>>>>>>>>>>>> # needs the async channel layer functions to be converted.
>>>>>>>>>>>>> from asgiref.sync import AsyncToSync
>>>>>>>>>>>>>
>>>>>>>>>>>>> class ChatConsumer(WebsocketConsumer):
>>>>>>>>>>>>>
>>>>>>>>>>>>>     def connect(self):
>>>>>>>>>>>>>         AsyncToSync(self.channel_layer.group_add)("chat", 
>>>>>>>>>>>>> self.channel_name)
>>>>>>>>>>>>>
>>>>>>>>>>>>>     def disconnect(self):
>>>>>>>>>>>>>         AsyncToSync(self.channel_layer.group_discard)("chat", 
>>>>>>>>>>>>> self.channel_name)
>>>>>>>>>>>>>
>>>>>>>>>>>>> Enter code here...
>>>>>>>>>>>>>
>>>>>>>>>>>>> channel_layer, channel_name are always NoneType and exception
>>>>>>>>>>>>> occurs.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Is that because I didn't configure channel layers? But in the
>>>>>>>>>>>>> old version I also used the in memory type and Groups were 
>>>>>>>>>>>>> working well.
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>>>>> Google Groups "Django users" group.
>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from
>>>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>>>> To post to this group, send email to
>>>>>>>>>>>>> [email protected].
>>>>>>>>>>>>> Visit this group at https://groups.google.com/grou
>>>>>>>>>>>>> p/django-users.
>>>>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>>>>> https://groups.google.com/d/msgid/django-users/fff84d59-da69
>>>>>>>>>>>>> -47d5-a7c3-ee0221680642%40googlegroups.com
>>>>>>>>>>>>> <https://groups.google.com/d/msgid/django-users/fff84d59-da69-47d5-a7c3-ee0221680642%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>>>> .
>>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>> <https://lh3.googleusercontent.com/-fvPoTzCZOwo/WnUNLrDzVZI/AAAAAAAAC6Q/lNyrJjyOUtkudo5F--8pKqzlX23r25i4gCLcBGAs/s1600/Capture.JPG>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>>> Google Groups "Django users" group.
>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from
>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>> To post to this group, send email to [email protected].
>>>>>>>>>>> Visit this group at https://groups.google.com/group/django-users
>>>>>>>>>>> .
>>>>>>>>>>> To view this discussion on the web visit
>>>>>>>>>>> https://groups.google.com/d/msgid/django-users/8ca34830-d807
>>>>>>>>>>> -447c-836b-d2e52ee87b6d%40googlegroups.com
>>>>>>>>>>> <https://groups.google.com/d/msgid/django-users/8ca34830-d807-447c-836b-d2e52ee87b6d%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>> .
>>>>>>>>>>>
>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>>> Groups "Django users" group.
>>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>>> send an email to [email protected].
>>>>>>>>> To post to this group, send email to [email protected].
>>>>>>>>> Visit this group at https://groups.google.com/group/django-users.
>>>>>>>>> To view this discussion on the web visit
>>>>>>>>> https://groups.google.com/d/msgid/django-users/d0fc9f6a-43f4
>>>>>>>>> -41c1-8a5e-b988a9fa7870%40googlegroups.com
>>>>>>>>> <https://groups.google.com/d/msgid/django-users/d0fc9f6a-43f4-41c1-8a5e-b988a9fa7870%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "Django users" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to [email protected].
>>>>>>> To post to this group, send email to [email protected].
>>>>>>> Visit this group at https://groups.google.com/group/django-users.
>>>>>>> To view this discussion on the web visit
>>>>>>> https://groups.google.com/d/msgid/django-users/fb9aa942-8d53
>>>>>>> -472c-bec0-a1c4a46171d3%40googlegroups.com
>>>>>>> <https://groups.google.com/d/msgid/django-users/fb9aa942-8d53-472c-bec0-a1c4a46171d3%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>>
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Django users" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at https://groups.google.com/group/django-users.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/django-users/3329c3e6-a7db
>>>>> -4879-9b87-1c478ba4f0da%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/django-users/3329c3e6-a7db-4879-9b87-1c478ba4f0da%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/django-users.
>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>> gid/django-users/1790fdec-3855-4f19-bc28-9736b9dad005%40googlegroups.com
>>> <https://groups.google.com/d/msgid/django-users/1790fdec-3855-4f19-bc28-9736b9dad005%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/django-users/02948f71-38ed-4f6b-a9f3-ed0ae15d856b%40googlegroups.com
> <https://groups.google.com/d/msgid/django-users/02948f71-38ed-4f6b-a9f3-ed0ae15d856b%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAFwN1uoTm1FffVVNLwHMcfS0kgRbxmarLs76GOVJ99bZz9Y0pQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to