on develop help sign in
Merge pull request #41 from brendanhay/feature/http-client-0.5

Update to support new(er) http-client

commit6a46ac044ab51acff08dc397533d372a0c5c505e authorBrendan Hay <brendanhay@users.noreply.github.com> dateSun 18 Sep 2016, 18:49 (10 years ago) parent4db4da074fb2ab
10 files changed+37−32
core/gogol-core.cabal+1−1 gogol/gogol.cabal+2−3 gogol/src/Network/Google/Compute/Metadata.hs+19−14 gogol/src/Network/Google/Internal/Auth.hs+1−3 gogol/src/Network/Google/Internal/HTTP.hs+5−4 gogol/src/Network/Google/Internal/Logger.hs+1−2 gogol/src/Network/Google/Internal/Multipart.hs−1 script/travis-matrix+1−1 stack-7.10.3.yaml+5−2 stack-8.0.1.yaml+2−1
core/gogol-core.cabal+1−1
@@ -55,7 +55,7 @@ library
5555 , exceptions >= 0.6
5656 , hashable >= 1.2
5757 , http-api-data >= 0.2
58− , http-client >= 0.4.4
58+ , http-client >= 0.5 && < 1
5959 , http-media >= 0.6
6060 , http-types >= 0.8.6
6161 , lens >= 4.4
gogol/gogol.cabal+2−3
@@ -63,13 +63,12 @@ library
6363 , conduit >= 1.1
6464 , conduit-extra >= 1.1
6565 , cryptonite >= 0.6
66− , data-default-class >= 0.0.1
6766 , directory >= 1.2
6867 , exceptions >= 0.6
6968 , filepath >= 1.2
7069 , gogol-core == 0.1.0.*
71− , http-client >= 0.4.4
72− , http-conduit >= 2.1.4
70+ , http-client >= 0.5 && < 1
71+ , http-conduit >= 2.2 && < 3
7372 , http-media >= 0.6
7473 , http-types >= 0.8.6
7574 , lens >= 4.4
gogol/src/Network/Google/Compute/Metadata.hs+19−14
@@ -40,19 +40,20 @@ module Network.Google.Compute.Metadata
4040 , getMetadata
4141 ) where
4242
43+import Control.Exception (throwIO)
4344import Control.Monad.Catch
4445import Control.Monad.IO.Class (MonadIO (..))
4546import Data.Aeson (eitherDecode')
4647import Data.ByteString (ByteString)
4748import qualified Data.ByteString.Lazy as LBS
4849import Data.Char (toLower)
49−import Data.Default.Class (def)
5050import qualified Data.Text.Encoding as Text
5151import qualified Data.Text.Lazy as LText
5252import qualified Data.Text.Lazy.Encoding as LText
5353import Network.Google.Prelude (Text, (<>))
54−import Network.HTTP.Conduit (HttpException (..), Manager)
55−import qualified Network.HTTP.Conduit as Client
54+import Network.HTTP.Client (HttpException (..),
55+ HttpExceptionContent (..), Manager)
56+import qualified Network.HTTP.Client as Client
5657import Network.HTTP.Types (HeaderName)
5758import System.Environment (lookupEnv)
5859
@@ -91,7 +92,7 @@ isGCE m = liftIO $ do
9192 failure = const (pure False)
9293
9394 rq = metadataRequest
94− { Client.responseTimeout = Just 1000000
95+ { Client.responseTimeout = Client.responseTimeoutMicro 1000000
9596 }
9697
9798-- | A directory of custom metadata values that have been set for this project.
@@ -223,20 +224,24 @@ getMetadata :: MonadIO m
223224 -> [Int] -- ^ Acceptable status code responses.
224225 -> Manager
225226 -> m (Client.Response LBS.ByteString)
226−getMetadata path ss m =
227− liftIO . flip Client.httpLbs m $ metadataRequest
228− { Client.path = "/computeMetadata/v1/" <> path
229− , Client.checkStatus = \s hs cj ->
230− let c = fromEnum s
231− in if 200 <= c && c < 300 && notElem c ss
232− then Nothing
233− else Just . toException $ StatusCodeException s hs cj
234− }
227+getMetadata path statuses m =
228+ liftIO . flip Client.httpLbs m $
229+ metadataRequest
230+ { Client.path = "/computeMetadata/v1/" <> path
231+ , Client.checkResponse = \rq rs ->
232+ let c = fromEnum (Client.responseStatus rs)
233+ in if 200 <= c && c < 300 && notElem c statuses
234+ then return ()
235+ else do
236+ bs <- Client.brReadSome (Client.responseBody rs) 4096
237+ throwIO . HttpExceptionRequest rq $
238+ StatusCodeException (() <$ rs) (LBS.toStrict bs)
239+ }
235240
236241-- | A default @http-client@ 'Client.Request' with the host, port, and headers
237242-- set appropriately for @metadata.google.internal@ use.
238243metadataRequest :: Client.Request
239−metadataRequest = def
244+metadataRequest = Client.defaultRequest
240245 { Client.host = "metadata.google.internal"
241246 , Client.port = 80
242247 , Client.secure = False
gogol/src/Network/Google/Internal/Auth.hs+1−3
@@ -32,7 +32,6 @@ import Data.ByteArray.Encoding
3232import Data.ByteString (ByteString)
3333import Data.ByteString.Builder ()
3434import qualified Data.ByteString.Lazy as LBS
35−import Data.Default.Class (def)
3635import Data.String (IsString)
3736import qualified Data.Text as Text
3837import qualified Data.Text.Encoding as Text
@@ -250,11 +249,10 @@ accountsURL :: Text
250249accountsURL = "https://accounts.google.com/o/oauth2/v2/auth"
251250
252251accountsRequest :: Client.Request
253−accountsRequest = def
252+accountsRequest = Client.defaultRequest
254253 { Client.host = "accounts.google.com"
255254 , Client.port = 443
256255 , Client.secure = True
257− , Client.checkStatus = \_ _ _ -> Nothing
258256 , Client.method = "POST"
259257 , Client.path = "/o/oauth2/v2/auth"
260258 , Client.requestHeaders =
gogol/src/Network/Google/Internal/HTTP.hs+5−4
@@ -22,7 +22,6 @@ import Control.Monad.Trans.Resource (MonadResource (..))
2222import qualified Data.ByteString.Lazy as LBS
2323import Data.Conduit (($$+-))
2424import qualified Data.Conduit.List as Conduit
25−import Data.Default.Class (Default (..))
2625import Data.Monoid (Dual (..), Endo (..), (<>))
2726import qualified Data.Text.Encoding as Text
2827import qualified Data.Text.Lazy as LText
@@ -81,11 +80,10 @@ perform Env{..} x = catches go handlers
8180 , _serializeBody = Just bs
8281 }
8382
84− request ct b = def
83+ request ct b = Client.defaultRequest
8584 { Client.host = _svcHost
8685 , Client.port = _svcPort
8786 , Client.secure = _svcSecure
88− , Client.checkStatus = \_ _ _ -> Nothing
8987 , Client.responseTimeout = timeout
9088 , Client.method = _cliMethod
9189 , Client.path = path
@@ -113,7 +111,10 @@ perform Env{..} x = catches go handlers
113111 , _serviceBody = Just b
114112 }
115113
116− timeout = microseconds <$> _svcTimeout
114+ timeout =
115+ maybe Client.responseTimeoutNone
116+ (Client.responseTimeoutMicro . microseconds)
117+ _svcTimeout
117118
118119 handlers =
119120 [ Handler $ err
gogol/src/Network/Google/Internal/Logger.hs+1−2
@@ -43,7 +43,6 @@ import Data.CaseInsensitive (CI)
4343import qualified Data.CaseInsensitive as CI
4444import Data.Int (Int16, Int8)
4545import Data.List (intersperse)
46−import qualified Data.Text as Text
4746import qualified Data.Text.Encoding as Text
4847import qualified Data.Text.Lazy as LText
4948import qualified Data.Text.Lazy.Encoding as LText
@@ -171,7 +170,7 @@ instance ToLog Request where
171170 , " host = " <> build (host x) <> ":" <> build (port x)
172171 , " secure = " <> build (secure x)
173172 , " method = " <> build (method x)
174− , " timeout = " <> build (responseTimeout x)
173+ , " timeout = " <> build (show (responseTimeout x))
175174 , " redirects = " <> build (redirectCount x)
176175 , " path = " <> build (path x)
177176 , " query = " <> build (queryString x)
gogol/src/Network/Google/Internal/Multipart.hs−1
@@ -14,7 +14,6 @@ import Control.Monad.IO.Class (MonadIO (..))
1414import Data.ByteString (ByteString)
1515import qualified Data.ByteString as BS
1616import Data.ByteString.Builder.Extra (byteStringCopy)
17−import qualified Data.CaseInsensitive as CI
1817import Data.Monoid ((<>))
1918import Network.Google.Types (Body (..))
2019import Network.HTTP.Client
script/travis-matrix+1−1
@@ -43,7 +43,7 @@ ghc_710=( 7.10.3 )
4343ghc_801=( 8.0.1 )
4444ghc_all=( 8.0.1 7.10.3 )
4545
46−matrix "Documentation" ghc_710[@] docs[@]
46+matrix "Documentation" ghc_801[@] docs[@]
4747matrix "Core" ghc_all[@] core[@]
4848matrix "Priority" ghc_801[@] priority[@]
4949matrix "Remainder" ghc_801[@] library[@]
stack-7.10.3.yaml+5−2
@@ -1,7 +1,10 @@
11compiler: ghc-7.10.3
2−resolver: lts-6.2
2+resolver: lts-6.9
33flags: {}
4−extra-deps: []
4+extra-deps:
5+ - http-conduit-2.2.0
6+ - http-client-0.5.0.1
7+ - http-client-tls-0.3.0
58packages:
69 - core
710 - gogol
stack-8.0.1.yaml+2−1
@@ -1,11 +1,12 @@
11compiler: ghc-8.0.1
2−resolver: nightly-2016-06-20
2+resolver: nightly-2016-09-18
33flags: {}
44extra-deps: []
55packages:
66 - core
77 - gogol
88 - examples
9+
910 - gogol-adexchange-buyer
1011 - gogol-adexchange-seller
1112 - gogol-admin-datatransfer