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, <and...@aeracode.org> 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 <rohitchopr...@gmail.com> > 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 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/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 > 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/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 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/CABR2EV803cnFyLJQ1H0J-cyG81K2p%2BZPp_2U6Y7TfkcjLf_Pjg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.