packages feed

wai-extra 3.1.16 → 3.1.17

raw patch · 9 files changed

+122/−54 lines, 9 files

Files

ChangeLog.md view
@@ -1,5 +1,13 @@ # Changelog for wai-extra +## 3.1.17++* Started deprecation of `data-default` [#1011](https://github.com/yesodweb/wai/pull/1011)+  * All `Default` instances have comments that these will be removed in a future major version.+  * `def` exported from `Network.Wai.Middleware.Gzip` now has a deprecation warning+  * All uses of `def` have been replaced with explicit `default{TYPE_NAME}` values.+* Some additional documentation+ ## 3.1.16  * Substituted `data-default-class` for `data-default` [#1010](https://github.com/yesodweb/wai/pull/1010)
Network/Wai/Middleware/Gzip.hs view
@@ -51,7 +51,7 @@ import qualified Data.ByteString.Char8 as S8 import Data.ByteString.Lazy.Internal (defaultChunkSize) import Data.Char (isAsciiLower, isAsciiUpper, isDigit)-import Data.Default (Default (..))+import qualified Data.Default as Default (Default (..)) import Data.Function (fix) import Data.Maybe (isJust) import qualified Data.Set as Set@@ -119,12 +119,12 @@  -- $settings ----- If you would like to use the default settings, using just 'def' is enough.+-- If you would like to use the default settings, use 'defaultGzipSettings'. -- The default settings don't compress file responses, only builder and stream -- responses, and only if the response passes the MIME and length checks. (cf. -- 'defaultCheckMime' and 'gzipSizeThreshold') ----- To customize your own settings, use the 'def' method and set the+-- To customize your own settings, use 'defaultGzipSettings' and set the -- fields you would like to change as follows: -- -- @@@ -196,14 +196,22 @@  -- $miscellaneous ----- 'def' is re-exported for convenience sake, and 'defaultCheckMime'--- is exported in case anyone wants to use it in defining their own--- 'gzipCheckMime' function.+-- 'defaultCheckMime' is exported in case anyone wants to use it in+-- defining their own 'gzipCheckMime' function.+-- 'def' has been re-exported for convenience sake, but its use is now+-- heavily discouraged. Please use the explicit 'defaultGzipSettings'. --- | Use default MIME settings; /do not/ compress files; skip--- compression on data smaller than 860 bytes.-instance Default GzipSettings where+-- | DO NOT USE THIS INSTANCE!+-- Please use 'defaultGzipSettings'.+--+-- This instance will be removed in a future major version.+instance Default.Default GzipSettings where     def = defaultGzipSettings++-- | Deprecated synonym for the 'defaultGzipSettings'.+def :: GzipSettings+def = defaultGzipSettings+{-# Deprecated def "Please use 'defaultGzipSettings'. 'def' and the Default instance will be removed in a future major update." #-}  -- | Default settings for the 'gzip' middleware. --
Network/Wai/Middleware/RequestLogger.hs view
@@ -11,11 +11,14 @@      -- * Create more versions     mkRequestLogger,+    -- ** Settings type     RequestLoggerSettings,     defaultRequestLoggerSettings,+    -- *** Settings fields     outputFormat,     autoFlush,     destination,+    -- ** More settings     OutputFormat (..),     ApacheSettings,     defaultApacheSettings,@@ -23,6 +26,7 @@     setApacheRequestFilter,     setApacheUserGetter,     DetailedSettings (..),+    defaultDetailedSettings,     OutputFormatter,     OutputFormatterWithDetails,     OutputFormatterWithDetailsAndHeaders,@@ -77,6 +81,8 @@  )  -- | The logging format.+--+-- @since 1.3.0 data OutputFormat     = Apache IPAddrSource     | -- | @since 3.1.8@@ -159,15 +165,28 @@     -- ^ @since 3.1.7     } +-- | DO NOT USE THIS INSTANCE!+-- Please use 'defaultDetailedSettings'+--+-- This instance will be removed in a future major version. instance Default DetailedSettings where-    def =-        DetailedSettings-            { useColors = True-            , mModifyParams = Nothing-            , mFilterRequests = Nothing-            , mPrelogRequests = False-            }+    def = defaultDetailedSettings +-- | Default 'DetailedSettings'+--+-- Uses colors, but doesn't modify nor filter anything.+-- Also doesn't prelog requests.+--+-- @since 3.1.16+defaultDetailedSettings :: DetailedSettings+defaultDetailedSettings =+    DetailedSettings+        { useColors = True+        , mModifyParams = Nothing+        , mFilterRequests = Nothing+        , mPrelogRequests = False+        }+ type OutputFormatter = ZonedDate -> Request -> Status -> Maybe Integer -> LogStr  type OutputFormatterWithDetails =@@ -206,29 +225,52 @@     -- ^ The response headers     -> LogStr +-- | Where to send the logs to.+--+-- @since 1.3.0 data Destination     = Handle Handle     | Logger LoggerSet     | Callback Callback ++-- | When using a callback as a destination.+--+-- @since 1.3.0 type Callback = LogStr -> IO () --- | @RequestLoggerSettings@ is an instance of Default. See <https://hackage.haskell.org/package/data-default Data.Default> for more information.+-- | Settings for the request logger. --+-- Sets what which format,+-- -- @outputFormat@, @autoFlush@, and @destination@ are record fields -- for the record type @RequestLoggerSettings@, so they can be used to -- modify settings values using record syntax.+--+-- @since 1.3.0 data RequestLoggerSettings = RequestLoggerSettings     { outputFormat :: OutputFormat-    -- ^ Default value: @Detailed@ @True@.+    -- ^ Default value: @Detailed True@.+    --+    -- @since 1.3.0     , autoFlush :: Bool-    -- ^ Only applies when using the @Handle@ constructor for @destination@.+    -- ^ Only applies when using the 'Handle' constructor for 'destination'.     --     -- Default value: @True@.+    --+    -- @since 1.3.0     , destination :: Destination-    -- ^ Default: @Handle@ @stdout@.+    -- ^ Default: @Handle stdout@.+    --+    -- @since 1.3.0     } +-- | Default 'RequestLoggerSettings'.+--+-- Use this to create 'RequestLoggerSettings', and use the+-- accompanying fields to edit these settings.+--+-- @since 3.1.8 defaultRequestLoggerSettings :: RequestLoggerSettings defaultRequestLoggerSettings =     RequestLoggerSettings@@ -237,9 +279,16 @@         , destination = Handle stdout         } +-- | DO NOT USE THIS INSTANCE!+-- Please use 'defaultRequestLoggerSettings' instead.+--+-- This instance will be removed in a future major release. instance Default RequestLoggerSettings where     def = defaultRequestLoggerSettings +-- | Create the 'Middleware' using the given 'RequestLoggerSettings'+--+-- @since 1.3.0 mkRequestLogger :: RequestLoggerSettings -> IO Middleware mkRequestLogger RequestLoggerSettings{..} = do     let (callback, flusher) =@@ -263,7 +312,7 @@                     getdate             return $ apacheMiddleware apacheRequestFilter apache         Detailed useColors ->-            let settings = def{useColors = useColors}+            let settings = defaultDetailedSettings{useColors = useColors}              in detailedMiddleware callbackAndFlush settings         DetailedWithSettings settings ->             detailedMiddleware callbackAndFlush settings@@ -339,14 +388,16 @@ -- the socket (see 'IPAddrSource' for more information). It logs to 'stdout'. {-# NOINLINE logStdout #-} logStdout :: Middleware-logStdout = unsafePerformIO $ mkRequestLogger def{outputFormat = Apache FromSocket}+logStdout =+    unsafePerformIO $+        mkRequestLogger defaultRequestLoggerSettings{outputFormat = Apache FromSocket}  -- | Development request logger middleware. -- -- This uses the 'Detailed' 'True' logging format and logs to 'stdout'. {-# NOINLINE logStdoutDev #-} logStdoutDev :: Middleware-logStdoutDev = unsafePerformIO $ mkRequestLogger def+logStdoutDev = unsafePerformIO $ mkRequestLogger defaultRequestLoggerSettings  -- | Prints a message using the given callback function for each request. -- This is not for serious production use- it is inefficient.
example/Main.hs view
@@ -16,7 +16,7 @@  ) import Network.Wai.Handler.Warp (run) import Network.Wai.Middleware.AddHeaders (addHeaders)-import Network.Wai.Middleware.Gzip (def, gzip)+import Network.Wai.Middleware.Gzip (defaultGzipSettings, gzip)  app :: Chan ServerEvent -> Application app chan req respond =@@ -67,7 +67,7 @@ main = do     chan <- newChan     _ <- forkIO . eventChan $ chan-    run 8080 (gzip def $ headers $ app chan)+    run 8080 (gzip defaultGzipSettings $ headers $ app chan)   where     -- headers required for SSE to work through nginx     -- not required if using warp directly
test/Network/Wai/ParseSpec.hs view
@@ -138,40 +138,40 @@      it "exceeding number of files" $ do         SRequest req4 _bod4 <- toRequest'' ctype3 content3-        (parseRequestBodyEx (setMaxRequestNumFiles 0 def) lbsBackEnd req4)+        parseRequestBodyEx (setMaxRequestNumFiles 0 def) lbsBackEnd req4             `shouldThrow` anyException      it "exceeding parameter length" $ do         SRequest req4 _bod4 <- toRequest'' ctype3 content3-        (parseRequestBodyEx (setMaxRequestKeyLength 2 def) lbsBackEnd req4)+        parseRequestBodyEx (setMaxRequestKeyLength 2 def) lbsBackEnd req4             `shouldThrow` anyException      it "exceeding file size" $ do         SRequest req4 _bod4 <- toRequest'' ctype3 content3-        (parseRequestBodyEx (setMaxRequestFileSize 2 def) lbsBackEnd req4)+        parseRequestBodyEx (setMaxRequestFileSize 2 def) lbsBackEnd req4             `shouldThrow` (== PayloadTooLarge)      it "exceeding total file size" $ do         SRequest req4 _bod4 <- toRequest'' ctype3 content3-        (parseRequestBodyEx (setMaxRequestFilesSize 20 def) lbsBackEnd req4)+        parseRequestBodyEx (setMaxRequestFilesSize 20 def) lbsBackEnd req4             `shouldThrow` (== PayloadTooLarge)         SRequest req5 _bod5 <- toRequest'' ctype3 content5-        (parseRequestBodyEx (setMaxRequestFilesSize 20 def) lbsBackEnd req5)+        parseRequestBodyEx (setMaxRequestFilesSize 20 def) lbsBackEnd req5             `shouldThrow` (== PayloadTooLarge)      it "exceeding max parm value size" $ do         SRequest req4 _bod4 <- toRequest'' ctype2 content2-        (parseRequestBodyEx (setMaxRequestParmsSize 10 def) lbsBackEnd req4)+        parseRequestBodyEx (setMaxRequestParmsSize 10 def) lbsBackEnd req4             `shouldThrow` (== PayloadTooLarge)      it "exceeding max header lines" $ do         SRequest req4 _bod4 <- toRequest'' ctype2 content2-        (parseRequestBodyEx (setMaxHeaderLines 1 def) lbsBackEnd req4)+        parseRequestBodyEx (setMaxHeaderLines 1 def) lbsBackEnd req4             `shouldThrow` anyException      it "exceeding header line size" $ do         SRequest req4 _bod4 <- toRequest'' ctype3 content4-        (parseRequestBodyEx (setMaxHeaderLineLength 8190 def) lbsBackEnd req4)+        parseRequestBodyEx (setMaxHeaderLineLength 8190 def) lbsBackEnd req4             `shouldThrow` (== RequestHeaderFieldsTooLarge)      it "Testing parseRequestBodyEx with application/x-www-form-urlencoded" $ do@@ -195,7 +195,7 @@                 "thisisalongparameterkey=andthisbeanevenlongerparametervaluehelloworldhowareyou"         let ctype = "application/x-www-form-urlencoded"         SRequest req _bod <- toRequest'' ctype content-        (parseRequestBodyEx (setMaxRequestParmsSize 10 def) lbsBackEnd req)+        parseRequestBodyEx (setMaxRequestParmsSize 10 def) lbsBackEnd req             `shouldThrow` anyException   where     content2 =
test/Network/Wai/TestSpec.hs view
@@ -108,7 +108,7 @@                                     ( "Set-Cookie"                                     , toByteString $                                         Cookie.renderSetCookie $-                                            Cookie.def+                                            Cookie.defaultSetCookie                                                 { Cookie.setCookieName = TE.encodeUtf8 name                                                 , Cookie.setCookieValue = TE.encodeUtf8 val                                                 }@@ -123,7 +123,7 @@                                     ( "Set-Cookie"                                     , toByteString $                                         Cookie.renderSetCookie $-                                            Cookie.def+                                            Cookie.defaultSetCookie                                                 { Cookie.setCookieName =                                                     TE.encodeUtf8 name                                                 , Cookie.setCookieExpires =@@ -200,7 +200,7 @@         it "sends a cookie set with setClientCookie to server" $ do             sresp <- flip runSession cookieApp $ do                 setClientCookie-                    ( Cookie.def+                    ( Cookie.defaultSetCookie                         { Cookie.setCookieName = "cookie_name"                         , Cookie.setCookieValue = "cookie_value"                         }@@ -212,13 +212,13 @@         it "sends a cookie updated with setClientCookie to server" $ do             sresp <- flip runSession cookieApp $ do                 setClientCookie-                    ( Cookie.def+                    ( Cookie.defaultSetCookie                         { Cookie.setCookieName = "cookie_name"                         , Cookie.setCookieValue = "cookie_value"                         }                     )                 setClientCookie-                    ( Cookie.def+                    ( Cookie.defaultSetCookie                         { Cookie.setCookieName = "cookie_name"                         , Cookie.setCookieValue = "cookie_value2"                         }@@ -230,7 +230,7 @@         it "does not send a cookie deleted with deleteClientCookie to server" $ do             sresp <- flip runSession cookieApp $ do                 setClientCookie-                    ( Cookie.def+                    ( Cookie.defaultSetCookie                         { Cookie.setCookieName = "cookie_name"                         , Cookie.setCookieValue = "cookie_value"                         }
test/WaiExtraSpec.hs view
@@ -44,7 +44,7 @@ import Network.Wai.Middleware.Gzip (     GzipFiles (..),     GzipSettings (..),-    def,+    defaultGzipSettings,     defaultCheckMime,     gzip,  )@@ -197,7 +197,7 @@  gzipApp' :: (Response -> Response) -> Application gzipApp' changeRes =-    gzip def $ \_ f ->+    gzip defaultGzipSettings $ \_ f ->         f . changeRes $             responseLBS                 status200@@ -325,19 +325,19 @@ caseGzipFiles :: Assertion caseGzipFiles = do     -- Default GzipSettings ignore compressing files-    withSession (gzipFileApp def) $ do+    withSession (gzipFileApp defaultGzipSettings) $ do         _ <- doesNotEncodeGzipJSON [acceptGzip]         _ <- doesNotEncodeGzipJSON []         pure ()      -- Just compresses the file-    withSession (gzipFileApp def{gzipFiles = GzipCompress}) $ do+    withSession (gzipFileApp defaultGzipSettings{gzipFiles = GzipCompress}) $ do         _ <- doesEncodeGzipJSON [acceptGzip]         _ <- doesNotEncodeGzipJSON []         pure ()      -- Checks for a "filename.gz" file in the same folder-    withSession (gzipFileApp def{gzipFiles = GzipPreCompressed GzipIgnore}) $ do+    withSession (gzipFileApp defaultGzipSettings{gzipFiles = GzipPreCompressed GzipIgnore}) $ do         sres <-             request                 defaultRequest@@ -354,7 +354,8 @@ #endif             sres -        doesNotEncodeGzipJSON [] >> pure ()+        _ <- doesNotEncodeGzipJSON []+        pure ()      -- If no "filename.gz" file is in the same folder, just ignore     withSession (noPreCompressApp $ GzipPreCompressed GzipIgnore) $ do@@ -375,7 +376,7 @@                 assertBool s $ length fs == n         checkTempDir 0 "temp directory should be empty"         -- Respond with "test/json" file-        withSession (gzipFileApp def{gzipFiles = GzipCacheFolder path}) $ do+        withSession (gzipFileApp defaultGzipSettings{gzipFiles = GzipCacheFolder path}) $ do             _ <- doesEncodeGzipJSON [acceptGzip]             liftIO $ checkTempDir 1 "should have one file"             _ <- doesEncodeGzipJSON [acceptGzip]@@ -393,13 +394,13 @@             liftIO $ checkTempDir 2 "again should not have done anything"          -- try "test/json" again, just to make sure it isn't a weird Session bug-        withSession (gzipFileApp def{gzipFiles = GzipCacheFolder path}) $ do+        withSession (gzipFileApp defaultGzipSettings{gzipFiles = GzipCacheFolder path}) $ do             _ <- doesEncodeGzipJSON [acceptGzip]             liftIO $ checkTempDir 2 "just to make sure it isn't a fluke"   where     noPreCompressApp set =         gzipFileApp'-            def{gzipFiles = set}+            defaultGzipSettings{gzipFiles = set}             $ const             $ responseFile                 status200@@ -620,7 +621,7 @@         iactual <- I.newIORef mempty         middleware <-             mkRequestLogger-                def+                defaultRequestLoggerSettings                     { destination = Callback $ \strs -> I.modifyIORef iactual (`mappend` strs)                     , outputFormat = Detailed False                     }@@ -755,7 +756,7 @@         iactual <- I.newIORef mempty         middleware <-             mkRequestLogger-                def+                defaultRequestLoggerSettings                     { destination = Callback $ \strs -> I.modifyIORef iactual (`mappend` strs)                     , outputFormat = format                     }@@ -795,7 +796,7 @@         iactual <- I.newIORef mempty         middleware <-             mkRequestLogger-                def+                defaultRequestLoggerSettings                     { destination = Callback $ \strs -> I.modifyIORef iactual (`mappend` strs)                     , outputFormat = format                     }
test/sample.hs view
@@ -30,4 +30,4 @@     _ -> ResponseFile status404 [] "../LICENSE" Nothing  main :: IO ()-main = run 3000 $ gzip def $ jsonp app+main = run 3000 $ gzip defaultGzipSettings $ jsonp app
wai-extra.cabal view
@@ -1,5 +1,5 @@ Name:                wai-extra-Version:             3.1.16+Version:             3.1.17 Synopsis:            Provides some basic WAI handlers and middleware. description:   Provides basic WAI handler and middleware functionality: