Source code for grid_process.config.library_settings
# Copyright (c) 2026 MeteoSwiss, contributors listed in AUTHORS
#
# Distributed under the terms of the BSD 3-Clause License.
#
# SPDX-License-Identifier: BSD-3-Clause
import os
from typing import Annotated
from pydantic import BaseModel, Field
from pydantic_settings import (
BaseSettings,
PydanticBaseSettingsSource,
SettingsConfigDict,
YamlConfigSettingsSource,
)
DataModelOptions = Annotated[list[str], Field(..., min_length=1)]
[docs]
class CacheSizeSettings(BaseModel):
nn_lookup: int
nn_lookup_regular: int
reproject_poi: int
reproject_grid: int
[docs]
class GridSettings(BaseModel):
unstructured_dim: DataModelOptions
y: DataModelOptions
x: DataModelOptions
surf_alt: DataModelOptions
[docs]
class PoiSettings(BaseModel):
dim: str
coord_from: str
alt_from: DataModelOptions
[docs]
class DataModelSettings(BaseModel):
grid: GridSettings
poi: PoiSettings
validtime: DataModelOptions
leadtime: DataModelOptions
reftime: DataModelOptions
ens_dim: DataModelOptions
[docs]
class LibrarySettings(BaseSettings):
model_config = SettingsConfigDict(
yaml_file=os.path.join(os.path.dirname(__file__), "grid_process.yaml"),
env_prefix="GRID_PROCESS__",
env_nested_delimiter="__",
)
cache_size: CacheSizeSettings
data_model: DataModelSettings
[docs]
@classmethod
def settings_customise_sources(
cls,
settings_cls: type[BaseSettings],
init_settings: PydanticBaseSettingsSource,
env_settings: PydanticBaseSettingsSource,
dotenv_settings: PydanticBaseSettingsSource,
file_secret_settings: PydanticBaseSettingsSource,
) -> tuple[PydanticBaseSettingsSource, ...]:
return (env_settings, YamlConfigSettingsSource(settings_cls))