on master help sign in
move statuscheck earlier on streaming response to give good error
90292e1Gershom
servant-client-core/src/Servant/Client/Core/Internal/HasClient.hs−1
@@ -267,7 +267,6 @@ instance OVERLAPPABLE_
267 }
267 }
268 return . buildFromStream $ ResultStream $ \k ->
268 return . buildFromStream $ ResultStream $ \k ->
269 runStreamingResponse sresp $ \(status,_headers,_httpversion,reader) -> do
269 runStreamingResponse sresp $ \(status,_headers,_httpversion,reader) -> do
270− when (H.statusCode status /= 200) $ error "bad status" -- TODO fixme
271 let unrender = unrenderFrames (Proxy :: Proxy framing) (Proxy :: Proxy a)
270 let unrender = unrenderFrames (Proxy :: Proxy framing) (Proxy :: Proxy a)
272 loop bs = do
271 loop bs = do
273 res <- BL.fromStrict <$> reader
272 res <- BL.fromStrict <$> reader
servant-client/src/Servant/Client/Internal/HttpClient.hs+10−6
@@ -111,7 +111,7 @@ performRequest req = do
111 Right response -> do
111 Right response -> do
112 let status = Client.responseStatus response
112 let status = Client.responseStatus response
113 status_code = statusCode status
113 status_code = statusCode status
114− ourResponse = clientResponseToReponse response
114+ ourResponse = clientResponseToResponse response
115 unless (status_code >= 200 && status_code < 300) $
115 unless (status_code >= 200 && status_code < 300) $
116 throwError $ FailureResponse ourResponse
116 throwError $ FailureResponse ourResponse
117 return ourResponse
117 return ourResponse
@@ -121,14 +121,18 @@ performStreamingRequest req = do
121 m <- asks manager
121 m <- asks manager
122 burl <- asks baseUrl
122 burl <- asks baseUrl
123 let request = requestToClientRequest burl req
123 let request = requestToClientRequest burl req
124−
125 return $ StreamingResponse $
124 return $ StreamingResponse $
126 \k -> Client.withResponse request m $
125 \k -> Client.withResponse request m $
127− \r ->
126+ \r -> do
127+ let status = Client.responseStatus r
128+ status_code = statusCode status
129+ unless (status_code >= 200 && status_code < 300) $ do
130+ b <- BSL.fromChunks <$> Client.brConsume (Client.responseBody r)
131+ throw $ FailureResponse $ Response status b (fromList $ Client.responseHeaders r) (Client.responseVersion r)
128− k (Client.responseStatus r, fromList $ Client.responseHeaders r, Client.responseVersion r, Client.responseBody r)
132+ k (status, fromList $ Client.responseHeaders r, Client.responseVersion r, Client.responseBody r)
129
133
130−clientResponseToReponse :: Client.Response BSL.ByteString -> Response
134+clientResponseToResponse :: Client.Response BSL.ByteString -> Response
131−clientResponseToReponse r = Response
135+clientResponseToResponse r = Response
132 { responseStatusCode = Client.responseStatus r
136 { responseStatusCode = Client.responseStatus r
133 , responseBody = Client.responseBody r
137 , responseBody = Client.responseBody r
134 , responseHeaders = fromList $ Client.responseHeaders r
138 , responseHeaders = fromList $ Client.responseHeaders r