Skip to content

Commit

Permalink
ENH: Raise error if input dataset has no files or more than 2 files
Browse files Browse the repository at this point in the history
  • Loading branch information
cortadocodes committed Dec 9, 2024
1 parent d1f71ac commit 2fe73a7
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
43 changes: 43 additions & 0 deletions tests/test_app.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
import tempfile
import unittest
from unittest.mock import patch

Expand All @@ -15,6 +16,48 @@


class TestApp(unittest.TestCase):
def test_error_raised_if_input_dataset_empty(self):
"""Test that an error is raised if the input dataset is empty."""
with tempfile.TemporaryDirectory() as temporary_directory:
service_configuration, app_configuration = load_service_and_app_configuration(
service_configuration_path=os.path.join(REPOSITORY_ROOT, "octue.yaml")
)

runner = Runner.from_configuration(
service_configuration=service_configuration,
app_configuration=app_configuration,
project_name=os.environ["TEST_PROJECT_NAME"],
service_id="octue/turbsim-service:test",
)

input_manifest = Manifest(datasets={"turbsim": temporary_directory})

with self.assertRaises(ValueError):
runner.run(input_manifest=input_manifest.serialise())

def test_error_raised_if_input_dataset_has_more_than_two_files(self):
"""Test that an error is raised if the input dataset has more than two files."""
with tempfile.TemporaryDirectory() as temporary_directory:
for i in range(3):
with open(os.path.join(temporary_directory, f"file_{i}"), "w") as f:
f.write("Hello")

service_configuration, app_configuration = load_service_and_app_configuration(
service_configuration_path=os.path.join(REPOSITORY_ROOT, "octue.yaml")
)

runner = Runner.from_configuration(
service_configuration=service_configuration,
app_configuration=app_configuration,
project_name=os.environ["TEST_PROJECT_NAME"],
service_id="octue/turbsim-service:test",
)

input_manifest = Manifest(datasets={"turbsim": temporary_directory})

with self.assertRaises(ValueError):
runner.run(input_manifest=input_manifest.serialise())

def test_with_turbsim_input_file_only(self):
"""Test that the app works with a TurbSim input file only and produces an output manifest with a dataset
containing a single `.bts` file.
Expand Down
9 changes: 9 additions & 0 deletions turbsim_service/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,15 @@ def run(analysis):

temporary_directory = RegisteredTemporaryDirectory().name
input_dataset = analysis.input_manifest.datasets["turbsim"]

number_of_files = len(input_dataset.files)

if number_of_files not in {1, 2}:
raise ValueError(
"The input dataset should only contain either 1 or 2 input files - a 'TurbSim.inp' file and, optionally, "
f"a profile or timeseries file; received {number_of_files} files."
)

input_dataset.download(temporary_directory)

input_file = input_dataset.files.filter(name="TurbSim.inp").one()
Expand Down

0 comments on commit 2fe73a7

Please sign in to comment.