Source code for pycif.plugins.datastreams.fields.lmdz_prodloss3d.fetch
import os
import numpy as np
import pandas as pd
from .....utils import path
[docs]
def fetch(ref_dir, ref_file, input_interval, target_dir, tracer=None, **kwargs):
# Reshape input interval to include full months
date_i, date_f = input_interval
# Getting file dates
file_dates = pd.date_range(
date_i, date_f, freq=tracer.file_freq, inclusive='left')
if file_dates.empty:
file_dates = pd.to_datetime([date_i])
if file_dates[0] > date_i:
file_dates = pd.to_datetime([date_i] + file_dates.to_list())
# Getting files paths
file_paths = np.array([os.path.join(ref_dir, date.strftime(ref_file))
for date in file_dates])
list_dates = {}
list_files = {}
for date, source_path in zip(file_dates, file_paths):
if not os.path.isfile(source_path):
continue
# Fetching
target_path = os.path.join(target_dir, os.path.basename(source_path))
path.link(source_path, target_path)
# Time stamps
period_start = pd.date_range(
date, periods=date.days_in_month, freq="1D")
period_end = period_start + pd.offsets.Hour(24)
date = date.to_pydatetime()
period_start = period_start.to_pydatetime()
period_end = period_end.to_pydatetime()
list_dates[date] = [[di, df]
for di, df in zip(period_start, period_end)]
list_files[date] = (len(period_start) * [target_path])
return list_files, list_dates