11from abc import ABCMeta , abstractmethod
2+ from datetime import datetime
23from typing import TYPE_CHECKING , Any
34
4- from pydantic import BaseModel
5+ from pydantic import BaseModel , EmailStr
56
67
78class GitProcessorConfigShape (BaseModel ):
@@ -23,6 +24,14 @@ class TreeData(BaseModel):
2324 type : str = 'tree'
2425
2526
27+ class CommitMeta (BaseModel ):
28+ author_email : EmailStr
29+ committer_email : EmailStr
30+ authored_date : datetime
31+ committed_date : datetime
32+ message : str
33+
34+
2635class GitProcessor [ConfigShapeT : GitProcessorConfigShape , TreeT , BlobT ](metaclass = ABCMeta ):
2736 if TYPE_CHECKING :
2837 config_shape : type [ConfigShapeT ]
@@ -37,9 +46,9 @@ def __init_subclass__(cls, **kwargs: Any) -> None:
3746
3847 setattr (cls , el , attr )
3948
40- def __init__ (self , config_dict : dict [str , Any ], ref : str ) -> None :
49+ def __init__ (self , config_dict : dict [str , Any ], sha : str ) -> None :
4150 self .config = self .validate_config (config_dict )
42- self .ref = ref
51+ self .sha = sha
4352
4453 def validate_config (self , config_dict : dict [str , Any ]) -> ConfigShapeT :
4554 return self .config_shape .model_validate (config_dict )
@@ -60,3 +69,6 @@ async def process(self) -> TreeData:
6069 result = await self .process_tree (await self .get_root_tree (), 0 )
6170 await self .cleanup ()
6271 return result
72+
73+ async def get_commit_meta (self ) -> CommitMeta :
74+ raise NotImplementedError
0 commit comments