[Twisted-Python] self.channel.writeHeaders(version, code, reason, headers)\nbuiltins.AttributeError: \'NoneType\' object has no attribute \'writeHeaders\'\

Waqar Khan wk80333 at gmail.com
Mon Aug 5 00:24:37 MDT 2019


Hi Glyph,
    I am not sure I understand.

Is there a method/variable in request which keeps a track whether
notifyFinish has been fired..
So, I can do something like.

if not request.hasFiredNotifyFinish:
       request.finish()
??


I have sort of able to get around this issue.. though I can't put a finger
on what actually worked.
Here is what I did.. First change to 19.7rc01 version.. and just fix the
channel issue.

Next  self.fetch_response(request).. This is an async def.. So what I did
was..

async def fetch_response(request):
        future = {}
        try:
           future = await some other async def.. which returns future
        except asyncio.CancelledError as e:
           print("Error..", e)
        return future

I basically ended up doing this everywhere where there is async/await.
Next, I added this:
d.addErrback(lambda failure: failure.trap(asyncio.CancelledError))


So.. now.. I don't see the notifyFinish error anymore. And I am bit
terrified not to touch anything.. :-D

But, I want to try out your suggestion as that seems like a more solid way
to handle the issue. But I am not sure I quite understand, how do I figure
out whether notifyFinish has been called before calling finish?


On Mon, Aug 5, 2019 at 1:56 AM Glyph <glyph at twistedmatrix.com> wrote:

>
>
> On Aug 4, 2019, at 9:04 PM, Waqar Khan <wk80333 at gmail.com> wrote:
>
> Ah yes.. That is true..
>
> If I comment out request.finish() (Here is the doc which I tried to
> followed:
> https://twistedmatrix.com/documents/13.0.0/web/howto/web-in-60/interrupted.html
> )
> Then actually.. when I try to test out the code... (via curl or like doing
> requests.get .. to the URI)..
> it is just stuck..
>
>
> Yep!  This makes sense; if you don't call `.finish()` *at all* then your
> code will never tell the client that it's done.
>
> But if you call `.finish()` *after notifyFinish() has fired* then you get
> that error.
>
> If you change your code to only call `.finish()` if the deferred returned
> by notifyFinish() has not fired or failed yet, do you get the error?  It's
> possible that you still do, in which case, there's a bug in Twisted that
> needs to be fixed.
>
> I do want to convey my thanks for the help. Really appreciate it.
>
>
> Thanks for using Twisted :)
> -g
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20190805/b04274c8/attachment-0002.html>


More information about the Twisted-Python mailing list