channels v2.0.0 disconnect function not triggering

2018-02-05 Thread Ahmed Magdy
It seems like I cannot get the disconnect function in the consumer to get 
called at all.

class ChatConsumer(WebsocketConsumer):
   def connect(self):
   self.accept()

def disconnect(self):
   print('disconnected')

Using self.close from the consumer, or closing the javascript websocket 
doesn't trigger the print at all, though it does write in the log that the 
websocket disconnected.

[2018/02/06 09:50:32] WebSocket HANDSHAKING /sessions/ [127.0.0.1:7854]
[2018/02/06 09:50:32] WebSocket CONNECT /sessions/ [127.0.0.1:7854]
[2018/02/06 09:50:39] WebSocket DISCONNECT /sessions/ [127.0.0.1:7854]

Am I using it incorrectly?

-- 
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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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/520a3775-4a2b-4f9d-959f-bbe13491f6ab%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Channels websocket disconnecting after ~1min

2018-02-04 Thread Ahmed Magdy
Thanks!

I don't know if it was on purpose but you forgot to update the pypi package.

On Monday, February 5, 2018 at 1:59:45 AM UTC+2, Andrew Godwin wrote:
>
> Hi there,
>
> This is a bug that should be fixed in the latest release of Daphne that I 
> put out a few hours ago.
>
> Andrew
>
> On Sun, Feb 4, 2018 at 3:49 PM, Ahmed Magdy <ahmed...@gmail.com 
> > wrote:
>
>> Hello, and sorry for lots of questions about channels. 
>>
>> I can connect to the websocket from JavaScript and send/receive normally 
>> for exactly 60~61sec after that the HTTP request is repeated on it's own 
>> and the websocket disconnects.
>> Sometimes the HTTP get request is repeated more than once before the 
>> websocket disconnection.
>>
>> Even just connecting and waiting for 60~61secs result in the same thing.
>>
>> Terminal log
>>
>> Django version 2.0.2, using settings 'husite.settings'
>>> Starting ASGI/Channels development server at http://127.0.0.1:8000/
>>> Quit the server with CTRL-BREAK.
>>> 2018-02-05 01:35:22,350 - INFO - server - HTTP/2 support not enabled 
>>> (install the http2 and tls Twisted extras)
>>> 2018-02-05 01:35:22,351 - INFO - server - Listening on endpoint 
>>> tcp:port=8000:interface=127.0.0.1
>>> [2018/02/05 01:35:27] HTTP GET /sessions/24/ 200 [0.05, 127.0.0.1:9066]
>>> [2018/02/05 01:35:27] WebSocket HANDSHAKING /sessions/24 [127.0.0.1:9067
>>> ]
>>> [2018/02/05 01:35:27] WebSocket CONNECT /sessions/24 [127.0.0.1:9067]
>>> [2018/02/05 01:36:28] HTTP GET /sessions/24 503 [61.05, 127.0.0.1:9067]
>>> [2018/02/05 01:36:28] WebSocket DISCONNECT /sessions/24 [127.0.0.1:9067]
>>>
>>
>> # settings.py
>> # ...
>> ASGI_APPLICATION = "husite.routing.application"
>> CHANNEL_LAYERS = {
>>"default": {
>>"BACKEND": "channels_redis.core.RedisChannelLayer",
>>"CONFIG": {
>>"hosts": [("localhost", 6379)],
>>},
>>},
>> }
>>
>> class MyConsumer(WebsocketConsumer):
>>def connect(self):
>>self.accept()
>>
>> // Javascript code
>> ws = new WebSocket(`${protocol}://${location.host}/sessions/{{session.id
>> }}`)
>>
>>
>> -- 
>> 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 django-users...@googlegroups.com .
>> To post to this group, send email to django...@googlegroups.com 
>> .
>> 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/63f72d2c-c5b7-4729-9d85-d4b1bcbe7e6e%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/63f72d2c-c5b7-4729-9d85-d4b1bcbe7e6e%40googlegroups.com?utm_medium=email_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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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/d3d44ca9-515b-4f42-b239-907150a0ae8f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Channels websocket disconnecting after ~1min

2018-02-04 Thread Ahmed Magdy
Hello, and sorry for lots of questions about channels. 

I can connect to the websocket from JavaScript and send/receive normally 
for exactly 60~61sec after that the HTTP request is repeated on it's own 
and the websocket disconnects.
Sometimes the HTTP get request is repeated more than once before the 
websocket disconnection.

Even just connecting and waiting for 60~61secs result in the same thing.

Terminal log

Django version 2.0.2, using settings 'husite.settings'
> Starting ASGI/Channels development server at http://127.0.0.1:8000/
> Quit the server with CTRL-BREAK.
> 2018-02-05 01:35:22,350 - INFO - server - HTTP/2 support not enabled 
> (install the http2 and tls Twisted extras)
> 2018-02-05 01:35:22,351 - INFO - server - Listening on endpoint 
> tcp:port=8000:interface=127.0.0.1
> [2018/02/05 01:35:27] HTTP GET /sessions/24/ 200 [0.05, 127.0.0.1:9066]
> [2018/02/05 01:35:27] WebSocket HANDSHAKING /sessions/24 [127.0.0.1:9067]
> [2018/02/05 01:35:27] WebSocket CONNECT /sessions/24 [127.0.0.1:9067]
> [2018/02/05 01:36:28] HTTP GET /sessions/24 503 [61.05, 127.0.0.1:9067]
> [2018/02/05 01:36:28] WebSocket DISCONNECT /sessions/24 [127.0.0.1:9067]
>

