packages feed

freckle-app 1.0.2.2 → 1.0.2.3

raw patch · 24 files changed

+206/−97 lines, 24 filesdep +containersdep +hashabledep +safedep ~base

Dependencies added: containers, hashable, safe, semigroupoids, vector

Dependency ranges changed: base

Files

CHANGELOG.md view
@@ -1,6 +1,10 @@-## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.0.2.2...main)+## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.0.2.3...main)  - None.++## [v1.0.2.3](https://github.com/freckle/freckle-app/compare/v1.0.2.2...v1.0.2.3)++- Add Freckle-specific prelude.  ## [v1.0.2.2](https://github.com/freckle/freckle-app/compare/v1.0.2.1...v1.0.2.2) 
freckle-app.cabal view
@@ -1,6 +1,6 @@ cabal-version:      1.12 name:               freckle-app-version:            1.0.2.2+version:            1.0.2.3 license:            MIT license-file:       LICENSE maintainer:         Freckle Education@@ -38,6 +38,7 @@         Freckle.App.Http.Paginate         Freckle.App.Http.Retry         Freckle.App.Logging+        Freckle.App.Prelude         Freckle.App.RIO         Freckle.App.Test         Freckle.App.Test.DocTest@@ -69,6 +70,7 @@         bytestring >=0.10.12.0,         case-insensitive >=1.2.1.0,         conduit >=1.3.4.2,+        containers >=0.6.5.1,         data-default >=0.7.1.1,         datadog >=0.2.5.0,         doctest >=0.17,@@ -77,6 +79,7 @@         exceptions >=0.10.4,         fast-logger >=3.0.5,         filepath >=1.4.2.1,+        hashable >=1.3.0.0,         hspec >=2.9.3,         hspec-core >=2.9.3,         hspec-expectations-lifted >=0.10.0,@@ -102,6 +105,8 @@         resource-pool >=0.2.3.2,         retry >=0.8.1.2,         rio >=0.1.21.0,+        safe >=0.3.19,+        semigroupoids >=5.3.6,         template-haskell >=2.16.0.0,         text >=1.2.4.1,         time >=1.9.3,@@ -110,6 +115,7 @@         unliftio >=0.2.20,         unliftio-core >=0.2.0.1,         unordered-containers >=0.2.15.0,+        vector >=0.12.3.1,         wai >=3.2.3,         wai-extra >=3.1.7,         yaml >=0.11.7.0,
library/Freckle/App/Database.hs view
@@ -22,11 +22,10 @@   , envPostgresPasswordSource   ) where -import Prelude+import Freckle.App.Prelude  import Control.Concurrent import qualified Control.Immortal as Immortal-import Control.Monad.IO.Unlift (MonadUnliftIO) import Control.Monad.Logger (runNoLoggingT) import Control.Monad.Reader import Data.ByteString (ByteString)@@ -35,12 +34,12 @@ import Data.IORef import Data.Pool import qualified Data.Text as T-import Data.Time (UTCTime, getCurrentTime) import Database.Persist.Postgresql import Database.PostgreSQL.Simple   (Connection, Only(..), connectPostgreSQL, execute) import Database.PostgreSQL.Simple.SqlQQ (sql) import qualified Freckle.App.Env as Env+import qualified Prelude as Unsafe (read) import System.Process (readProcess)  type SqlPool = Pool SqlBackend@@ -117,9 +116,10 @@   :: String -> Either String PostgresStatementTimeout readPostgresStatementTimeout x = case span isDigit x of   ("", _) -> Left "must be {digits}(s|ms)"-  (digits, "") -> Right $ PostgresStatementTimeoutSeconds $ read digits-  (digits, "s") -> Right $ PostgresStatementTimeoutSeconds $ read digits-  (digits, "ms") -> Right $ PostgresStatementTimeoutMilliseconds $ read digits+  (digits, "") -> Right $ PostgresStatementTimeoutSeconds $ Unsafe.read digits+  (digits, "s") -> Right $ PostgresStatementTimeoutSeconds $ Unsafe.read digits+  (digits, "ms") ->+    Right $ PostgresStatementTimeoutMilliseconds $ Unsafe.read digits   _ -> Left "must be {digits}(s|ms)"  envPostgresPasswordSource :: Env.Parser PostgresPasswordSource
library/Freckle/App/Datadog.hs view
@@ -32,14 +32,11 @@   , guage   ) where -import Prelude+import Freckle.App.Prelude  import Control.Lens (set)-import Control.Monad.IO.Unlift (MonadUnliftIO) import Control.Monad.Reader-import Data.Foldable (for_)-import Data.Text (Text)-import Data.Time (NominalDiffTime, UTCTime, diffUTCTime, getCurrentTime)+import Data.Time (diffUTCTime) import qualified Freckle.App.Env as Env import Network.StatsD.Datadog hiding (metric, name, tags) import qualified Network.StatsD.Datadog as Datadog
library/Freckle/App/Datadog/Gauge.hs view
@@ -8,12 +8,8 @@   , subtract   ) where -import Prelude hiding (subtract)+import Freckle.App.Prelude hiding (subtract) -import Control.Monad.IO.Unlift (MonadUnliftIO)-import Control.Monad.Reader-import Data.Int (Int64)-import Data.Text (Text) import Freckle.App.Datadog (HasDogStatsClient, HasDogStatsTags, gauge) import qualified System.Metrics.Gauge as EKG 
library/Freckle/App/Datadog/Rts.hs view
@@ -3,15 +3,10 @@   ( forkRtsStatPolling   ) where -import Prelude+import Freckle.App.Prelude  import qualified Control.Immortal as Immortal-import Control.Monad (void)-import Control.Monad.IO.Unlift (MonadUnliftIO, liftIO)-import Control.Monad.Reader (MonadReader)-import Data.Foldable (traverse_) import qualified Data.HashMap.Strict as HashMap-import Data.Text (Text) import Freckle.App.Datadog (HasDogStatsClient, HasDogStatsTags) import qualified Freckle.App.Datadog as Datadog import qualified System.Metrics as Ekg
library/Freckle/App/Env.hs view
@@ -43,15 +43,13 @@   -- * Modifiers   , def   , nonEmpty-  )-where+  ) where -import Prelude+import Freckle.App.Prelude  import Control.Error.Util (note)-import Data.Bifunctor (first, second) import Data.String-import Data.Text (Text, pack, unpack)+import Data.Text (pack, unpack) import qualified Data.Text as T import Data.Time import Freckle.App.Env.Internal
library/Freckle/App/Env/Internal.hs view
@@ -9,13 +9,11 @@   , Mod(..)   , Var(..)   , varParser-  )-where+  ) where -import Prelude+import Freckle.App.Prelude  import Control.Applicative-import Data.Bifunctor (first)  -- | Environment parsing errors data Error
library/Freckle/App/Ghci.hs view
@@ -3,12 +3,10 @@   , runDB'   , loadEnv   , loadEnvTest-  )-where+  ) where -import Prelude+import Freckle.App.Prelude -import Control.Monad.Reader (ReaderT) import Database.Persist.Postgresql (runSqlPool) import Database.Persist.Sql (SqlBackend) import Freckle.App.Database (makePostgresPool)
library/Freckle/App/GlobalCache.hs view
@@ -48,13 +48,11 @@   , newGlobalCache   , globallyCache   , withGlobalCacheCleanup-  )-where+  ) where -import Prelude+import Freckle.App.Prelude  import Control.Concurrent.MVar (mkWeakMVar, modifyMVar_, newMVar)-import Control.Monad (void) import Data.IORef  newtype GlobalCache a = GlobalCache
library/Freckle/App/Http.hs view
@@ -117,17 +117,14 @@   , statusIsServerError   ) where -import Prelude+import Freckle.App.Prelude  import Conduit (foldC, mapMC, runConduit, (.|))-import Control.Monad.IO.Class (MonadIO) import Data.Aeson (FromJSON) import qualified Data.Aeson as Aeson-import Data.Bifunctor (first) import qualified Data.ByteString as BS import Data.ByteString.Lazy (ByteString) import qualified Data.ByteString.Lazy.Char8 as BSL8-import Data.List.NonEmpty (NonEmpty(..)) import qualified Data.List.NonEmpty as NE import Freckle.App.Http.Paginate import Freckle.App.Http.Retry@@ -159,7 +156,7 @@       <> fromErrors hdeErrors    where     fromErrors = \case-      err :| [] -> ["Error:", err]+      err NE.:| [] -> ["Error:", err]       errs -> "Errors:" : map bullet (NE.toList errs)     bullet = (" • " <>) 
library/Freckle/App/Http/Paginate.hs view
@@ -57,13 +57,10 @@   , sourcePaginatedBy   ) where -import Prelude+import Freckle.App.Prelude  import Conduit import Control.Error.Util (hush)-import Data.Foldable (traverse_)-import Data.List (find)-import Data.Maybe (listToMaybe) import Data.Text.Encoding (decodeUtf8) import Network.HTTP.Link.Compat hiding (linkHeader) import Network.HTTP.Simple
library/Freckle/App/Http/Retry.hs view
@@ -4,13 +4,10 @@   , rateLimited'   ) where -import Prelude+import Freckle.App.Prelude -import Control.Monad (guard, unless, void)-import Control.Monad.IO.Class (MonadIO) import Control.Retry import qualified Data.ByteString.Char8 as BS8-import Data.Maybe (listToMaybe) import Network.HTTP.Client (Request(..)) import Network.HTTP.Simple import Network.HTTP.Types.Status (status429)
library/Freckle/App/Logging.hs view
@@ -23,10 +23,9 @@   , formatJsonNoLoc   , formatJson   , formatTerminal-  )-where+  ) where -import Prelude+import Freckle.App.Prelude  import Control.Monad.Logger import Data.Aeson (ToJSON, encode, object, (.=))@@ -34,7 +33,6 @@ import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BS8 import qualified Data.ByteString.Lazy as BSL-import Data.Text (Text) import Data.Text.Encoding (decodeUtf8) import qualified Freckle.App.Env as Env import System.Console.ANSI
+ library/Freckle/App/Prelude.hs view
@@ -0,0 +1,147 @@+-- | Those functions and types we can't do without!+module Freckle.App.Prelude+  (+  -- * 'Prelude' as the starting point, without common partial functions+    module Prelude++  -- * Commonly imported types+  , Alternative+  , Exception+  , Generic+  , HashMap+  , HashSet+  , Hashable+  , Int64+  , Map+  , MonadIO+  , MonadReader+  , MonadUnliftIO+  , NominalDiffTime+  , NonEmpty+  , PrimMonad+  , ReaderT+  , Set+  , Text+  , UTCTime+  , Vector++  -- * Commonly used functions++  -- ** Lifts+  , lift+  , liftIO++  -- ** 'Text'+  , tshow++  -- ** 'Maybe'+  , catMaybes+  , fromMaybe+  , isJust+  , isNothing+  , listToMaybe+  , mapMaybe+  , maybeToList++  -- ** Safe alternatives to partial prelude functions (e.g. 'headMay')+  , module SafeAlternatives++  -- ** 'Either'+  , partitionEithers++  -- ** 'Foldable'+  , module Foldable++  -- ** 'Traversable'+  , module Traversable++  -- ** 'Functor'+  , (<$$>)++  -- ** 'Bifunctor'+  , bimap+  , first+  , second++  -- ** 'Applicative'+  , (<|>)+  , liftA2+  , optional++  -- ** 'Monad'+  , (<=<)+  , (>=>)+  , guard+  , join+  , unless+  , void+  , when++  -- ** 'Arrow'+  , (&&&)+  , (***)++  -- ** 'UTCTime'+  , getCurrentTime+  ) where++-- Use 'Prelude' as the starting point, removing common partial functions++import Prelude hiding+  (cycle, foldl1, foldr1, head, init, last, maximum, minimum, read, tail, (!!))++-- Commonly used types (and their commonly used functions)++import Control.Applicative (Alternative, liftA2, optional, (<|>))+import Control.Monad.IO.Class (MonadIO, liftIO)+import Control.Monad.Primitive (PrimMonad)+import Control.Monad.Reader (MonadReader, ReaderT)+import Data.HashMap.Strict (HashMap)+import Data.HashSet (HashSet)+import Data.Hashable (Hashable)+import Data.Int (Int64)+import Data.List.NonEmpty (NonEmpty)+import Data.Map.Strict (Map)+import Data.Set (Set)+import Data.Text (Text)+import Data.Time (NominalDiffTime, UTCTime, getCurrentTime)+import Data.Vector (Vector)+import GHC.Generics (Generic)+import UnliftIO (MonadUnliftIO)+import UnliftIO.Exception (Exception)++-- Safe alternatives to prelude functions++import Data.Semigroup.Foldable as SafeAlternatives (fold1, foldMap1)+import Safe as SafeAlternatives+  ( atMay+  , cycleMay+  , headMay+  , initMay+  , lastMay+  , maximumMay+  , minimumMay+  , readMay+  , tailMay+  )++-- Commonly used functions++import Control.Arrow ((&&&), (***))+import Control.Monad (guard, join, unless, void, when, (<=<), (>=>))+import Control.Monad.Trans (lift)+import Data.Bifunctor (bimap, first, second)+import Data.Either (partitionEithers)+import Data.Foldable as Foldable hiding (foldl1, foldr1)+import Data.Maybe+  (catMaybes, fromMaybe, isJust, isNothing, listToMaybe, mapMaybe, maybeToList)+import qualified Data.Text as T+import Data.Traversable as Traversable++infixl 4 <$$>+(<$$>) :: (Functor c, Functor d) => (a -> b) -> c (d a) -> c (d b)+f <$$> as = (f <$>) <$> as++-- | 'Show' as 'Text'+tshow :: Show a => a -> Text+tshow = T.pack . show
library/Freckle/App/RIO.hs view
@@ -11,14 +11,11 @@   ( toAppLogLevel   , fromAppLogLevel   , makeLogFunc-  )-where+  ) where -import Prelude+import Freckle.App.Prelude -import Control.Monad (when) import Control.Monad.Logger (Loc(..), LogLevel(..))-import Data.Maybe (fromMaybe, listToMaybe) import Freckle.App.Logging import GHC.Exception (CallStack, SrcLoc(..), getCallStack) import qualified RIO
library/Freckle/App/Test.hs view
@@ -11,11 +11,10 @@   , module X   ) where -import Prelude+import Freckle.App.Prelude  import Control.Monad.Base import Control.Monad.Catch-import Control.Monad.IO.Unlift import Control.Monad.Logger import Control.Monad.Primitive import Control.Monad.Random (MonadRandom(..))
library/Freckle/App/Test/DocTest.hs view
@@ -7,14 +7,12 @@   -- * Lower-level, for site-specific use   , findPackageFlags   , findDocTestedFiles-  )-where+  ) where -import Prelude+import Freckle.App.Prelude  import Control.Monad (filterM) import Data.Aeson-import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.IO as T import Data.Yaml (decodeFileThrow)@@ -33,8 +31,7 @@   DocTest.doctest $ packageFlags <> flags <> sourceFiles  -- | Representation of only the information we need in a @package.yaml@-data PackageYaml-  = PackageYaml+data PackageYaml = PackageYaml   { defaultExtensions :: [String]   , name :: String   }
library/Freckle/App/Test/Hspec/Runner.hs view
@@ -5,15 +5,13 @@   , makeParallelConfig   ) where -import Prelude+import Freckle.App.Prelude -import Control.Applicative ((<|>)) import Control.Concurrent (getNumCapabilities, setNumCapabilities)-import Control.Monad (void) import Control.Monad.Trans.Maybe (MaybeT(MaybeT), runMaybeT) import Data.List (isInfixOf)-import Data.Maybe (fromMaybe, isJust) import Data.Text (pack)+import qualified Prelude as Unsafe (read) import System.Environment (getArgs, lookupEnv) import Test.Hspec (Spec) import Test.Hspec.JUnit@@ -86,7 +84,7 @@   pure config { configConcurrentJobs = Just $ jobCores * 4 }  lookupTestCapabilities :: IO (Maybe Int)-lookupTestCapabilities = fmap read <$> lookupEnv "TEST_CAPABILITIES"+lookupTestCapabilities = fmap Unsafe.read <$> lookupEnv "TEST_CAPABILITIES"  lookupHostCapabilities :: IO (Maybe Int) lookupHostCapabilities = Just . reduceCapabilities <$> getNumCapabilities
library/Freckle/App/Version.hs view
@@ -8,22 +8,16 @@   ( AppVersion(..)   , getAppVersion   , tryGetAppVersion-  )-where+  ) where -import Prelude+import Freckle.App.Prelude -import Control.Applicative ((<|>)) import Control.Error.Util (hoistEither, note)-import Control.Monad.IO.Class (MonadIO(..))-import Control.Monad.IO.Unlift (MonadUnliftIO) import Control.Monad.Trans.Except-import Data.Bifunctor (first) import Data.Char (isSpace) import Data.List (dropWhileEnd)-import Data.Text (Text, pack)+import Data.Text (pack) import qualified Data.Text as T-import Data.Time (UTCTime, getCurrentTime) import Data.Time.Format (defaultTimeLocale, parseTimeM) import System.Exit (ExitCode(..)) import System.FilePath ((</>))
library/Freckle/App/Wai.hs view
@@ -11,14 +11,11 @@   , denyFrameEmbeddingMiddleware   ) where -import Prelude+import Freckle.App.Prelude -import Control.Applicative ((<|>))-import Control.Monad (guard) import Control.Monad.Logger (LogLevel(..)) import Control.Monad.Reader (runReaderT) import Data.Aeson-import Data.Bifunctor (first) import Data.ByteString (ByteString) import qualified Data.ByteString as BS import Data.ByteString.Builder (toLazyByteString)@@ -27,11 +24,9 @@ import qualified Data.CaseInsensitive as CI import Data.Default (def) import Data.IP (fromHostAddress, fromHostAddress6)-import Data.Maybe (fromMaybe, maybeToList)-import Data.Text (Text, pack)+import Data.Text (pack) import Data.Text.Encoding (decodeUtf8With) import Data.Text.Encoding.Error (lenientDecode)-import Data.Time (getCurrentTime) import Freckle.App.Datadog (HasDogStatsClient, HasDogStatsTags) import qualified Freckle.App.Datadog as Datadog import Freckle.App.Logging
library/Freckle/App/Yesod.hs view
@@ -8,9 +8,8 @@   , respondQueryCanceledHeaders   ) where -import Prelude+import Freckle.App.Prelude -import Control.Monad (guard, when) import Control.Monad.Logger import Data.Text (pack) import Database.PostgreSQL.Simple (SqlError(..))
library/Freckle/App/Yesod/Routes.hs view
@@ -2,9 +2,8 @@   ( mkRouteNameCaseExp   ) where -import Prelude+import Freckle.App.Prelude -import Data.Foldable (fold) import qualified Language.Haskell.TH as TH import Yesod.Routes.TH.Types 
package.yaml view
@@ -1,6 +1,6 @@ --- name: freckle-app-version: 1.0.2.2+version: 1.0.2.3 maintainer: Freckle Education category: Utils github: freckle/freckle-app@@ -57,6 +57,7 @@     - bytestring     - case-insensitive     - conduit+    - containers     - data-default     - datadog     - doctest@@ -65,6 +66,7 @@     - exceptions     - fast-logger     - filepath+    - hashable     - hspec     - hspec-core     - hspec-expectations-lifted@@ -90,6 +92,8 @@     - resource-pool     - retry     - rio+    - safe+    - semigroupoids     - template-haskell     - text     - time@@ -98,6 +102,7 @@     - unliftio     - unliftio-core     - unordered-containers+    - vector     - wai     - wai-extra     - yaml