Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mslib/mswms/dataaccess.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ def is_reload_required(self, filenames):
pass

@abstractmethod
def _determine_filename(self, variable, vartype, init_time, valid_time):
def _determine_filename(self, variable, vartype, init_time, valid_time, reload=True):
"""
Must be overwritten in subclass. Determines the filename
(without path) of the variable <variable> at the forecast
Expand Down
37 changes: 37 additions & 0 deletions tests/_test_mswms/test_dataaccess.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from datetime import datetime

import mock
import pytest

from mslib.mswms.dataaccess import DefaultDataAccess, CachedDataAccess
from tests.constants import DATA_DIR
Expand Down Expand Up @@ -90,6 +91,42 @@ def test_get_all_valid_times(self):
datetime(2012, 10, 18, 12, 0),
datetime(2012, 10, 19, 0, 0)])

def test_determine_filename_reload(self):
variable = "air_pressure"
vartype = "ml"
init_time = datetime(2012, 10, 17, 12, 0)
valid_time = datetime(2012, 10, 17, 18, 0)

# call with reload=False, expect an error
self.dut._filetree = {}
with pytest.raises(ValueError):
self.dut._determine_filename(variable, vartype, init_time, valid_time, reload=False)

# with reload=True test data being loaded
filename = self.dut._determine_filename(variable, vartype, init_time, valid_time, reload=True)
file_path = os.path.join(DATA_DIR, filename)
assert os.path.exists(file_path), f"Expected file {file_path} to exist"

# remove a file, with reload =False, it is still returned
backup_path = file_path + ".bak"
os.rename(file_path, backup_path)
old_filename = self.dut._determine_filename(variable, vartype, init_time, valid_time, reload=False)
assert old_filename == filename

# with reload=True, removed file not returned
with pytest.raises(ValueError):
self.dut._determine_filename(variable, vartype, init_time, valid_time, reload=True)

# add file, with reload=False file is not returned
os.rename(backup_path, file_path)

updated_filename = self.dut._determine_filename(variable, vartype, init_time, valid_time, reload=False)
assert updated_filename == filename

# with reload=True, added file is returned
restored_filename = self.dut._determine_filename(variable, vartype, init_time, valid_time, reload=True)
assert restored_filename == filename


class Test_CachedDataAccess(Test_DefaultDataAccess):
"""
Expand Down
Loading