1
1
import codecs
2
+ import dataclasses
2
3
import os
3
4
import re
4
5
import sys
@@ -64,16 +65,18 @@ def __init__(self, *, unicode: bool) -> None:
64
65
self .error = "✕" if unicode else "failed"
65
66
66
67
68
+ @dataclasses .dataclass
67
69
class Logger :
68
- fold_mode : str
69
- colors_enabled : bool
70
- unicode_enabled : bool
70
+ fold_mode : str = "disabled"
71
+ colors_enabled : bool = False
72
+ unicode_enabled : bool = False
71
73
active_build_identifier : str | None = None
72
74
build_start_time : float | None = None
73
75
step_start_time : float | None = None
74
76
active_fold_group_name : str | None = None
77
+ dedupiclate : set [str ] = dataclasses .field (default_factory = set )
75
78
76
- def __init__ (self ) -> None :
79
+ def __post_init__ (self ) -> None :
77
80
if sys .platform == "win32" and hasattr (sys .stdout , "reconfigure" ):
78
81
# the encoding on Windows can be a 1-byte charmap, but all CIs
79
82
# support utf8, so we hardcode that
@@ -96,11 +99,9 @@ def __init__(self) -> None:
96
99
self .colors_enabled = True
97
100
98
101
elif ci_provider == CIProvider .appveyor :
99
- self .fold_mode = "disabled"
100
102
self .colors_enabled = True
101
103
102
104
else :
103
- self .fold_mode = "disabled"
104
105
self .colors_enabled = file_supports_color (sys .stdout )
105
106
106
107
def build_start (self , identifier : str ) -> None :
@@ -164,7 +165,11 @@ def notice(self, message: str) -> None:
164
165
c = self .colors
165
166
print (f"cibuildwheel: { c .bold } note{ c .end } : { message } \n " , file = sys .stderr )
166
167
167
- def warning (self , message : str ) -> None :
168
+ def warning (self , message : str , * , deduplicate : bool = False ) -> None :
169
+ if deduplicate and message in self .dedupiclate :
170
+ return
171
+ self .dedupiclate .add (message )
172
+
168
173
if self .fold_mode == "github" :
169
174
print (f"::warning::cibuildwheel: { message } \n " , file = sys .stderr )
170
175
else :
0 commit comments