This commit is contained in:
John Lancaster
2026-06-21 12:41:14 -05:00
parent 9c8ab70c06
commit aec3500370
4 changed files with 25 additions and 29 deletions
+7 -9
View File
@@ -2,21 +2,19 @@ import re
from collections.abc import Mapping
from pathlib import PurePosixPath
from types import MappingProxyType
from typing import TypeVar
from typing import ClassVar
from typing import Final
from pydantic import BaseModel
from pydantic import ConfigDict
from pydantic import field_validator
SKILL_ID_RE = re.compile(r"^[a-z][a-z0-9-]*$")
SEMVER_RE = re.compile(r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:[-+][0-9A-Za-z.-]+)?$")
K = TypeVar("K")
V = TypeVar("V")
SKILL_ID_RE: Final[re.Pattern[str]] = re.compile(r"^[a-z][a-z0-9-]*$")
SEMVER_RE: Final[re.Pattern[str]] = re.compile(r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:[-+][0-9A-Za-z.-]+)?$")
class StrictFrozenModel(BaseModel):
model_config = ConfigDict(
model_config: ClassVar[ConfigDict] = ConfigDict(
extra="forbid",
frozen=True,
validate_by_alias=True,
@@ -25,8 +23,8 @@ class StrictFrozenModel(BaseModel):
)
def frozen_mapping(value: Mapping[K, V] | None = None) -> Mapping[K, V]:
return MappingProxyType(dict(value or {}))
def frozen_mapping[K, V](value: Mapping[K, V] | None = None) -> Mapping[K, V]:
return MappingProxyType(dict(value) if value is not None else {})
class ReferenceEntry(StrictFrozenModel):