-
Notifications
You must be signed in to change notification settings - Fork 117
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ignore :into collectable for non-200 responses #435
Ignore :into collectable for non-200 responses #435
Conversation
{:status, status}, {acc, req, resp} -> | ||
{acc, req, %{resp | status: status}} | ||
{:status, 200}, {nil, req, resp} -> | ||
{acc, collector} = Collectable.into(collectable) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Technically we should call collector.(:halt)
in case of an error. It wasn't the case in the existing code, but I assume that's unexpected.
The issue is that Finch.stream
doesn't return the accumulator in case of errors, so we have no access to {acc, collector}
. In the previous code this could've been fixed, because we call Collectable.into(collectable)
at the top, but with the new code it's not possible. However, I do think we should only call Collectable.into(collectable)
if we know the status is 200, since this call may have side effects (such as creating a file).
@wojtekmach @josevalim any ideas?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we should change Finch to return the accumulator? Or do you mean the Collector never returns the accumulator?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we should change Finch to return the accumulator?
Yeah, I think that's exactly what we would need, I'm just not sure if that breaking change is acceptable :D
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is not v1.0 yet. Plus, who is halting a collectable anyway?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FTR I will send a PR to finch. I guess it's not blocking this PR, since we hasn't been halting so far either.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See sneako/finch#295.
cc @acalejos, I think you run into this recently! |
Yes I think I did! When a redirect occurred, if they body of the redirecting URL wasn't empty it would trigger the |
Co-authored-by: Wojtek Mach <[email protected]>
@acalejos you mean That said, this PR does fix the redirect case for |
Yes, it was You're right I should pattern match on the status in the resp. I think for now Im just letting the XML parser error on the data and rescuing it and letting that be the way to ignore it, so I should change that 😅 |
Thank you! |
Currently when we pass
into: collectable
, the body is streamed into the collectable, regardless the status. This can be problematics for collectables with side effects. For example, I imagine a common use case may beinto: File.stream!(path)
to download a file, and in case of an error, we would save error message body instead.There is one concern, that I'm not sure how to solve, hence a draft (details in separate comment).