http-conduit-browser 2.0.0.0 → 2.0.0.1
raw patch · 2 files changed
+89/−13 lines, 2 filesdep ~http-typesdep ~resourcetPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: http-types, resourcet
API changes (from Hackage documentation)
Files
Network/HTTP/Conduit/Browser.hs view
@@ -213,7 +213,9 @@ import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as L +#if !MIN_VERSION_http_client(0,5,0) import Data.Default+#endif import Data.Function (on) import Data.List (partition ,union@@ -222,7 +224,13 @@ import Control.Monad import Control.Monad.Trans.Class import Control.Monad.Trans.State-import Control.Monad.Trans.Resource (ResourceT, liftResourceT, MonadResource)+import Control.Monad.Trans.Resource+ (ResourceT+ ,liftResourceT+#if MIN_VERSION_http_client(0,5,0)+ ,runResourceT+#endif+ ,MonadResource) import Control.Monad.Trans.Control (MonadBaseControl) import Control.Monad.IO.Class import Control.Monad.Base@@ -231,6 +239,9 @@ import Control.Exception (SomeException ,toException) import qualified Data.Map as Map+#if MIN_VERSION_http_client(0,5,0)+import Data.IORef+#endif data BrowserState = BrowserState { currentLocation :: Maybe URI@@ -255,7 +266,7 @@ , timeout = Nothing , authorities = const Nothing , cookieFilter = const $ const $ return True- , browserCookieJar = def+ , browserCookieJar = mempty , currentProxy = Nothing , overrideHeaders = Map.empty , defaultHeaders = Map.singleton HT.hUserAgent "http-conduit-browser"@@ -279,10 +290,15 @@ maybe err use =<< gets currentLocation where err = lift $ throwM $ InvalidUrlException url "Invalid URL"- use loc = maybe err (setUri def) $ do+ use loc = maybe err (setUri defReq) $ do uri <- parseRelativeReference url relativeTo' uri loc relativeTo' x = Just . relativeTo x+#if MIN_VERSION_http_client(0,4,30)+ defReq = defaultRequest+#else+ defReq = def+#endif -- | Make a request, using all the state in the current BrowserState makeRequest :: (MonadBaseControl IO m, MonadIO m, MonadResource m) => Request -> GenericBrowserAction m (Response (C.ResumableSource (ResourceT IO) BS.ByteString))@@ -302,35 +318,71 @@ req { redirectCount = 0 , proxy = maybe (proxy req) Just current_proxy --, socksProxy = maybe (socksProxy req) Just current_socks_proxy+#if MIN_VERSION_http_client(0,5,0)+ , checkResponse = \ _ _ -> return ()+ , responseTimeout = maybe (responseTimeout req) responseTimeoutMicro time_out+#else , checkStatus = \ _ _ _ -> Nothing , responseTimeout = maybe (responseTimeout req) Just time_out+#endif --, clientCertificates = fromMaybe (clientCertificates req) client_certificates- }) max_retry_count- (fromMaybe (redirectCount req) max_redirects)- (fromMaybe (checkStatus req) current_check_status)- Nothing+ })+ max_retry_count+ (fromMaybe (redirectCount req) max_redirects)+#if MIN_VERSION_http_client(0,5,0)+ (fromMaybe (checkResponse req) $+ fmap+ (\check' -> (\ _ rs -> maybe (return ()) LE.throwIO $+ check'+ (responseStatus rs)+ (responseHeaders rs)+ (responseCookieJar rs)+ ))+ current_check_status+ )+#else+ (fromMaybe (checkStatus req) current_check_status)+#endif+ Nothing where retryHelper :: (MonadBaseControl IO m, MonadIO m, MonadResource m) => Request -> Int -> Int+#if MIN_VERSION_http_client(0,5,0)+ -> (Request -> Response BodyReader -> IO ())+#else -> (HT.Status -> HT.ResponseHeaders -> CookieJar -> Maybe SomeException)+#endif -> Maybe SomeException -> GenericBrowserAction m (Response (C.ResumableSource (ResourceT IO) BS.ByteString)) retryHelper request' retry_count max_redirects check_status e | retry_count < 0 = case e of Just e' -> LE.throwIO e'+#if MIN_VERSION_http_client(0,5,0)+ Nothing -> LE.throwIO $ HttpExceptionRequest request' ResponseTimeout+#else Nothing -> LE.throwIO TooManyRetries+#endif | otherwise = do res <- LE.catch (if max_redirects == 0 then performRequest request' else runRedirectionChain request' max_redirects) (\(e'::HttpException) -> retryHelper request' (retry_count - 1) max_redirects check_status $ Just $ toException e')+#if MIN_VERSION_http_client(0,5,0)+ resBR <- liftIO $ backToBodyReader res++ et <- LE.try (liftIO $ check_status request' resBR)+ case et of+ Right () -> return res+ Left e' -> retryHelper request' (retry_count - 1) max_redirects check_status (Just e')+#else case check_status (responseStatus res) (responseHeaders res) (responseCookieJar res) of Nothing -> return res Just e' -> retryHelper request' (retry_count - 1) max_redirects check_status (Just e')+#endif runRedirectionChain request' redirect_count = httpRedirectBase redirect_count@@ -352,7 +404,7 @@ let request' = (applyAuthorities auths request'') {cookieJar = Just $ createCookieJar $ (union `on` destroyCookieJar)- (fromMaybe def $ cookieJar request'')+ (fromMaybe mempty $ cookieJar request'') cookie_jar' } res <- liftResourceT $ http request' manager'@@ -363,7 +415,27 @@ , currentLocation = Just $ getUri request' } return res+#if MIN_VERSION_http_client(0,5,0)+ backToBodyReader :: Response (C.ResumableSource (ResourceT IO) BS.ByteString) -> IO (Response BodyReader)+ backToBodyReader res = do+ let origsource = responseBody res + curSourceRef <- newIORef origsource++ return res {responseBody = runResourceT $ do+ bsource <- liftIO $ readIORef curSourceRef+ (bsource', mbs) <- bsource C.$$++ C.await+ liftIO $ writeIORef curSourceRef bsource'++ case mbs of+ Nothing -> do+ C.closeResumableSource bsource'+ return BS.empty+ Just bs ->+ return bs+ }+#endif+ httpRedirectBase :: (MonadBaseControl IO m, MonadIO m, MonadResource m) => Int -- ^ 'redirectCount'@@ -372,7 +444,11 @@ -> m (Response (C.ResumableSource (ResourceT IO) BS.ByteString)) httpRedirectBase count0 http' req0 = go count0 req0 [] where+#if MIN_VERSION_http_client(0,5,0)+ go count req' ress | count < 0 = LE.throwIO . HttpExceptionRequest req' . TooManyRedirects =<< mapM (liftResourceT . lbsResponse) ress+#else go count _ ress | count < 0 = LE.throwIO . TooManyRedirects =<< mapM (liftResourceT . lbsResponse) ress+#endif go count req' ress = do (res, mreq) <- http' req' case mreq of
http-conduit-browser.cabal view
@@ -1,5 +1,5 @@ name: http-conduit-browser-version: 2.0.0.0+version: 2.0.0.1 license: BSD3 license-file: LICENSE author: Myles C. Maxfield <myles.maxfield@gmail.com>@@ -10,7 +10,7 @@ letting you elegantly describe a browsing session. This package wraps the http-conduit package by Michael Snoyman. - This package is abandoned and unsupported, use http://hackage.haskell.org/package/wreq+ This package is deprecated, use <http://hackage.haskell.org/package/wreq> instead category: Web, Conduit stability: Stable cabal-version: >= 1.8@@ -64,13 +64,13 @@ , case-insensitive , containers , transformers- , resourcet+ , resourcet >= 1 && < 2 , lifted-base- , http-types+ , http-types >= 0.7 , base64-bytestring , cookie , time , warp- , wai == 2.*+ , wai >= 2 && < 3 , network >= 2.3 , monad-control