<commit_before>{-
Copyright 2016 SlamData, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-}

module SlamData.Workspace.Card.DownloadOptions.Eval where

import SlamData.Prelude
import Control.Monad.Throw (class MonadThrow)
import Data.Lens ((^.))
import SlamData.Download.Model as D
import SlamData.Workspace.Card.DownloadOptions.Component.State as Download
import SlamData.Workspace.Card.Eval.Monad as CEM
import SlamData.Workspace.Card.Port as Port

eval ∷ ∀ m. MonadThrow CEM.CardError m => Download.State → Port.Resource → m Port.Port
eval { compress, options, targetName } resource = case targetName of
  Nothing → required
  Just "" → required
  Just fn → do
    when (isLeft (D.validFilename fn)) do
      CEM.throw $ "Invalid target filename: " <> fn
    pure $ Port.DownloadOptions
      { compress
      , options
      , targetName: fn
      , resource: resource ^. Port._filePath
      }

  where
    required = CEM.throw "Target filename required"
<commit_msg>Fix download name for old workspaces (#1415)<commit_after>{-
Copyright 2016 SlamData, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-}

module SlamData.Workspace.Card.DownloadOptions.Eval where

import SlamData.Prelude
import Control.Monad.Throw (class MonadThrow)
import Data.Lens ((^.))
import Data.Path.Pathy (runFileName, fileName)
import SlamData.Download.Model as D
import SlamData.Workspace.Card.DownloadOptions.Component.State as Download
import SlamData.Workspace.Card.Eval.Monad as CEM
import SlamData.Workspace.Card.Port as Port

eval ∷ ∀ m. MonadThrow CEM.CardError m => Download.State → Port.Resource → m Port.Port
eval { compress, options, targetName } resource = case targetName of
  Nothing →
    -- For legacy download options. Otherwise this shouldn't be Nothing.
    pure $ Port.DownloadOptions
      { compress
      , options
      , targetName: runFileName (fileName (resource ^. Port._filePath))
      , resource: resource ^. Port._filePath
      }
  Just "" → required
  Just fn → do
    when (isLeft (D.validFilename fn)) do
      CEM.throw $ "Invalid target filename: " <> fn
    pure $ Port.DownloadOptions
      { compress
      , options
      , targetName: fn
      , resource: resource ^. Port._filePath
      }

  where
    required = CEM.throw "Target filename required"

{'fraction_non_alphanumeric': 0.07891491985203453, 'fraction_numerical': 0.006165228113440197, 'mean_word_length': 3.7097242380261246, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 15, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4259701', 'n_tokens_mistral': 924, 'n_tokens_neox': 893, 'n_words': 362}