Source code for pycif.plugins.datastreams.fields.grib2_ecmwf.fetch
import os
import pandas as pd
from .....utils import path
from .utils import find_valid_file
[docs]
def fetch(ref_dir, ref_file, input_interval, target_dir, tracer=None, **kwargs):
list_period_dates = pd.date_range(
input_interval[0], input_interval[1], freq=tracer.file_freq
)
time_freq = pd.to_timedelta(tracer.file_freq).to_pytimedelta()
cumul_freq = pd.to_timedelta(f"{tracer.cumul_length}h").to_pytimedelta()
list_dates = {}
list_files = {}
for dd in list_period_dates:
dir_dd = dd.strftime(ref_dir)
dir_dd_next = (dd + cumul_freq).strftime(ref_dir)
dir_dd_previous = (dd - cumul_freq).strftime(ref_dir)
files_3d, dates_3d = find_valid_file(
ref_file,
dd,
time_freq,
dir_dd,
dir_dd_next,
dir_dd_previous,
cumul_length=tracer.cumul_length,
cumul_variable=getattr(tracer, "decumul", False),
delta_tolerance=tracer.delta_tolerance,
)
if os.path.isfile(files_3d[0]):
if not tracer.decumul or tracer.valid_interval == "left":
list_dates[dd] = [[dd, dd + time_freq]]
if list_files:
list_files[dd] = [files_3d]
else:
list_files[dd] = [files_3d]
else:
list_dates[dd] = [[dd - time_freq / 2, dd + time_freq / 2]]
list_files[dd] = [[files_3d[0]]]
# Fetching
# Renaming target files according to date in case
# the file to fetch is a forecast
local_files = []
target_file = "{}/{}".format(target_dir, dd.strftime(ref_file))
path.link(files_3d[0], target_file)
local_files.append(target_file)
return list_files, list_dates