Source code for nv_ingest_api.internal.schemas.mixins

# SPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES.
# All rights reserved.
# SPDX-License-Identifier: Apache-2.0

"""
Shared mixins for Pydantic schemas.
"""

from typing import Any
from pydantic import BaseModel, field_validator


[docs] class LowercaseProtocolMixin(BaseModel): """ Mixin that automatically lowercases any field ending with '_infer_protocol'. This ensures case-insensitive handling of protocol values (e.g., "HTTP" -> "http"). Apply this mixin to any schema that has protocol fields to normalize user input. Examples -------- >>> class MyConfigSchema(LowercaseProtocolMixin): ... yolox_infer_protocol: str = "" ... ocr_infer_protocol: str = "" >>> >>> config = MyConfigSchema(yolox_infer_protocol="GRPC", ocr_infer_protocol="HTTP") >>> config.yolox_infer_protocol 'grpc' >>> config.ocr_infer_protocol 'http' """ @field_validator("*", mode="before") @classmethod def _lowercase_protocol_fields(cls, v: Any, info): """Lowercase any field ending with '_infer_protocol'.""" if info.field_name.endswith("_infer_protocol") and v is not None: return str(v).strip().lower() return v