Skip to content

Commit

Permalink
feat: Add pydantic based config model
Browse files Browse the repository at this point in the history
  • Loading branch information
fregataa committed Aug 14, 2024
1 parent f518f4a commit b44daa9
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/ai/backend/common/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,13 @@
from pathlib import Path
from typing import Any, Dict, Mapping, MutableMapping, Optional, Tuple, Union, cast

import humps
import tomli
import trafaret as t
from pydantic import (
BaseModel,
ConfigDict,
)

from . import validators as tx
from .etcd import AsyncEtcd, ConfigScopes
Expand All @@ -29,6 +34,23 @@
"merge",
)


class BaseSchema(BaseModel):
model_config = ConfigDict(populate_by_name=True, from_attributes=True, extra="allow")


# TODO: Use pydantic alias_generators after v2.8
# ref: https://docs.pydantic.dev/2.8/api/config/#pydantic.alias_generators.to_snake
def config_key_to_snake_case(o: Any) -> Any:
match o:
case dict():
return {humps.dekebabize(k): config_key_to_snake_case(v) for k, v in o.items()}
case list():
return [config_key_to_snake_case(i) for i in o]
case _:
return o


etcd_config_iv = t.Dict({
t.Key("etcd"): t.Dict({
t.Key("namespace"): t.String,
Expand Down

0 comments on commit b44daa9

Please sign in to comment.