99import pathlib
1010import re
1111from os import PathLike
12- from typing import Optional
12+ from typing import Collection , Optional
1313
1414import networkx as nx
1515import yaml
@@ -49,7 +49,7 @@ def __init__(
4949 diff_dir : PathLike [str ] = pathlib .Path ("diffs" ),
5050 nightly_stats : PathLike [str ] = pathlib .Path ("nightly_stats" ),
5151 gardenlinux_root : Optional [str ] = None ,
52- feature_dir_name : Optional [ str ] = "features" ,
52+ feature_dir_name : str = "features" ,
5353 logger : Optional [logging .Logger ] = None ,
5454 ):
5555 """
@@ -73,7 +73,7 @@ def __init__(
7373
7474 self ._all = set ()
7575 self ._flavors = os .listdir (diff_dir )
76- self ._nightly_stats = nightly_stats
76+ self ._nightly_stats = pathlib . Path ( nightly_stats )
7777 self ._feature_dir_name = feature_dir_name
7878
7979 self ._successful = []
@@ -108,21 +108,21 @@ def __init__(
108108 self ._unexpected_falvors = self ._all - self ._expected_falvors
109109
110110 # Map files to flavors
111- affected = {} # {file: {flavors...}}
111+ affected : dict [ str , set [ str ]] = {} # {file: {flavors...}}
112112 for flavor in failed :
113113 for file in failed [flavor ]:
114114 if file not in affected :
115115 affected [file ] = set ()
116116 affected [file ].add (flavor )
117117
118118 # Merge files affected by the same flavors by mapping flavor sets to files
119- self ._bundled = {} # {{flavors...}: {files...}}
119+ self ._bundled : dict [ frozenset [ str ], set [ str ]] = {} # {{flavors...}: {files...}}
120120 for file in affected :
121121 if frozenset (affected [file ]) not in self ._bundled :
122122 self ._bundled [frozenset (affected [file ])] = set ()
123123 self ._bundled [frozenset (affected [file ])].add (file )
124124
125- def _node_key (self , node ) :
125+ def _node_key (self , node : str ) -> str :
126126 """
127127 Key order function to sort platforms before elements, platforms before flags and elements before flags
128128
@@ -179,7 +179,9 @@ def _generateIntersectionTrees(
179179
180180 return trees
181181
182- def _treeStr (self , graph : nx .DiGraph , found = None ) -> tuple [str , set ]:
182+ def _treeStr (
183+ self , graph : nx .DiGraph , found : Optional [set [str ]] = None
184+ ) -> tuple [str , set [str ]]:
183185 """
184186 Returns a string representation of the graph containg each node exactly once
185187
@@ -211,7 +213,7 @@ def _treeStr(self, graph: nx.DiGraph, found=None) -> tuple[str, set]:
211213 return "\n " .join (s .split ("\n " )[:- 1 ]), found
212214
213215 @staticmethod
214- def _dropdown (items ) -> str :
216+ def _dropdown (items : Collection [ str ] ) -> str :
215217 """
216218 Converts the items into a markdown dropwon list if the length is 10 or more
217219
@@ -326,7 +328,8 @@ def __str__(self) -> str:
326328
327329 # Sort the problems by affected flavors in descending order and by files names for problems with the same number of affected flavors
328330 # to get a derterministic ordering for testing
329- sorting_function = lambda files : (- len (trees [files ][0 ]), "," .join (sorted (files )))
331+ def sorting_function (files : frozenset [str ]) -> tuple [int , str ]:
332+ return (- len (trees [files ][0 ]), "," .join (sorted (files )))
330333
331334 for files in sorted (trees , key = sorting_function ):
332335 flavors , tree = trees [files ]
0 commit comments