# settings.py
# ...
ASGI_APPLICATION = "husite.routing.application"
CHANNEL_LAYERS = {
   "default": {
   "BACKEND": "channels_redis.core.RedisChannelLayer",
   "CONFIG": {
   "hosts": [("localhost", 6379)],
   },
   },
}

class MyConsumer(WebsocketConsumer):
   def connect(self):
   self.accept()

// Javascript code
ws = new WebSocket(`${protocol}://${location.host}/sessions/{{session.id}}`)


-- 
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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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/63f72d2c-c5b7-4729-9d85-d4b1bcbe7e6e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Channels v2.0 - 'RedisChannelLayer' object has no attribute 'ChannelFull'

2018-02-04 Thread Ahmed Magdy
Sending 10~12 messages to the websocket raises an exception

'RedisChannelLayer' object has no attribute 'ChannelFull'
>

Trace

ERROR:root:Exception inside application: 'RedisChannelLayer' object has no 
> attribute 'ChannelFull'
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\channels\consumer.py",
>  
> line 51, in __call__
> await await_many_dispatch([receive, self.channel_receive], 
> self.dispatch)
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\channels\utils.py",
>  
> line 48, in await_many_dispatch
> await dispatch(result)
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\asgiref\sync.py",
>  
> line 99, in inner
> return await async_func(*args, **kwargs)
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\asgiref\sync.py",
>  
> line 79, in __call__
> return await asyncio.wait_for(future, timeout=None)
>   File "C:\Python36\lib\asyncio\tasks.py", line 339, in wait_for
> return (yield from fut)
>   File "C:\Python36\lib\concurrent\futures\thread.py", line 56, in run
> result = self.fn(*self.args, **self.kwargs)
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\asgiref\sync.py",
>  
> line 91, in thread_handler
> raise e
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\asgiref\sync.py",
>  
> line 89, in thread_handler
> self.func(*args, **kwargs)
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\channels\consumer.py",
>  
> line 93, in dispatch
> handler(message)
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\channels\generic\websocket.py",
>  
> line 40, in websocket_receive
> self.receive(text_data=message["text"])
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\husite\GraduationProject\sessionManagerApp\consumers.py",
>  
> line 28, in receive
> self.send_message('[{0}] {1}'.format(self.get_user_fullname(), 
> text_data))
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\husite\GraduationProject\sessionManagerApp\consumers.py",
>  
> line 36, in send_message
> "text": text_data,
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\asgiref\sync.py",
>  
> line 45, in __call__
> call_result.result()
>   File "C:\Python36\lib\concurrent\futures\_base.py", line 432, in result
> return self.__get_result()
>   File "C:\Python36\lib\concurrent\futures\_base.py", line 384, in 
> __get_result
> raise self._exception
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\asgiref\sync.py",
>  
> line 53, in main_wrap
> result = await self.awaitable(*args, **kwargs)
>   File 
> "D:\Programming\DjangoWebsite\MigratingHUsite\lib\site-packages\channels_redis\core.py",
>  
> line 326, in group_send
> except self.ChannelFull:
>   'RedisChannelLayer' object has no attribute 'ChannelFull'
>

Here's the function that raises the exception.

def send_message(self, text_data):
   session_id = self.scope['url_route']['kwargs']['session_id']
   AsyncToSync(self.channel_layer.group_send)(
   'chat-{0}'.format(session_id),
   {
   "type": "chat.message",
   "text": text_data,
   },
   )

-- 
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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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/e05542a0-43e1-42ec-bc92-6861565f5e91%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Django Channels 2.0.0 groups

2018-02-03 Thread Ahmed Magdy
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 <ahmed...@gmail.com 
> > 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 <ahmed...@gmail.com> 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__
>

Re: Django Channels 2.0.0 groups

2018-02-02 Thread Ahmed Magdy
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 <ahmed...@gmail.com 
> > 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 creat

Re: Django Channels 2.0.0 groups

2018-02-02 Thread Ahmed Magdy
as never retrieved
> future:  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 <ahmed...@gmail.com 
> > 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 
>>> &q

Re: Django Channels 2.0.0 groups

2018-02-02 Thread Ahmed Magdy
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 <ahmed...@gmail.com 
> > 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.
>>>

Re: Django Channels 2.0.0 groups

2018-02-02 Thread Ahmed Magdy
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 <ahmed...@gmail.com 
> > 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 <ahmed...@gmail.com> 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 <ahmed...@gmail.com> 
>>>>> 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\t

Re: Django Channels 2.0.0 groups

2018-02-02 Thread Ahmed Magdy
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 <ahmed...@gmail.com 
> > 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 <ahmed...@gmail.com> 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)
>>>>>   Fi

Re: Django Channels 2.0.0 groups

2018-02-02 Thread Ahmed Magdy
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 <ahmed...@gmail.com 
> > 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 
>&g

Re: Django Channels 2.0.0 groups

2018-02-02 Thread Ahmed Magdy
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 <ahmed...@gmail.com 
> > 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, whic

Django Channels 2.0.0 groups

2018-02-02 Thread Ahmed Magdy
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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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.
For more options, visit https://groups.google.com/d/optout.