fix(acms): convert ContextPolicyConfig and ViewPolicyConfiguration to Pydantic BaseModel
CI / load-versions (pull_request) Successful in 18s
CI / push-validation (pull_request) Successful in 29s
CI / lint (pull_request) Successful in 43s
CI / typecheck (pull_request) Successful in 1m3s
CI / security (pull_request) Successful in 1m8s
CI / quality (pull_request) Successful in 1m0s
CI / build (pull_request) Successful in 43s
CI / helm (pull_request) Successful in 42s
CI / unit_tests (pull_request) Successful in 5m19s
CI / integration_tests (pull_request) Successful in 8m42s
CI / docker (pull_request) Successful in 1m45s
CI / coverage (pull_request) Failing after 21m52s
CI / status-check (pull_request) Has been cancelled

The two dataclasses used @dataclass decorator without importing it from
dataclasses, causing a NameError on import. This also violated the
architecture invariant that requires all dataclasses to use Pydantic
BaseModel instead of @dataclass.

Replace @dataclass with BaseModel inheritance and field(default_factory=...)
with Field(default_factory=...) which was already imported from pydantic.
This commit is contained in:
2026-06-17 16:00:00 -04:00
committed by drew
parent fa5ba790e6
commit 31c3a3e1da
+8 -11
View File
@@ -8,15 +8,14 @@ with scope rules, priority weights, and budget overrides.
from __future__ import annotations
import tomllib
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any, ClassVar
import yaml
from pydantic import BaseModel, Field
@dataclass
class PolicyScope:
class PolicyScope(BaseModel):
"""Represents a scope rule for context policy application."""
name: str
@@ -45,8 +44,7 @@ class PolicyScope:
return context_value in scope_values
@dataclass
class ContextPolicyConfig:
class ContextPolicyConfig(BaseModel):
"""Configuration for a context policy."""
name: str
@@ -55,7 +53,7 @@ class ContextPolicyConfig:
description: str | None = None
"""Description of the policy."""
scopes: list[PolicyScope] = field(default_factory=list)
scopes: list[PolicyScope] = Field(default_factory=list)
"""List of scope rules for this policy."""
priority_weight: float = 1.0
@@ -67,18 +65,17 @@ class ContextPolicyConfig:
enabled: bool = True
"""Whether this policy is enabled."""
metadata: dict[str, Any] = field(default_factory=dict)
metadata: dict[str, Any] = Field(default_factory=dict)
"""Additional metadata for the policy."""
@dataclass
class ViewPolicyConfiguration:
class ViewPolicyConfiguration(BaseModel):
"""Configuration for policies applied to a specific view."""
view_name: str
"""Name of the view."""
policies: list[ContextPolicyConfig] = field(default_factory=list)
policies: list[ContextPolicyConfig] = Field(default_factory=list)
"""List of policies for this view."""
default_priority_weight: float = 1.0
@@ -87,7 +84,7 @@ class ViewPolicyConfiguration:
default_budget: int | None = None
"""Default budget for this view."""
metadata: dict[str, Any] = field(default_factory=dict)
metadata: dict[str, Any] = Field(default_factory=dict)
"""Additional metadata for the view."""