The bug was only on Python 3.5. It's possible the other system was 3.6 or
3.7?

Andrew

On Sun, Jul 7, 2019 at 9:48 AM Rohit Chopra <[email protected]> wrote:

> Hi Andrew,
>
> Just a small doubt, why same code is working on my local system.
> Both local and server have same  version of requirements mentioned in
> requirements.txt
>
> Rohit
>
> On Sun 7 Jul, 2019, 9:36 PM Andrew Godwin, <[email protected]> wrote:
>
>> Hi Rohit,
>>
>> This is my fault - we made a change in the "asgiref" library that
>> inadvertently removed Python 3.5 support. Channels still needs to support
>> it (even though Django doesn't).
>>
>> If you update to asgiref 3.1.4, which I've just released, that should fix
>> the issue.
>>
>> Andrew
>>
>> On Sun, Jul 7, 2019 at 8:52 AM Rohit Chopra <[email protected]>
>> wrote:
>>
>>> Hi All,
>>>
>>> I am using channels to implement WebSockets.
>>> I am trying to send data through WebSockets from *post_save *django
>>> signal.
>>> Below is my code.
>>>
>>> **signals.py**
>>>
>>>
>>> @receiver(post_save, sender=CheckIn)
>>> def send_data_on_save(sender, instance, **kwargs):
>>>     channel_layer = get_channel_layer()
>>>     stats = get_stats()
>>>     async_to_sync(channel_layer.group_send)(
>>>             'dashboard',
>>>             {
>>>                 'type': 'send_data',
>>>                 'message': stats
>>>             }
>>>         )
>>>
>>>
>>>     analytics = get_analytics()
>>>     async_to_sync(channel_layer.group_send)(
>>>             'analytic',
>>>             {
>>>                 'type': 'send_data',
>>>                 'message': analytics
>>>             }
>>>         )
>>>
>>>
>>>
>>> **consumers.py**
>>>
>>>
>>> class DashboardConsumer(WebsocketConsumer):
>>>     def connect(self):
>>>         self.room_group_name = 'dashboard'
>>>
>>>
>>>         # Join room group
>>>         async_to_sync(self.channel_layer.group_add)(
>>>             self.room_group_name,
>>>             self.channel_name
>>>         )
>>>
>>>
>>>         self.accept()
>>>
>>>
>>>     def disconnect(self, close_code):
>>>         # Leave room group
>>>         async_to_sync(self.channel_layer.group_discard)(
>>>             self.room_group_name,
>>>             self.channel_name
>>>         )
>>>
>>>
>>>     # Receive message from WebSocket
>>>     def receive(self, text_data):
>>>         text_data_json = json.loads(text_data)
>>>         message = text_data_json['message']
>>>
>>>
>>>         # Send message to room group
>>>         async_to_sync(self.channel_layer.group_send)(
>>>             self.room_group_name,
>>>             {
>>>                 'type': 'send_data',
>>>                 'message': message
>>>             }
>>>         )
>>>
>>>
>>>     # Receive message from room group
>>>     def send_data(self, event):
>>>         message = event['message']
>>>
>>>
>>>         # Send message to WebSocket
>>>         self.send(text_data=json.dumps({
>>>             'message': message
>>>         }))
>>>
>>>
>>>
>>> this same piece of code is working on my local machine(windows) but when
>>> i am trying to run this code on server(ubuntu 16.04) i am getting bellow
>>> error:
>>>
>>> **Traceback**
>>>
>>>
>>>
>>> Exception inside application: module 'asyncio' has no attribute
>>> '_get_running_loop'
>>>     File "/usr/lib/python3.5/asyncio/tasks.py", line 241, in _step
>>>         result = coro.throw(exc)
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/sessions.py"
>>> , line 183, in __call__
>>>         return await self.inner(receive, self.send)
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/middleware.py"
>>> , line 41, in coroutine_call
>>>         await inner_instance(receive, send)
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/consumer.py"
>>> , line 59, in __call__
>>>         [receive, self.channel_receive], self.dispatch
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/utils.py"
>>> , line 52, in await_many_dispatch
>>>         await dispatch(result)
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/asgiref/sync.py"
>>> , line 145, in __call__
>>>         return await asyncio.wait_for(future, timeout=None)
>>>     File "/usr/lib/python3.5/asyncio/tasks.py", line 373, in wait_for
>>>         return (yield from fut)
>>>     File "/usr/lib/python3.5/asyncio/futures.py", line 361, in __iter__
>>>         yield self  # This tells Task to wait for completion.
>>>     File "/usr/lib/python3.5/asyncio/tasks.py", line 296, in _wakeup
>>>         future.result()
>>>     File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result
>>>         raise self._exception
>>>     File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in
>>> run
>>>         result = self.fn(*self.args, **self.kwargs)
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/db.py"
>>> , line 14, in thread_handler
>>>         return super().thread_handler(loop, *args, **kwargs)
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/asgiref/sync.py"
>>> , line 164, in thread_handler
>>>         return func(*args, **kwargs)
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/consumer.py"
>>> , line 105, in dispatch
>>>         handler(message)
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/channels/generic/websocket.py"
>>> , line 39, in websocket_connect
>>>         self.connect()
>>>     File "/home/user1/demowebapps/vmsbackend/check_in/consumers.py",
>>> line 57, in connect
>>>         self.channel_name
>>>     File
>>> "/home/user1/demowebapps/env/lib/python3.5/site-packages/asgiref/sync.py"
>>> , line 41, in __call__
>>>         if asyncio._get_running_loop() is not None:
>>>     module 'asyncio' has no attribute '_get_running_loop'
>>>
>>>
>>>
>>>
>>>
>>> also when i am sending data normally from
>>> javascript  .send()
>>>
>>>
>>> function it is working normally on server but when post_save signal is
>>> called then only i get this error on server. this is working fine on my
>>> local system.
>>> I tried removing *async_to_sync *from signals then it is not giving
>>> error but it is not transmitting data through web socket.
>>> then it is giving:
>>>
>>> ./check_in/signals.py:47: RuntimeWarning: Coroutine
>>> 'RedisChannelLayer.group_send' was never awaited
>>> 'message': analytics
>>>
>>>
>>> I am using *python 3.5.2* on both local and server.
>>> please find attached *requirements.txt*
>>> I don't know whats wrong. is it code or something else.
>>> any help is appreciated.
>>>
>>> Thanks
>>>
>>> Regards,
>>> Rohit
>>>
>>> --
>>> 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/5d499e4f-b64c-48bb-8711-5c6bbbcbe2c3%40googlegroups.com
>>> <https://groups.google.com/d/msgid/django-users/5d499e4f-b64c-48bb-8711-5c6bbbcbe2c3%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 a topic in the
>> Google Groups "Django users" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/django-users/WaUWyQ1JWi8/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/CAFwN1urBXPX5RircQmQjyEjKQ6-f1cx_Y%3DfWTXnR2L%3DMhxgSgA%40mail.gmail.com
>> <https://groups.google.com/d/msgid/django-users/CAFwN1urBXPX5RircQmQjyEjKQ6-f1cx_Y%3DfWTXnR2L%3DMhxgSgA%40mail.gmail.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/CABR2EV803cnFyLJQ1H0J-cyG81K2p%2BZPp_2U6Y7TfkcjLf_Pjg%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CABR2EV803cnFyLJQ1H0J-cyG81K2p%2BZPp_2U6Y7TfkcjLf_Pjg%40mail.gmail.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/CAFwN1uqJ%3Dx3bXXedxQ%3DNEiru4fiLs_z-xghK04dtBYMNkF3uaA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to