Finally, I think reverting back to channels 1.x.x was much easier for you and me. ^^ Really appreciate what you did and the project, now I can implement the chatting functionality for my graduation project.
On Saturday, February 3, 2018 at 9:47:04 AM UTC+2, Andrew Godwin wrote: > > 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] > <javascript:>> 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\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\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 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/group/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/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/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] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> 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/edb12a05-6c39-4d77-93a8-744e5a00c4a2%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

