From 4e2b087a5c1f2e620ac7cc67247c9b897660b672 Mon Sep 17 00:00:00 2001 From: Daniele Esposti Date: Sun, 3 Mar 2024 20:07:02 +0000 Subject: [PATCH] Upgraded to Pydantic 2.x --- komposer/types/base.py | 9 +++------ komposer/types/cli.py | 11 +++++++---- komposer/types/kubernetes.py | 8 ++++---- komposer/utils.py | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/komposer/types/base.py b/komposer/types/base.py index fe8ce6d..65b8fd4 100644 --- a/komposer/types/base.py +++ b/komposer/types/base.py @@ -1,7 +1,7 @@ from typing import cast import stringcase -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict def to_camel(string: str) -> str: @@ -9,11 +9,8 @@ def to_camel(string: str) -> str: class ImmutableBaseModel(BaseModel): - class Config: - allow_mutation = False + model_config = ConfigDict(frozen=True) class CamelCaseImmutableBaseModel(BaseModel): - class Config: - allow_mutation = False - alias_generator = to_camel + model_config = ConfigDict(frozen=True, alias_generator=to_camel) diff --git a/komposer/types/cli.py b/komposer/types/cli.py index c7c5087..bdc4d81 100644 --- a/komposer/types/cli.py +++ b/komposer/types/cli.py @@ -2,7 +2,7 @@ from pathlib import Path from typing import Any, Optional -from pydantic import validator +from pydantic import field_validator from komposer.types.base import ImmutableBaseModel from komposer.utils import load_yaml @@ -44,20 +44,23 @@ class Context(ImmutableBaseModel): deployment: DeploymentContext ingress: IngressContext - @validator("project_name") + @field_validator("project_name") + @classmethod def project_name_matches_kubernetes_name(cls, value: Optional[str]) -> Optional[str]: if value is not None: ensure_lowercase_kebab(value) return value - @validator("branch_name") + @field_validator("branch_name") + @classmethod def branch_name_matches_kubernetes_name(cls, value: str) -> str: ensure_lowercase_kebab(value) return value - @validator("repository_name") + @field_validator("repository_name") + @classmethod def repository_name_matches_kubernetes_name(cls, value: str) -> str: ensure_lowercase_kebab(value) diff --git a/komposer/types/kubernetes.py b/komposer/types/kubernetes.py index a3160d0..5a4d659 100644 --- a/komposer/types/kubernetes.py +++ b/komposer/types/kubernetes.py @@ -1,5 +1,6 @@ from __future__ import annotations +from abc import ABC from collections.abc import Iterable from enum import Enum, unique from io import StringIO @@ -68,7 +69,7 @@ def from_context_with_name( ) -class Item(CamelCaseImmutableBaseModel): +class Item(CamelCaseImmutableBaseModel, ABC): api_version: str kind: str metadata: Metadata @@ -117,7 +118,7 @@ def from_env_file( class EnvironmentVariable(CamelCaseImmutableBaseModel): name: str - value: Optional[str] + value: Optional[str] = None @staticmethod def from_string(string: str) -> Iterable[EnvironmentVariable]: @@ -255,5 +256,4 @@ class Ingress(Item): class List(CamelCaseImmutableBaseModel): api_version: Literal["v1"] = "v1" kind: Literal["List"] = "List" - # We should be able to use Field(..., discriminator="kind") here - items: list[Item] = [] + items: list[Union[ConfigMap, Deployment, Service, Ingress]] = [] diff --git a/komposer/utils.py b/komposer/utils.py index 3aa4d7f..b0e18e3 100644 --- a/komposer/utils.py +++ b/komposer/utils.py @@ -65,4 +65,4 @@ def command_to_args(command: Optional[Union[str, list[str]]]) -> Optional[list[s def as_json_object(type_: BaseModel) -> dict[str, Any]: - return cast(dict[str, Any], json.loads(type_.json(by_alias=True))) + return cast(dict[str, Any], json.loads(type_.model_dump_json(by_alias=True)))