Coverage for src/somesy/fortran/models.py: 92%
25 statements
« prev ^ index » next coverage.py v7.3.2, created at 2024-04-30 09:42 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2024-04-30 09:42 +0000
1"""Pyproject models."""
2from typing import Optional, Set
4from packaging.version import parse as parse_version
5from pydantic import (
6 BaseModel,
7 Field,
8 field_validator,
9)
10from typing_extensions import Annotated
12from somesy.core.types import HttpUrlStr
15class FortranConfig(BaseModel):
16 """Fortran configuration model."""
18 model_config = dict(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 Optional[str],
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[
32 Optional[str], Field(description="Package description")
33 ] = None
34 license: Annotated[
35 Optional[str],
36 Field(description="SPDX license identifier(s)."),
37 ] = None
38 author: Annotated[
39 Optional[str], Field(description="Package author information")
40 ] = None
41 maintainer: Annotated[
42 Optional[str], Field(description="Package maintainer information")
43 ] = None
44 copyright: Annotated[
45 Optional[str], Field(description="Package copyright text")
46 ] = None
47 homepage: Annotated[
48 Optional[HttpUrlStr], Field(description="Package homepage")
49 ] = None
50 keywords: Annotated[
51 Optional[Set[str]], Field(description="Keywords that describe the package")
52 ] = None
53 categories: Annotated[
54 Optional[Set[str]], Field(description="Categories that package falls into")
55 ] = None
57 @field_validator("version")
58 @classmethod
59 def validate_version(cls, v):
60 """Validate version using PEP 440."""
61 try:
62 _ = parse_version(v)
63 except ValueError as err:
64 raise ValueError("Invalid version") from err
65 return v