packages feed

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