http-download-0.2.1.0: Verified downloads with retries

Safe Haskell | None
Language | Haskell2010

Network.HTTP.Download.Verified

Contents

- DownloadRequest construction

Synopsis

- verifiedDownload :: HasTerm env => DownloadRequest -> Path Abs File -> (Maybe Integer -> ConduitM ByteString Void (RIO env) ()) -> RIO env Bool
- recoveringHttp :: HasTerm env => RetryPolicy -> RIO env a -> RIO env a
- drRetryPolicyDefault :: RetryPolicy
- data HashCheck = (Show a, HashAlgorithm a) => HashCheck {
  - hashCheckAlgorithm :: a
  - hashCheckHexDigest :: CheckHexDigest
  }
- data CheckHexDigest
  - = CheckHexDigestString String
  - | CheckHexDigestByteString ByteString
  - | CheckHexDigestHeader ByteString
- type LengthCheck = Int
- data VerifiedDownloadException
  - = WrongContentLength Request Int ByteString
  - | WrongStreamLength Request Int Int
  - | WrongDigest Request String CheckHexDigest String
  - | DownloadHttpError HttpException
- data DownloadRequest
- mkDownloadRequest :: Request -> DownloadRequest
- modifyRequest :: (Request -> Request) -> DownloadRequest -> DownloadRequest
- setHashChecks :: [HashCheck] -> DownloadRequest -> DownloadRequest
- setLengthCheck :: Maybe LengthCheck -> DownloadRequest -> DownloadRequest
- setRetryPolicy :: RetryPolicy -> DownloadRequest -> DownloadRequest
- setForceDownload :: Bool -> DownloadRequest -> DownloadRequest

# Documentation

verifiedDownload Source #

Arguments

:: HasTerm env |
=> DownloadRequest |
-> Path Abs File | destination
-> (Maybe Integer -> ConduitM ByteString Void (RIO env) ()) | custom hook to observe progress
-> RIO env Bool | Whether a download was performed

Copied and extended version of Network.HTTP.Download.download.

Has the following additional features: * Verifies that response content-length header (if present) matches expected length * Limits the download to (close to) the expected # of bytes * Verifies that the expected # bytes were downloaded (not too few) * Verifies md5 if response includes content-md5 header * Verifies the expected hashes

Throws VerifiedDownloadException. Throws IOExceptions related to file system operations. Throws HttpException.

recoveringHttp :: HasTerm env => RetryPolicy -> RIO env a -> RIO env a Source #

drRetryPolicyDefault :: RetryPolicy Source #

Default to retrying seven times with exponential backoff starting from one hundred milliseconds.

This means the tries will occur after these delays if necessary:

- 0.1s
- 0.2s
- 0.4s
- 0.8s
- 1.6s
- 3.2s
- 6.4s

data HashCheck Source #

Constructors

(Show a, HashAlgorithm a) => HashCheck |

Fields

- hashCheckAlgorithm :: a
- hashCheckHexDigest :: CheckHexDigest

#### Instances

Instances details

Show HashCheck Source # |
Instance details Defined in Network.HTTP.Download.Verified Methods showsPrec :: Int -> HashCheck -> ShowS Source # show :: HashCheck -> String Source # showList :: [HashCheck] -> ShowS Source #

data CheckHexDigest Source #

Constructors

CheckHexDigestString String |
CheckHexDigestByteString ByteString |
CheckHexDigestHeader ByteString |

#### Instances

Instances details

IsString CheckHexDigest Source # |
Instance details Defined in Network.HTTP.Download.Verified Methods fromString :: String -> CheckHexDigest Source #
Show CheckHexDigest Source # |
Instance details Defined in Network.HTTP.Download.Verified Methods showsPrec :: Int -> CheckHexDigest -> ShowS Source # show :: CheckHexDigest -> String Source # showList :: [CheckHexDigest] -> ShowS Source #

type LengthCheck = Int Source #

data VerifiedDownloadException Source #

An exception regarding verification of a download.

Constructors

WrongContentLength Request Int ByteString |
WrongStreamLength Request Int Int |
WrongDigest Request String CheckHexDigest String |
DownloadHttpError HttpException |

#### Instances

Instances details

Exception VerifiedDownloadException Source # |
Instance details Defined in Network.HTTP.Download.Verified Methods toException :: VerifiedDownloadException -> SomeException Source # fromException :: SomeException -> Maybe VerifiedDownloadException Source # displayException :: VerifiedDownloadException -> String Source # backtraceDesired :: VerifiedDownloadException -> Bool Source #
Show VerifiedDownloadException Source # |
Instance details Defined in Network.HTTP.Download.Verified Methods showsPrec :: Int -> VerifiedDownloadException -> ShowS Source # show :: VerifiedDownloadException -> String Source # showList :: [VerifiedDownloadException] -> ShowS Source #

# DownloadRequest construction

data DownloadRequest Source #

A request together with some checks to perform.

Construct using the `downloadRequest` smart constructor and associated setters. The constructor itself is not exposed to avoid breaking changes with additional fields.

Since: 0.2.0.0

mkDownloadRequest :: Request -> DownloadRequest Source #

Construct a new `DownloadRequest` from the given `Request`. Use associated setters to modify the value further.

Since: 0.2.0.0

modifyRequest :: (Request -> Request) -> DownloadRequest -> DownloadRequest Source #

Modify the `Request` inside a `DownloadRequest`. Especially intended for modifying the `User-Agent` request header.

Since: 0.2.0.0

setHashChecks :: [HashCheck] -> DownloadRequest -> DownloadRequest Source #

Set the hash checks to be run when verifying.

Since: 0.2.0.0

setLengthCheck :: Maybe LengthCheck -> DownloadRequest -> DownloadRequest Source #

Set the length check to be run when verifying.

Since: 0.2.0.0

setRetryPolicy :: RetryPolicy -> DownloadRequest -> DownloadRequest Source #

Set the retry policy to be used when downloading.

Since: 0.2.0.0

setForceDownload :: Bool -> DownloadRequest -> DownloadRequest Source #

If `True`, force download even if the file already exists. Useful for download a resource which may change over time.