Coverage for src/somesy/git/models.py: 100%

19 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-08 11:27 +0000

1"""Models for metadata harvested from Git.""" 

2 

3from __future__ import annotations 

4 

5from datetime import date 

6from typing import Annotated 

7 

8from pydantic import Field 

9 

10from somesy.core.models import SomesyBaseModel 

11from somesy.core.types import ContributionTypeEnum 

12 

13 

14class GitAuthor(SomesyBaseModel): 

15 """A Git author mapped to a Somesy project contributor.""" 

16 

17 name: str 

18 email: str | None = None 

19 commit_count: Annotated[int, Field(ge=0)] = 0 

20 author: bool = True 

21 contribution_types: list[ContributionTypeEnum] = Field( 

22 default_factory=lambda: [ContributionTypeEnum.code], min_length=1 

23 ) 

24 

25 

26class GitMetadata(SomesyBaseModel): 

27 """Git values that map to Somesy project metadata.""" 

28 

29 name: str | None = None 

30 repository: str | None = None 

31 version: str | None = None 

32 date_created: date | None = None 

33 date_modified: date | None = None 

34 authors: list[GitAuthor] = Field(default_factory=list)