Coverage for src/somesy/fortran/models.py: 92%
24 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-04 11:35 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-04 11:35 +0000
1"""Pyproject models."""
3from typing import Annotated
5from packaging.version import parse as parse_version
6from pydantic import (
7 BaseModel,
8 Field,
9 field_validator,
10)
12from somesy.core.types import HttpUrlStr
15class FortranConfig(BaseModel):
16 """Fortran configuration model."""
18 model_config = {"use_enum_values": True}
20 name: Annotated[
21 str,
22 Field(pattern=r"^[A-Za-z0-9]+([_-][A-Za-z0-9]+)*$", description="Package name"),
23 ]
24 version: Annotated[
25 str | None,
26 Field(
27 pattern=r"^\d+(\.\d+)*((a|b|rc)\d+)?(post\d+)?(dev\d+)?$",
28 description="Package version",
29 ),
30 ] = None
31 description: Annotated[str | None, Field(description="Package description")] = None
32 license: Annotated[
33 str | None,
34 Field(description="SPDX license identifier(s)."),
35 ] = None
36 author: Annotated[str | None, Field(description="Package author information")] = (
37 None
38 )
39 maintainer: Annotated[
40 str | None, Field(description="Package maintainer information")
41 ] = None
42 copyright: Annotated[str | None, Field(description="Package copyright text")] = None
43 homepage: Annotated[HttpUrlStr | None, Field(description="Package homepage")] = None
44 keywords: Annotated[
45 set[str] | None, Field(description="Keywords that describe the package")
46 ] = None
47 categories: Annotated[
48 set[str] | None, Field(description="Categories that package falls into")
49 ] = None
51 @field_validator("version")
52 @classmethod
53 def validate_version(cls, v):
54 """Validate version using PEP 440."""
55 try:
56 _ = parse_version(v)
57 except ValueError as err:
58 raise ValueError("Invalid version") from err
59 return v