7
7
import os
8
8
from pathlib import Path
9
9
from random import sample
10
- from re import Pattern
10
+ import re
11
11
from statistics import quantiles
12
- from typing import TYPE_CHECKING , Any
12
+ from typing import Annotated , Any
13
13
from urllib .parse import quote
14
14
import click
15
15
from click_loglevel import LogLevel
16
- from github import Github
16
+ from github import Auth , Github
17
17
from github .Issue import Issue
18
18
from github .PullRequest import PullRequest
19
19
from github .Repository import Repository
20
- from pydantic import BaseModel , Field , StrictBool , constr
20
+ from pydantic import BaseModel , Field , StrictBool , StringConstraints
21
21
from ruamel .yaml import YAML
22
22
from . import __version__
23
23
24
24
log = logging .getLogger ("solidation" )
25
25
26
- if TYPE_CHECKING :
27
- GHUser = str
28
- GHRepo = str
29
- else :
30
- GHUser = constr (regex = r"^[-_A-Za-z0-9]+$" )
31
- GHRepo = constr (regex = r"^[-_A-Za-z0-9]+/[-_.A-Za-z0-9]+$" )
26
+ GHUser = Annotated [str , StringConstraints (pattern = r"^[-_A-Za-z0-9]+$" )]
27
+ GHRepo = Annotated [str , StringConstraints (pattern = r"^[-_A-Za-z0-9]+/[-_.A-Za-z0-9]+$" )]
32
28
33
29
34
30
class RepoSpec (BaseModel ):
@@ -38,7 +34,7 @@ class RepoSpec(BaseModel):
38
34
39
35
class OrgSpec (BaseModel ):
40
36
name : GHUser
41
- fetch_members : StrictBool | Pattern = False
37
+ fetch_members : StrictBool | re . Pattern [ str ] = False
42
38
member_activity_only : bool = False
43
39
44
40
def member_fetched (self , user : str ) -> bool :
@@ -80,7 +76,7 @@ class Consolidator:
80
76
since : datetime = field (init = False )
81
77
82
78
def __post_init__ (self , token : str ) -> None :
83
- self .gh = Github (token )
79
+ self .gh = Github (auth = Auth . Token ( token ) )
84
80
self .since = datetime .now (timezone .utc ) - timedelta (
85
81
days = self .config .recent_days
86
82
)
@@ -339,7 +335,7 @@ def to_markdown(self) -> str:
339
335
f" { len (recent_closed_prs )} \n "
340
336
)
341
337
342
- merged_prs = [i for i in recent_closed_prs if i .merged_at ]
338
+ merged_prs = [i for i in recent_closed_prs if i .merged_at is not None ]
343
339
if merged_prs :
344
340
for label , attr in (("Proposed" , "user" ), ("Merged" , "merged_by" )):
345
341
s += (
@@ -350,7 +346,10 @@ def to_markdown(self) -> str:
350
346
)
351
347
+ "\n "
352
348
)
353
- pr_durations = [(i .merged_at - i .created_at ).days for i in merged_prs ]
349
+ pr_durations = []
350
+ for pr in merged_prs :
351
+ assert pr .merged_at is not None
352
+ pr_durations .append ((pr .merged_at - pr .created_at ).days )
354
353
if len (pr_durations ) > 1 :
355
354
s += f"- PR duration quantiles (days): { quantiles (pr_durations )} \n "
356
355
@@ -451,7 +450,7 @@ def main(config: Path, log_level: int) -> None:
451
450
)
452
451
log .info ("solidation %s" , __version__ )
453
452
with config .open () as fp :
454
- cfg = Configuration .parse_obj (YAML (typ = "safe" ).load (fp ))
453
+ cfg = Configuration .model_validate (YAML (typ = "safe" ).load (fp ))
455
454
cs = Consolidator (token = os .environ ["GITHUB_TOKEN" ], config = cfg )
456
455
report = cs .run ()
457
456
print (report .to_markdown (), end = "" )
0 commit comments