def test_locator_file_names_supports_datetime_types(time): path = "file.nc" variable = "variable" database = db.Database.connect(":memory:") database.insert_file_name(path, "2020-01-01 00:00:00") database.insert_time(path, variable, "2020-01-01 00:00:00", 0) locator = db.Locator(database.connection) result = locator.file_names(path, variable, time, time) expect = [path] assert expect == result
def test_image_given_non_existent_entry_in_database(self): name = None pattern = None database = db.Database.connect(":memory:") locator = db.Locator(database.connection) state = db.State(variable="variable", initial_time="2019-01-01 00:00:00", valid_time="2019-01-01 00:00:00", pressure=1000.) loader = data.DBLoader(name, pattern, locator) result = loader.image(state) expect = self.empty_image self.assert_dict_equal(expect, result)
def __init__(self, label=None, pattern=None, locator="file_system", directory=None, database_path=None, **kwargs): self.label = label self.pattern = pattern self.use_database = locator == "database" if self.use_database: self.database = db.get_database(database_path) self.locator = db.Locator(self.database.connection, directory=directory) else: self.locator = Locator.pattern(self.pattern)
def test_image_given_inconsistent_pressures(self): path = "file.nc" variable = "variable" initial_time = "2019-01-01 00:00:00" valid_time = "2019-01-01 00:00:00" pressure = 1000. database = db.Database.connect(":memory:") database.insert_file_name(path, initial_time) database.insert_pressure(path, variable, pressure, i=0) database.insert_time(path, variable, valid_time, i=0) locator = db.Locator(database.connection) state = db.State(variable=variable, initial_time=initial_time, valid_time=valid_time, pressure=pressure, pressures=[925.]) loader = data.DBLoader(None, "*.nc", locator) result = loader.image(state) expect = self.empty_image self.assert_dict_equal(expect, result)
def from_database(cls, connection, file_type, label, pattern, replacement_dir=None): """Builds a loader powered by a SQL database .. note:: ``replacement_dir`` can be used to modify names in ``file`` table :param connection: sqlite3.connection to a database :param file_type: keyword to specify particular loader :param label: keyword to link app state to loader :param replacement_dir: directory to substitute in ``file`` table """ locator = db.Locator(connection, directory=replacement_dir) return cls.file_loader(file_type, pattern, label=label, locator=locator)
def setUp(self): self.connection = sqlite3.connect(":memory:") self.database = db.Database(self.connection) self.locator = db.Locator(self.connection)