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