@@ -54,7 +54,6 @@ module GitHub.Request (
54
54
ParseResponse (.. ),
55
55
makeHttpRequest ,
56
56
parseStatus ,
57
- parsePageLinks ,
58
57
StatusMap ,
59
58
getNextUrl ,
60
59
performPagedRequest ,
@@ -80,7 +79,6 @@ import Control.Monad.Trans.Class (lift)
80
79
import Control.Monad.Trans.Except (ExceptT (.. ), runExceptT )
81
80
import Data.Aeson (eitherDecode )
82
81
import Data.List (find )
83
- import Data.Maybe (fromMaybe )
84
82
import Data.Tagged (Tagged (.. ))
85
83
import Data.Version (showVersion )
86
84
@@ -89,14 +87,13 @@ import Network.HTTP.Client
89
87
httpLbs , method , newManager , redirectCount , requestBody , requestHeaders ,
90
88
setQueryString , setRequestIgnoreStatus )
91
89
import Network.HTTP.Link.Parser (parseLinkHeaderBS )
92
- import Network.HTTP.Link.Types (Link ( .. ), LinkParam (.. ), href , linkParams )
90
+ import Network.HTTP.Link.Types (LinkParam (.. ), href , linkParams )
93
91
import Network.HTTP.Types (Method , RequestHeaders , Status (.. ))
94
92
import Network.URI
95
93
(URI , escapeURIString , isUnescapedInURIComponent , parseURIReference ,
96
94
relativeTo )
97
95
98
96
import qualified Data.ByteString as BS
99
- import Data.ByteString.Builder (intDec , toLazyByteString )
100
97
import qualified Data.ByteString.Lazy as LBS
101
98
import qualified Data.Text as T
102
99
import qualified Data.Text.Encoding as TE
@@ -202,6 +199,11 @@ executeRequest auth req = withOpenSSL $ do
202
199
manager <- newManager tlsManagerSettings
203
200
executeRequestWithMgr manager auth req
204
201
202
+ lessFetchCount :: Int -> FetchCount -> Bool
203
+ lessFetchCount _ FetchAll = True
204
+ lessFetchCount i (FetchAtLeast j) = i < fromIntegral j
205
+
206
+
205
207
-- | Like 'executeRequest' but with provided 'Manager'.
206
208
executeRequestWithMgr
207
209
:: (AuthMethod am , ParseResponse mt a )
@@ -233,13 +235,10 @@ executeRequestWithMgrAndRes mgr auth req = runExceptT $ do
233
235
res <- httpLbs' httpReq
234
236
(<$ res) <$> unTagged (parseResponse httpReq res :: Tagged mt (ExceptT Error IO b ))
235
237
236
- performHttpReq httpReq (PagedQuery _ _ (FetchPage _)) = do
237
- (res, _pageLinks) <- unTagged (performPerPageRequest httpLbs' httpReq :: Tagged mt (ExceptT Error IO (HTTP. Response b , PageLinks )))
238
- return res
239
- performHttpReq httpReq (PagedQuery _ _ FetchAll ) =
240
- unTagged (performPagedRequest httpLbs' (const True ) httpReq :: Tagged mt (ExceptT Error IO (HTTP. Response b )))
241
- performHttpReq httpReq (PagedQuery _ _ (FetchAtLeast j)) =
242
- unTagged (performPagedRequest httpLbs' (\ v -> length v < fromIntegral j) httpReq :: Tagged mt (ExceptT Error IO (HTTP. Response b )))
238
+ performHttpReq httpReq (PagedQuery _ _ l) =
239
+ unTagged (performPagedRequest httpLbs' predicate httpReq :: Tagged mt (ExceptT Error IO (HTTP. Response b )))
240
+ where
241
+ predicate v = lessFetchCount (length v) l
243
242
244
243
performHttpReq httpReq (Command _ _ _) = do
245
244
res <- httpLbs' httpReq
@@ -457,15 +456,15 @@ makeHttpRequest auth r = case r of
457
456
$ setReqHeaders
458
457
. unTagged (modifyRequest :: Tagged mt (HTTP. Request -> HTTP. Request ))
459
458
. maybe id setAuthRequest auth
460
- . setQueryString (qs <> extraQueryItems)
459
+ . setQueryString qs
461
460
$ req
462
461
PagedQuery paths qs _ -> do
463
462
req <- parseUrl' $ url paths
464
463
return
465
464
$ setReqHeaders
466
465
. unTagged (modifyRequest :: Tagged mt (HTTP. Request -> HTTP. Request ))
467
466
. maybe id setAuthRequest auth
468
- . setQueryString (qs <> extraQueryItems)
467
+ . setQueryString qs
469
468
$ req
470
469
Command m paths body -> do
471
470
req <- parseUrl' $ url paths
@@ -497,14 +496,6 @@ makeHttpRequest auth r = case r of
497
496
setBody :: LBS. ByteString -> HTTP. Request -> HTTP. Request
498
497
setBody body req = req { requestBody = RequestBodyLBS body }
499
498
500
- extraQueryItems :: [(BS. ByteString , Maybe BS. ByteString )]
501
- extraQueryItems = case r of
502
- PagedQuery _ _ (FetchPage pp) -> catMaybes [
503
- (\ page -> (" page" , Just (BS. toStrict $ toLazyByteString $ intDec page))) <$> pageParamsPage pp
504
- , (\ perPage -> (" per_page" , Just (BS. toStrict $ toLazyByteString $ intDec perPage))) <$> pageParamsPerPage pp
505
- ]
506
- _ -> []
507
-
508
499
-- | Query @Link@ header with @rel=next@ from the request headers.
509
500
getNextUrl :: HTTP. Response a -> Maybe URI
510
501
getNextUrl req = do
@@ -551,35 +542,6 @@ performPagedRequest httpLbs' predicate initReq = Tagged $ do
551
542
go (acc <> m) res' req'
552
543
(_, _) -> return (acc <$ res)
553
544
554
- -- | Helper for requesting a single page, as specified by 'PageParams'.
555
- --
556
- -- This parses and returns the 'PageLinks' alongside the HTTP response.
557
- performPerPageRequest
558
- :: forall a m mt . (ParseResponse mt a , MonadCatch m , MonadError Error m )
559
- => (HTTP. Request -> m (HTTP. Response LBS. ByteString )) -- ^ `httpLbs` analogue
560
- -> HTTP. Request -- ^ initial request
561
- -> Tagged mt (m (HTTP. Response a , PageLinks ))
562
- performPerPageRequest httpLbs' initReq = Tagged $ do
563
- res <- httpLbs' initReq
564
- m <- unTagged (parseResponse initReq res :: Tagged mt (m a ))
565
- return (m <$ res, parsePageLinks res)
566
-
567
- -- | Parse the 'PageLinks' from an HTTP response, where the information is
568
- -- encoded in the Link header.
569
- parsePageLinks :: HTTP. Response a -> PageLinks
570
- parsePageLinks res = PageLinks {
571
- pageLinksPrev = linkToUri <$> find (elem (Rel , " prev" ) . linkParams) links
572
- , pageLinksNext = linkToUri <$> find (elem (Rel , " next" ) . linkParams) links
573
- , pageLinksLast = linkToUri <$> find (elem (Rel , " last" ) . linkParams) links
574
- , pageLinksFirst = linkToUri <$> find (elem (Rel , " first" ) . linkParams) links
575
- }
576
- where
577
- links :: [Link URI ]
578
- links = fromMaybe [] (lookup " Link" (responseHeaders res) >>= parseLinkHeaderBS)
579
-
580
- linkToUri :: Link URI -> URI
581
- linkToUri (Link uri _) = uri
582
-
583
545
-------------------------------------------------------------------------------
584
546
-- Internal
585
547
-------------------------------------------------------------------------------
0 commit comments