Source code for pycif.plugins.datastreams.fields.lmdz_inicond_ico.fetch

from __future__ import annotations

import datetime
import os
from os import PathLike
from pathlib import Path

import numpy as np
import pandas as pd

from .....utils import path
from .....utils.check.errclass import CifFileNotFoundError


[docs] def fetch( ref_dir: str, ref_file: str, input_interval: tuple[datetime.datetime, datetime.datetime], target_dir: str, **kwargs, ) -> tuple[ dict[datetime.datetime, list[str]], dict[datetime.datetime, list[tuple[datetime.datetime, datetime.datetime]]], ]: """Link the single LMDz DYNAMICO inicond file for the simulation start date. Args: ref_dir (str): Path to the data. If both ``ref_dir`` and ``ref_file`` are falsy, nothing is fetched. ref_file (str): File name format of the data. input_interval (list[datetime.datetime]): Date range; only the start date is used. target_dir (str): Where to link the data. **kwargs: Unused. Returns: (list_files, list_dates): tuple of single-entry dictionaries keyed by the simulation start date, describing the linked file and the (single-point) date interval it covers. Raises: CifFileNotFoundError: If the original inicond file does not exist. """ if not ref_dir and not ref_file: return {}, {} date = input_interval[0] input_file = Path(ref_dir, date.strftime(ref_file)) if not input_file.is_file(): raise CifFileNotFoundError(f"file '{input_file}' not found") # Fetching target_file = os.path.join(target_dir, os.path.basename(input_file)) target_file = Path(target_dir, input_file.name) path.link(input_file, target_file) list_files = {date: [str(input_file)]} list_dates = {date: [(date, date)]} return list_files, list_dates