Source code for pycif.plugins.datastreams.fields.iconart_icbc.fetch
import os
import numpy as np
import pandas as pd
import datetime as dt
from .....utils import path
[docs]
def fetch(
ref_dir, ref_file, input_interval, target_dir,
tracer=None, component=None
):
freq_subperiods = tracer.model.periods \
if getattr(tracer.model, "periods", False) \
else '10D'
orig_name = getattr(component, "orig_name", "")
# Three cases: inicond, restart_inicond or LBC
if orig_name in ["inicond", "restart_inicond"]:
datei = input_interval[0]
filei = datei.strftime("{}/{}".format(ref_dir, ref_file))
list_files = {datei: [filei]}
list_dates = {datei: [[datei, datei]]}
# Fetching
target_file = "{}/{}".format(target_dir, os.path.basename(filei))
path.link(filei, target_file)
elif orig_name in ["lbc", "background"]:
list_period_dates = \
pd.date_range(input_interval[0], input_interval[1],
freq=freq_subperiods)
list_dates = {}
list_files = {}
for di, df in zip(list_period_dates[:-1], list_period_dates[1:]):
list_hours = pd.date_range(
di, df + pd.Timedelta(tracer.file_freq), freq=tracer.file_freq)
list_dates[di] = []
list_files[di] = []
for hi, hf in zip(list_hours[:-1], list_hours[1:]):
list_dates[di].append([hi, hf])
file = hi.strftime("{}/{}".format(ref_dir, ref_file))
if os.path.isfile(file):
list_files[di].append(file)
# Fetching
target_file = "{}/{}".format(target_dir, os.path.basename(file))
path.link(file, target_file)
else:
raise FileNotFoundError(
"Could not find the requested lbc file.")
else:
raise Exception(
"Could not recognize the type of file "
"to fetch in ICONART: {}".format(orig_name)
)
return list_files, list_dates