Source code for dubfi.meta
# Copyright 2025 DWD
# SPDX-License-Identifier: BSD-3-Clause
"""Common metadata for netCDF output.
.. codeauthor:: Valentin Bruch, DWD <valentin.bruch@dwd.de>
.. versionadded:: 0.1.0 (initial release)
"""
import functools
import os
import sys
from datetime import datetime, timezone
from importlib.metadata import PackageNotFoundError, metadata
from . import __version__, log
[docs]
@functools.cache
def package_info() -> dict[str, str]:
"""Get package information including versions of dependencies."""
info = dict(pkg_version_dubfi=__version__, python_version=sys.version)
for pkg in (
"numpy",
"scipy",
"pandas",
"xarray",
"netCDF4",
"mpi4py",
"PyYAML",
"numba",
"llvmlite",
):
try:
info[f"pkg_version_{pkg:s}"] = metadata(pkg)["version"]
except PackageNotFoundError:
log.warning(f"Package not found: {pkg}")
info[f"pkg_version_{pkg:s}"] = "unknown"
return info
[docs]
def common_info() -> dict[str, str]:
"""Return common metadata that can be saved to netCDF output."""
info = package_info()
user = os.environ.get("USER", "unknown")
host = os.environ.get("HOST", os.environ.get("HOSTNAME", "unknown"))
info.update(
creating_software="dubfi",
creating_user=f"{user:s}@{host:s}",
creation_date=datetime.now(timezone.utc).isoformat(),
)
return info