You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am attempting to build a really simple server endpoint that streams some byte data (supposed to response to a Range request from a client) using an instance of the web.StreamResponse class. I know in the older versions, start() is required before write(), but is prepare() meant to replace start() ?
# simple func to provide byte data
def bytesource():
videofile = open('bytedump.txt', 'rb')
byteload = videofile.read()
return byteload[10:2000]
# basic view intended to provide byte data
async def bytedata(request):
stream = web.StreamResponse(status=200, reason='OK')
stream.headers['Content-Type'] = 'text/html; charset=utf-8'
stream.headers['Cache-Control'] = 'no-cache'
stream.headers['Connection'] = 'keep-alive'
stream.headers['Accept-Ranges'] = 'bytes'
#stream.start(request)
#stream._start(request)
#stream.prepare(request)
msg= bytesource()
stream.write(msg)
stream.write_eof()
return stream
If I uncomment out stream.prepare(request), I get back:
RuntimeError: Cannot call write() before start()
If I try stream.start(request) I obviously get:
AttributeError: 'StreamResponse' objet has no attribute 'start'
Finally however, if I try: stream._start(request) everything works, and I get my byte data response sent to the client, and everything is ok.
But clearly, I am not meant to use a private class method here, right? What am I doing wrong or what am I missing in my understanding of how to implement such a view correctly?
Thank you for any help you can provide.
The text was updated successfully, but these errors were encountered:
mdublin
changed the title
Understanding start() AttributeError on StreamResponse object
Understanding prepare() RuntimeError on StreamResponse object
Apr 10, 2017
I am attempting to build a really simple server endpoint that streams some byte data (supposed to response to a Range request from a client) using an instance of the
web.StreamResponse
class. I know in the older versions,start()
is required beforewrite()
, but isprepare()
meant to replacestart()
?If I uncomment out
stream.prepare(request)
, I get back:RuntimeError: Cannot call write() before start()
If I try
stream.start(request)
I obviously get:AttributeError: 'StreamResponse' objet has no attribute 'start'
Finally however, if I try:
stream._start(request)
everything works, and I get my byte data response sent to the client, and everything is ok.But clearly, I am not meant to use a private class method here, right? What am I doing wrong or what am I missing in my understanding of how to implement such a view correctly?
Thank you for any help you can provide.
The text was updated successfully, but these errors were encountered: