Hi,

I am attempting to upgrade from Django 3.0 to 3.1 and asgiref 2.x to 3.x,
and noticed a breakage in a view which I suspect might be related to its
usage of StreamingHttpResponse. The code in question now raises the
following exception:

2020-12-08 17:50:05,159 [ERROR] daphne.server: Exception inside
application: You cannot call this from an async context - use a thread or
sync_to_async.
Traceback (most recent call last):
 File "/usr/local/lib/python3.8/dist-packages/channels/staticfiles.py",
line 44, in __call__
   return await self.application(scope, receive, send)
 File "/usr/local/lib/python3.8/dist-packages/channels/routing.py", line
71, in __call__
   return await application(scope, receive, send)
 File
"/usr/local/lib/python3.8/dist-packages/django/core/handlers/asgi.py", line
168, in __call__
   await self.send_response(response, send)
 File
"/usr/local/lib/python3.8/dist-packages/django/core/handlers/asgi.py", line
242, in send_response
   for part in response:
 File "/main/srhaque/Innovatieltd/source/paiyroll/utils/time_machine.py",
line 202, in fill
   for files in filler:
 File
"/main/srhaque/Innovatieltd/source/paiyroll/views/employee/mobile_views.py",
line 636, in regenerate_documents
   pay_run_db = models.PayRun.objects.get(id=pay_run['id'])
 File "/usr/local/lib/python3.8/dist-packages/django/db/models/manager.py",
line 85, in manager_method
   return getattr(self.get_queryset(), name)(*args, **kwargs)
 File "/usr/local/lib/python3.8/dist-packages/django/db/models/query.py",
line 425, in get
   num = len(clone)
 File "/usr/local/lib/python3.8/dist-packages/django/db/models/query.py",
line 269, in __len__
   self._fetch_all()
 File "/usr/local/lib/python3.8/dist-packages/django/db/models/query.py",
line 1308, in _fetch_all
   self._result_cache = list(self._iterable_class(self))
 File
"/usr/local/lib/python3.8/dist-packages/django_viewflow-1.6.1-py3.8.egg/viewflow/managers.py",
line 79, in __iter__
   for process in base_iterator:
 File "/usr/local/lib/python3.8/dist-packages/django/db/models/query.py",
line 53, in __iter__
   results = compiler.execute_sql(chunked_fetch=self.chunked_fetch,
chunk_size=self.chunk_size)
 File
"/usr/local/lib/python3.8/dist-packages/django/db/models/sql/compiler.py",
line 1154, in execute_sql
   cursor = self.connection.cursor()
 File "/usr/local/lib/python3.8/dist-packages/django/utils/asyncio.py",
line 24, in inner
   raise SynchronousOnlyOperation(message)
django.core.exceptions.SynchronousOnlyOperation: You cannot call this from
an async context - use a thread or sync_to_async.

(There is a subsequent exception, appended below, which I assume that is
caused by this exception). I see that the immediate cause of the problem is
the ORM query in my mobile_views.py, but I cannot seem to find the correct
way to wrap the query in sync_to_async() or database_sync_to_async(). Any
hints or pointers would be most welcome.

Thanks, Shaheed

Attachment: second exception for reference...

2020-12-08 17:50:05,168 [ERROR] asyncio: Exception in callback
AsyncioSelectorReactor.callLater.<locals>.run() at
/usr/local/lib/python3.8/dist-packages/twisted/internet/asyncioreactor.py:287

handle: <TimerHandle when=115234.625186167
AsyncioSelectorReactor.callLater.<locals>.run() at
/usr/local/lib/python3.8/dist-packages/twisted/internet/asyncioreactor.py:287>

Traceback (most recent call last):
 File "/usr/lib/python3.8/asyncio/events.py", line 81, in _run
   self._context.run(self._callback, *self._args)
 File
"/usr/local/lib/python3.8/dist-packages/twisted/internet/asyncioreactor.py",
line 290, in run
   f(*args, **kwargs)
 File "/usr/local/lib/python3.8/dist-packages/daphne/server.py", line 295,
in application_checker
   protocol.handle_exception(exception)
 File "/usr/local/lib/python3.8/dist-packages/daphne/http_protocol.py",
line 301, in handle_exception
   self.basic_error(500, b"Internal Server Error", "Exception inside
application.")
 File "/usr/local/lib/python3.8/dist-packages/daphne/http_protocol.py",
line 342, in basic_error
   self.handle_reply(
 File "/usr/local/lib/python3.8/dist-packages/daphne/http_protocol.py",
line 242, in handle_reply
   raise ValueError("HTTP response has already been started")
ValueError: HTTP response has already been started

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAHAc2jfX9cb5jfLmtD0vDWQtSoYfiZ_oJpi%2BNdpsX6PJ_e13Vw%40mail.gmail.com.

Reply via email to