{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE OverloadedStrings #-} module DataRobot.Features where import Lens.Micro ((.~)) import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.Catch (MonadThrow) import Data.Monoid ((<>)) import Data.ByteString (ByteString) import Data.Function ((&)) import Data.String.Conversions (cs) import DataRobot.Types import DataRobot.API (parseResponse, endpoint) import Network.URI (URI(..)) import qualified Network.Wreq as Wreq import Network.Wreq (defaults, header, checkResponse) import Network.Wreq.Types (ResponseChecker) -- GET https://app.datarobot.com/api/v2/projects/5988c39bc808917519a2acbb/models/5988d164c8089128924bd6cf/features features :: (MonadIO m, MonadThrow m) => Credentials -> ProjectID -> ModelID -> m Features features c pid mid = do let opts = httpOptions c url = featuresEndpoint (baseURL c) pid mid r <- liftIO $ Wreq.getWith opts url f <- parseResponse r pure f featuresEndpoint :: URI -> ProjectID -> ModelID -> String featuresEndpoint base (ProjectID pid) (ModelID mid) = endpoint base ["projects", cs pid, "models", cs mid, "features/"] httpOptions :: Credentials -> Wreq.Options httpOptions c = defaults & header "Authorization" .~ [authorization] & header "datarobot-key" .~ [apiKey c] & checkResponse .~ Just ignoreStatus where ignoreStatus :: ResponseChecker ignoreStatus _ _ = pure () authorization :: ByteString authorization = "Token " <> (apiToken c)