1- import asyncio
21import json
32from dataclasses import dataclass
43from typing import Any , cast
1211class Builder :
1312 builderid : int
1413 description : str | None
15- masterids : list [int ]
1614 name : str
1715 tags : list [str ]
1816
@@ -23,26 +21,6 @@ def __hash__(self) -> int:
2321 return hash (self .builderid )
2422
2523
26- @dataclass
27- class Build :
28- id : int
29- is_currently_failing : bool
30- builderid : int
31- builder : Builder | None
32-
33- def __init__ (self , ** kwargs : Any ) -> None :
34- self .__dict__ .update (** kwargs )
35- self .id = int (kwargs .get ("number" , - 1 ))
36- self .is_currently_failing = kwargs .get ("currently_failing" , False )
37- self .builder = None
38-
39- def __eq__ (self , other : object ) -> bool :
40- return isinstance (other , Build ) and self .id == other .id
41-
42- def __hash__ (self ) -> int :
43- return hash (self .id )
44-
45-
4624class BuildBotAPI :
4725 def __init__ (self , session : ClientSession ) -> None :
4826 self ._session = session
@@ -91,44 +69,3 @@ async def is_builder_failing_currently(self, builder: Builder) -> bool:
9169 if build ["results" ] == 2 :
9270 return True
9371 return False
94-
95- async def get_build (self , builder_id : int , build_id : int ) -> Build :
96- data = await self ._fetch_json (
97- f"https://buildbot.python.org/all/api/v2/builders/{ builder_id } "
98- f"/builds/{ build_id } "
99- )
100- (build_data ,) = data ["builds" ]
101- build : Build = Build (** build_data )
102- build .builder = (await self .all_builders ())[build .builderid ]
103- build .is_currently_failing = await self .is_builder_failing_currently (
104- build .builder
105- )
106- return build
107-
108- async def get_recent_failures (self , limit : int = 100 ) -> set [Build ]:
109- data = await self ._fetch_json (
110- f"https://buildbot.python.org/all/api/v2/builds?"
111- f"complete__eq=true&&results__eq=2&&"
112- f"order=-complete_at&&limit={ limit } "
113- )
114-
115- stable_builders = await self .stable_builders ()
116-
117- all_failures = {
118- Build (** build )
119- for build in data ["builds" ]
120- if build ["builderid" ] in stable_builders
121- }
122-
123- for failure in all_failures :
124- failure .builder = stable_builders [failure .builderid ]
125-
126- async def _get_missing_info (failure : Build ) -> None :
127- assert failure .builder is not None
128- failure .is_currently_failing = await self .is_builder_failing_currently (
129- failure .builder
130- )
131-
132- await asyncio .gather (* [_get_missing_info (failure ) for failure in all_failures ])
133-
134- return all_failures
0 commit comments