czue / celery-progress

Drop in, configurable, dependency-free progress bars for your Django/Celery applications.
MIT License
473 stars 90 forks source link

Incompatible with django_celery_results #73

Open aidin-leo opened 3 years ago

aidin-leo commented 3 years ago

Websocket breaks when using django celery results because of django ORM.

aidin-leo commented 3 years ago

This can be fixed by adding sync_to_async decorator to progress.get_info() or for compatibility to oldest version receive method can be updated to:

async def receive(self, text_data):
    text_data_json = json.loads(text_data)
    task_type = text_data_json['type']

    if task_type == 'check_task_completion':
        from asgiref.sync import sync_to_async
        await self.channel_layer.group_send(
            self.task_id,
            {
                'type': 'update_task_progress',
                'data': await sync_to_async(Progress(AsyncResult(self.task_id)).get_info, thread_sensitive=True)()
            }
        )