Ah, yes, it looks like aioredis requires at least 3.5.2. I will update the
channels_redis readme to make this clear.

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

> v3.5.1:37a07cee5969
>
> On Saturday, February 3, 2018 at 9:41:38 AM UTC+2, Andrew Godwin wrote:
>>
>> 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\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 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(**s
>>>> elf.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(**s
>>>> elf.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/grou
>>>>>>>>>>>>> p/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/msgid/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/ms
>>> gid/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/af4d70d5-4818-4265-b8a9-f3bf09f00c2b%40googlegroups.com
> <https://groups.google.com/d/msgid/django-users/af4d70d5-4818-4265-b8a9-f3bf09f00c2b%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/CAFwN1urkd6Wo0330rzS4D4xfB-woNWk2vLxOzydHy2AS%2BKjQUg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to