on develop help sign in
Updating conduit dependency to 1.3
commit344c9f781560e1ed8395b17e370ba1b085f2edc2 authorBrendan Hay <brendan.g.hay@gmail.com> dateFri 18 May 2018, 12:04 (8 years ago) parent477512e
5 files changed+104−96
core/gogol-core.cabal+1−1 core/src/Network/Google/Types.hs+42−37 gogol/gogol.cabal+3−4 gogol/src/Network/Google.hs+32−32 gogol/src/Network/Google/Internal/HTTP.hs+26−22
core/gogol-core.cabal+1−1
@@ -50,7 +50,7 @@ library
5050 , bifunctors >= 0.1
5151 , bytestring >= 0.9
5252 , case-insensitive >= 1.2
53− , conduit >= 1.1
53+ , conduit >= 1.3
5454 , dlist >= 0.7
5555 , exceptions >= 0.6
5656 , hashable >= 1.2
core/src/Network/Google/Types.hs+42−37
@@ -24,37 +24,41 @@
2424--
2525module Network.Google.Types where
2626
27−import Control.Applicative
28−import Control.Exception.Lens (exception)
29−import Control.Lens
30−import Control.Monad.Catch
31−import Control.Monad.Trans.Resource
32−import Data.Aeson
33−import Data.ByteString (ByteString)
34−import qualified Data.ByteString.Char8 as BS8
35−import qualified Data.ByteString.Lazy as LBS
36−import qualified Data.CaseInsensitive as CI
37−import Data.Coerce
38−import Data.Conduit
39−import qualified Data.Conduit.List as CL
40−import Data.Data
41−import Data.DList (DList)
42−import qualified Data.DList as DList
43−import Data.Foldable (foldMap, foldl')
44−import Data.Monoid
45−import Data.String
46−import Data.Text (Text)
47−import qualified Data.Text.Encoding as Text
48−import Data.Text.Lazy.Builder (Builder)
49−import qualified Data.Text.Lazy.Builder as Build
50−import GHC.Generics
51−import GHC.TypeLits
52−import Network.HTTP.Client (HttpException, RequestBody (..))
53−import Network.HTTP.Media hiding (Accept)
54−import Network.HTTP.Types hiding (Header)
55−import qualified Network.HTTP.Types as HTTP
56−import Servant.API hiding (Stream)
57−import Web.HttpApiData
27+import Control.Applicative
28+import Control.Exception.Lens (exception)
29+import Control.Lens
30+import Control.Monad.Catch
31+import Control.Monad.Trans.Resource
32+
33+import Data.Aeson
34+import Data.ByteString (ByteString)
35+import Data.Coerce
36+import Data.Conduit
37+import Data.Data
38+import Data.DList (DList)
39+import Data.Foldable (foldMap, foldl')
40+import Data.Monoid
41+import Data.String
42+import Data.Text (Text)
43+import Data.Text.Lazy.Builder (Builder)
44+
45+import GHC.Generics
46+import GHC.TypeLits
47+
48+import Network.HTTP.Client (HttpException, RequestBody (..))
49+import Network.HTTP.Media hiding (Accept)
50+import Network.HTTP.Types hiding (Header)
51+
52+import Servant.API hiding (Stream)
53+
54+import qualified Data.ByteString.Char8 as BS8
55+import qualified Data.ByteString.Lazy as LBS
56+import qualified Data.CaseInsensitive as CI
57+import qualified Data.Conduit.Combinators as Conduit
58+import qualified Data.DList as DList
59+import qualified Data.Text.Encoding as Text
60+import qualified Data.Text.Lazy.Builder as Build
61+import qualified Network.HTTP.Types as HTTP
5862
5963data AltJSON = AltJSON deriving (Eq, Ord, Show, Read, Generic, Typeable)
6064data AltMedia = AltMedia deriving (Eq, Ord, Show, Read, Generic, Typeable)
@@ -163,7 +167,8 @@ instance Show Secret where
163167 show = const "*****"
164168
165169newtype MediaDownload a = MediaDownload a
166−data MediaUpload a = MediaUpload a Body
170+
171+data MediaUpload a = MediaUpload a Body
167172
168173_Coerce :: (Coercible a b, Coercible b a) => Iso' a b
169174_Coerce = iso coerce coerce
@@ -176,7 +181,7 @@ _Default = iso f Just
176181 f (Just x) = x
177182 f Nothing = mempty
178183
179−type Stream = ResumableSource (ResourceT IO) ByteString
184+type Stream = ConduitM () ByteString (ResourceT IO) ()
180185
181186data Error
182187 = TransportError HttpException
@@ -358,7 +363,7 @@ discard :: Method
358363 -> Request
359364 -> ServiceConfig
360365 -> Client ()
361−discard = client (\b -> closeResumableSource b >> pure (Right ())) Nothing
366+discard = client (\b -> runConduit (b .| Conduit.sinkNull) >> pure (Right ())) Nothing
362367
363368client :: (Stream -> ResourceT IO (Either (String, LBS.ByteString) a))
364369 -> Maybe MediaType
@@ -367,10 +372,10 @@ client :: (Stream -> ResourceT IO (Either (String, LBS.ByteString) a))
367372 -> Request
368373 -> ServiceConfig
369374 -> Client a
370−client f cs m ns rq s = Client
375+client f cs m statuses rq s = Client
371376 { _cliAccept = cs
372377 , _cliMethod = m
373− , _cliCheck = (`elem` ns) . fromEnum
378+ , _cliCheck = \status -> fromEnum status `elem` statuses
374379 , _cliService = s
375380 , _cliRequest = rq
376381 , _cliResponse = f
@@ -600,7 +605,7 @@ instance {-# OVERLAPPING #-}
600605 buildClient Proxy = discard methodDelete [204]
601606
602607sinkLBS :: Stream -> ResourceT IO LBS.ByteString
603−sinkLBS = fmap LBS.fromChunks . ($$+- CL.consume)
608+sinkLBS = runConduit . (.| Conduit.sinkLazy)
604609
605610buildText :: ToHttpApiData a => a -> Builder
606611buildText = Build.fromText . toQueryParam
gogol/gogol.cabal+3−4
@@ -68,19 +68,18 @@ library
6868 , filepath >= 1.2
6969 , gogol-core == 0.3.0.*
7070 , http-client >= 0.5 && < 1
71− , http-conduit >= 2.2 && < 3
71+ , http-conduit >= 2.3 && < 3
7272 , http-media >= 0.6
7373 , http-types >= 0.8.6
7474 , lens >= 4.4
7575 , memory >= 0.8
7676 , mime-types >= 0.1
77− , monad-control >= 1
7877 , mtl >= 2.1.3.1
7978 , resourcet >= 1.1
8079 , text >= 1.1
8180 , time >= 1.2
8281 , transformers >= 0.2
83− , transformers-base >= 0.4
82+ , unliftio-core >= 0.1
8483 , unordered-containers >= 0.2.5
8584 , x509 >= 1.5
86− , x509-store >= 1.5
85+ , x509-store >= 1.5
gogol/src/Network/Google.hs+32−32
@@ -114,32 +114,33 @@ module Network.Google
114114 , module Network.Google.Types
115115 ) where
116116
117−import Control.Applicative
118−import Control.Exception.Lens
119−import Control.Monad
120−import Control.Monad.Base
121−import Control.Monad.Catch
122−import Control.Monad.Reader
123−import qualified Control.Monad.RWS.Lazy as LRW
124−import qualified Control.Monad.RWS.Strict as RW
125−import qualified Control.Monad.State.Lazy as LS
126−import qualified Control.Monad.State.Strict as S
127−import Control.Monad.Trans.Control
128−import Control.Monad.Trans.Except (ExceptT)
129−import Control.Monad.Trans.Identity (IdentityT)
130−import Control.Monad.Trans.List (ListT)
131−import Control.Monad.Trans.Maybe (MaybeT)
132−import Control.Monad.Trans.Resource
133−import qualified Control.Monad.Writer.Lazy as LW
134−import qualified Control.Monad.Writer.Strict as W
135−import Network.Google.Auth
136−import Network.Google.Env
137−import Network.Google.Internal.Body
138−import Network.Google.Internal.HTTP
139−import Network.Google.Internal.Logger
140−import Network.Google.Prelude
141−import Network.Google.Types
142−import Network.HTTP.Conduit (newManager, tlsManagerSettings)
117+import Control.Applicative
118+import Control.Exception.Lens
119+import Control.Monad
120+import Control.Monad.Catch
121+import Control.Monad.IO.Unlift (MonadUnliftIO (withRunInIO))
122+import Control.Monad.Reader
123+import Control.Monad.Trans.Except (ExceptT)
124+import Control.Monad.Trans.Identity (IdentityT)
125+import Control.Monad.Trans.List (ListT)
126+import Control.Monad.Trans.Maybe (MaybeT)
127+import Control.Monad.Trans.Resource
128+
129+import Network.Google.Auth
130+import Network.Google.Env
131+import Network.Google.Internal.Body
132+import Network.Google.Internal.HTTP
133+import Network.Google.Internal.Logger
134+import Network.Google.Prelude
135+import Network.Google.Types
136+import Network.HTTP.Conduit (newManager, tlsManagerSettings)
137+
138+import qualified Control.Monad.Writer.Lazy as LW
139+import qualified Control.Monad.Writer.Strict as W
140+import qualified Control.Monad.RWS.Lazy as LRW
141+import qualified Control.Monad.RWS.Strict as RW
142+import qualified Control.Monad.State.Lazy as LS
143+import qualified Control.Monad.State.Strict as S
143144
144145-- | The 'Google' monad containing configuration environment and tracks
145146-- resource allocation via 'ResourceT'.
@@ -155,7 +156,6 @@ newtype Google s a = Google { unGoogle :: ReaderT (Env s) (ResourceT IO) a }
155156 , MonadThrow
156157 , MonadCatch
157158 , MonadMask
158− , MonadBase IO
159159 , MonadReader (Env s)
160160 , MonadResource
161161 )
@@ -183,11 +183,11 @@ class ( Functor m
183183instance AllowScopes s => MonadGoogle s (Google s) where
184184 liftGoogle = id
185185
186−instance MonadBaseControl IO (Google s) where
187− type StM (Google s) a = StM (ReaderT (Env s) (ResourceT IO)) a
188−
189− liftBaseWith f = Google $ liftBaseWith $ \g -> f (g . unGoogle)
190− restoreM = Google . restoreM
186+instance MonadUnliftIO (Google s) where
187+ withRunInIO inner =
188+ Google $ withRunInIO $ \run ->
189+ inner (run . unGoogle)
190+ {-# INLINE withRunInIO #-}
191191
192192instance MonadGoogle s m => MonadGoogle s (IdentityT m) where
193193 liftGoogle = lift . liftGoogle
gogol/src/Network/Google/Internal/HTTP.hs+26−22
@@ -15,27 +15,31 @@
1515--
1616module Network.Google.Internal.HTTP where
1717
18−import Control.Lens ((%~), (&))
19−import Control.Monad.Catch
20−import Control.Monad.IO.Class (MonadIO)
21−import Control.Monad.Trans.Resource (MonadResource (..))
22−import qualified Data.ByteString.Lazy as LBS
23−import Data.Conduit (($$+-))
24−import qualified Data.Conduit.List as Conduit
25−import Data.Monoid (Dual (..), Endo (..), (<>))
26−import qualified Data.Text.Encoding as Text
27−import qualified Data.Text.Lazy as LText
28−import qualified Data.Text.Lazy.Builder as Build
29−import GHC.Exts (toList)
30−import Network.Google.Auth (AllowScopes, authorize)
31−import Network.Google.Env (Env (..))
32−import Network.Google.Internal.Logger (logDebug)
33−import Network.Google.Internal.Multipart
34−import Network.Google.Types
35−import qualified Network.HTTP.Client.Conduit as Client
36−import Network.HTTP.Conduit
37−import Network.HTTP.Media (RenderHeader (..))
38−import Network.HTTP.Types
18+import Control.Lens ((%~), (&))
19+import Control.Monad.Catch
20+import Control.Monad.IO.Class (MonadIO)
21+import Control.Monad.Trans.Resource (MonadResource (..))
22+
23+import Data.Conduit (($$+-))
24+import Data.Monoid (Dual (..), Endo (..), (<>))
25+
26+import GHC.Exts (toList)
27+
28+import Network.Google.Auth (AllowScopes, authorize)
29+import Network.Google.Env (Env (..))
30+import Network.Google.Internal.Logger (logDebug)
31+import Network.Google.Internal.Multipart
32+import Network.Google.Types
33+import Network.HTTP.Conduit
34+import Network.HTTP.Media (RenderHeader (..))
35+import Network.HTTP.Types
36+
37+import qualified Data.ByteString.Lazy as LBS
38+import qualified Data.Conduit.List as Conduit
39+import qualified Data.Text.Encoding as Text
40+import qualified Data.Text.Lazy as LText
41+import qualified Data.Text.Lazy.Builder as Build
42+import qualified Network.HTTP.Client.Conduit as Client
3943
4044-- FIXME: "mediaType" param also comes/calculated from the request body?
4145--
@@ -103,7 +107,7 @@ perform Env{..} x = catches go handlers
103107 statusCheck rs
104108 | _cliCheck (responseStatus rs) = pure ()
105109 | otherwise = do
106− b <- LBS.fromChunks <$> (responseBody rs $$+- Conduit.consume)
110+ b <- sinkLBS (responseBody rs)
107111 throwM . toException . ServiceError $ ServiceError'
108112 { _serviceId = _svcId
109113 , _serviceStatus = responseStatus rs