Skip to content

Commit 8cb6d43

Browse files
committed
Fix all of ruff
1 parent 8826f75 commit 8cb6d43

8 files changed

Lines changed: 80 additions & 43 deletions

File tree

src/daqpytools/logging/__init__.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1-
from daqpytools.logging.levels import logging_log_levels
2-
from daqpytools.logging.handlerconf import LogHandlerConf, HandlerType
3-
from daqpytools.logging.logger import setup_daq_ers_logger, get_daq_logger, setup_root_logger
1+
from daqpytools.logging.handlerconf import HandlerType, LogHandlerConf
42
from daqpytools.logging.handlers import add_handler
3+
from daqpytools.logging.levels import logging_log_levels
4+
from daqpytools.logging.logger import (
5+
get_daq_logger,
6+
setup_daq_ers_logger,
7+
setup_root_logger,
8+
)
59

610
__all__ = [
7-
"logging_log_levels",
8-
"LogHandlerConf",
911
"HandlerType",
10-
"setup_daq_ers_logger",
12+
"LogHandlerConf",
13+
"add_handler",
1114
"get_daq_logger",
15+
"logging_log_levels",
16+
"setup_daq_ers_logger",
1217
"setup_root_logger",
13-
"add_handler",
1418
]

src/daqpytools/logging/exceptions.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ class ERSInitError(Exception):
4949

5050
def __init__(self, address:str, topic:str) -> None:
5151
"""C'tor."""
52-
err_msg = f"The Kafka broker cannot be initialised using {address=} and {topic=}"
52+
err_msg = (
53+
"The Kafka broker cannot be initialised using "
54+
f"{address=} and {topic=}"
55+
)
5356
super().__init__(err_msg)
5457

5558

src/daqpytools/logging/filters.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from collections import defaultdict
77
from datetime import datetime
88
from threading import Lock
9-
from typing import Any
109

1110
from rich.text import Text
1211

@@ -52,7 +51,11 @@ def __init__(
5251
allowed_handlers_strategy : AllowedHandlersStrategy | None = None,
5352
) -> None:
5453
"""C'tor."""
55-
self.fallback_handlers = set(fallback_handlers) if fallback_handlers is not None else LogHandlerConf.get_base() #! We should check if this is still the case
54+
self.fallback_handlers = (
55+
set(fallback_handlers)
56+
if fallback_handlers is not None
57+
else LogHandlerConf.get_base()
58+
)
5659

5760
self.allowed_handlers_strategy = (
5861
allowed_handlers_strategy or
@@ -61,6 +64,7 @@ def __init__(
6164
super().__init__()
6265

6366
def get_allowed(self, record: logging.LogRecord) -> set[HandlerType] | None:
67+
"""Resolve the allowed handlers for a record."""
6468
return self.allowed_handlers_strategy.resolve(record, self.fallback_handlers)
6569

6670

@@ -261,9 +265,9 @@ def _build_throttle_filter(
261265
fallback_handlers: set[HandlerType],
262266
initial_treshold : int = 30,
263267
time_limit: int = 30,
264-
**extras: Any,
268+
**extras: object,
265269
) -> logging.Filter:
266-
"""Build throttle filter from extras"""
270+
"""Build a throttle filter from extras."""
267271
del extras
268272
return ThrottleFilter(
269273
fallback_handlers=fallback_handlers,
@@ -282,20 +286,26 @@ def _build_throttle_filter(
282286
HandlerType.Throttle: THROTTLE_FILTER_SPEC
283287
}
284288

285-
def get_filter_spec(handler_types: HandlerType):
289+
def get_filter_spec(handler_types: HandlerType) -> FilterSpec | None:
290+
"""Return the filter specification for a handler type."""
286291
return FILTER_SPEC_REGISTRY.get(handler_types)
287292

288293
def add_filter(
289294
log: logging.Logger,
290295
handler_type:HandlerType,
291296
fallback_handlers : set[HandlerType]| None,
292-
**extras: Any,
297+
**extras: object,
293298
) -> None:
294-
"""Add a logger filter according to the spec"""
299+
"""Add a logger filter according to the spec."""
295300
spec = get_filter_spec(handler_type)
296301

302+
effective_fallback_handlers = (
303+
fallback_handlers
304+
if fallback_handlers is not None
305+
else set(spec.fallback_types)
306+
)
297307
logger_filter = spec.factory(
298-
fallback_handlers if fallback_handlers is not None else set(spec.fallback_types),
308+
effective_fallback_handlers,
299309
**extras
300310
)
301311
log.addFilter(logger_filter)
@@ -305,7 +315,7 @@ def add_throttle_filter(
305315
log: logging.Logger,
306316
fallback_handlers: set[HandlerType] | None = None,
307317
) -> None:
308-
"""Add the Throttle filter to the logger"""
318+
"""Add the Throttle filter to the logger."""
309319
add_filter(
310320
log,
311321
HandlerType.Throttle,

src/daqpytools/logging/handlerconf.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,10 @@ def _make_ers_handler_conf(ers_log_level :str) -> ERSPyLogHandlerConf:
189189
protobufconf: ProtobufConf | None = None
190190

191191
for raw_handler in envvalue.split(","):
192-
handlertype, parsed_protobufconf = LogHandlerConf._convert_str_to_handlertype(
192+
handlertype, parsed_protobufconf = (
193+
LogHandlerConf._convert_str_to_handlertype(
193194
raw_handler.strip()
195+
)
194196
)
195197

196198
if handlertype is not None:

src/daqpytools/logging/handlers.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import io
44
import logging
55
import sys
6-
from typing import Any, cast
6+
from typing import cast
77

88
from erskafka.ERSKafkaLogHandler import ERSKafkaLogHandler
99

@@ -147,7 +147,7 @@ def logger_or_ancestors_have_handler(
147147

148148
#### Handlers ####
149149

150-
def _build_rich_handler(width: int | None = None, **_: Any) -> logging.Handler:
150+
def _build_rich_handler(width: int | None = None, **_: object) -> logging.Handler:
151151
"""Building the rich handler with any extras."""
152152
real_width = width if width is not None else get_width()
153153
return FormattedRichHandler(width=real_width)
@@ -159,7 +159,7 @@ def _build_rich_handler(width: int | None = None, **_: Any) -> logging.Handler:
159159
fallback_types = (HandlerType.Rich,), # For HandleIDFilter
160160
)
161161

162-
def _build_stdout_handler(**_: Any) -> logging.Handler:
162+
def _build_stdout_handler(**_: object) -> logging.Handler:
163163
handler = logging.StreamHandler(sys.stdout)
164164
handler.setFormatter(LoggingFormatter())
165165
return handler
@@ -172,7 +172,7 @@ def _build_stdout_handler(**_: Any) -> logging.Handler:
172172
fallback_types = (HandlerType.Stream, HandlerType.Lstdout),
173173
)
174174

175-
def _build_stderr_handler(**_: Any) -> logging.Handler:
175+
def _build_stderr_handler(**_: object) -> logging.Handler:
176176
handler = logging.StreamHandler(sys.stderr)
177177
handler.setFormatter(LoggingFormatter())
178178
handler.setLevel(logging.ERROR)
@@ -186,7 +186,7 @@ def _build_stderr_handler(**_: Any) -> logging.Handler:
186186
fallback_types = (HandlerType.Stream, HandlerType.Lstderr),
187187
)
188188

189-
def _build_file_handler(path: str | None = None, **_: Any) -> logging.Handler:
189+
def _build_file_handler(path: str | None = None, **_: object) -> logging.Handler:
190190
if not path:
191191
err_msg = "path is required for file handler"
192192
raise ValueError(err_msg)
@@ -207,7 +207,7 @@ def _build_erskafka_handler(
207207
topic : str = "ers_stream",
208208
address : str = "monkafka.cern.ch:30092",
209209
ers_app_name : str | None = None,
210-
**_) -> logging.Handler:
210+
**_: object) -> logging.Handler:
211211

212212
try:
213213
return ERSKafkaLogHandler(
@@ -216,8 +216,8 @@ def _build_erskafka_handler(
216216
kafka_topic = topic,
217217
app_name=ers_app_name
218218
)
219-
except:
220-
raise ERSInitError(address, topic)
219+
except Exception as err:
220+
raise ERSInitError(address, topic) from err
221221

222222

223223
ERSKAFKA_HANDLER_SPEC = HandlerSpec(
@@ -239,18 +239,23 @@ def _build_erskafka_handler(
239239
HandlerType.Protobufstream: (ERSKAFKA_HANDLER_SPEC,)
240240
}
241241

242-
def get_handler_specs(handler_type: HandlerType):
243-
"""Get the specs defined in the registry"""
244-
return HANDLER_SPEC_REGISTRY.get(handler_type, tuple())
242+
def get_handler_specs(handler_type: HandlerType) -> tuple[HandlerSpec, ...]:
243+
"""Get the specs defined in the registry."""
244+
return HANDLER_SPEC_REGISTRY.get(handler_type, ())
245245

246246
def add_handler(
247247
log: logging.Logger,
248248
handler_type: HandlerType | str,
249249
use_parent_handlers:bool,
250250
fallback_handler: set[HandlerType] | None = None,
251-
**extras: Any
252-
):
253-
ht = HandlerType.from_string(handler_type) if isinstance(handler_type, str) else handler_type
251+
**extras: object
252+
) -> None:
253+
"""Add a handler to the logger from the handler spec registry."""
254+
ht = (
255+
HandlerType.from_string(handler_type)
256+
if isinstance(handler_type, str)
257+
else handler_type
258+
)
254259
specs = get_handler_specs(ht)
255260

256261
for spec in specs:
@@ -271,13 +276,20 @@ def add_handler(
271276
)
272277

273278
handler = spec.factory(**extras)
274-
effective_default_case = fallback_handler if fallback_handler is not None else spec.fallback_types
279+
effective_default_case = (
280+
fallback_handler
281+
if fallback_handler is not None
282+
else spec.fallback_types
283+
)
275284

276285
handler_ids: HandlerType | list[HandlerType]
277286
if len(spec.fallback_types) == 1:
278287
handler_ids = cast(HandlerType, spec.fallback_types[0])
279288
else:
280-
handler_ids = [cast(HandlerType, handler_id) for handler_id in spec.fallback_types]
289+
handler_ids = [
290+
cast(HandlerType, handler_id)
291+
for handler_id in spec.fallback_types
292+
]
281293

282294
handler.addFilter(
283295
HandleIDFilter(
@@ -294,7 +306,7 @@ def add_handlers_from_types(
294306
handler_types: set[HandlerType],
295307
use_parent_handlers: bool,
296308
fallback_handlers: set[HandlerType],
297-
**extras: Any,
309+
**extras: object,
298310
) -> None:
299311
"""Add handlers and filters from a set of HandlerType values.
300312

src/daqpytools/logging/logger.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def get_daq_logger(
6969
stream_handlers: bool = False,
7070
ers_kafka_session: str | None = None,
7171
throttle: bool = False,
72-
**extras
72+
**extras: object
7373
) -> logging.Logger:
7474
"""C'tor for the default logging instances.
7575
@@ -85,6 +85,7 @@ def get_daq_logger(
8585
protobuf handler. If None, no ERS protobuf handler is added.
8686
throttle (bool): Whether to add the throttle filter or not. Note, does not mean
8787
outputs are filtered by default! See ThrottleFilter for details.
88+
**extras (object): Extra keyword arguments forwarded to handler builders.
8889
8990
Returns:
9091
logging.Logger: Configured logger instance.
@@ -183,6 +184,7 @@ def setup_daq_ers_logger(
183184
Args:
184185
logger (logging.Logger): Logger to configure.
185186
ers_kafka_session (str): ERS session name used for protobufstream handler.
187+
ers_app_name (str | None): Optional ERS application name for kafka handler.
186188
187189
Returns:
188190
None

src/daqpytools/logging/routing.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
from daqpytools.logging.levels import level_to_ers_var
77

88
"""
9-
So this file basically allows us to define the set of handlers that the logger should send to
9+
This module defines strategies that decide which handlers a logger should emit
10+
to for each record.
1011
"""
1112

1213

1314
class AllowedHandlersStrategy(ABC):
14-
"""Strategy for resolving allowed handler types for a log record"""
15+
"""Strategy for resolving allowed handler types for a log record."""
1516

1617
@abstractmethod
1718
def resolve(
@@ -22,18 +23,20 @@ def resolve(
2223
"""Resolve allowd handlers for a given record."""
2324

2425
def safe_return_set(self, raw_set : set[Any]) -> set[Any] | None:
26+
"""Return a set without `None` values, or `None` if empty."""
2527
return {obj for obj in raw_set if obj is not None}
2628

2729

2830

2931
class DefaultAllowedHandlerStrategy(AllowedHandlersStrategy):
30-
"""Resolve allowed handlers from record.handlers, or a fallback case"""
32+
"""Resolve allowed handlers from `record.handlers` or a fallback set."""
3133

3234
def resolve(
3335
self,
3436
record: logging.LogRecord,
3537
fallback_handlers : set[Any]
3638
) -> set[Any] | None:
39+
"""Resolve handlers from the record or fallback handlers."""
3740
allowed = getattr(record, "handlers", fallback_handlers)
3841
if allowed is None:
3942
return None
@@ -47,7 +50,7 @@ def resolve(
4750
record: logging.LogRecord,
4851
fallback_handlers : set[Any]
4952
) -> set[Any] | None:
50-
53+
"""Resolve handlers from ERS metadata attached to the record."""
5154
del fallback_handlers # unused
5255

5356
# Chain None checks using walrus operator
@@ -66,13 +69,14 @@ def resolve(
6669

6770

6871
class StreamAwareAllowedHandlersStrategy(AllowedHandlersStrategy):
69-
"""A dispatcher, chooses specific strategies based on record.stream"""
72+
"""Dispatch to a strategy based on `record.stream`."""
7073

7174
def __init__(
7275
self,
7376
default_strategy : AllowedHandlersStrategy | None = None,
7477
ers_strategy: AllowedHandlersStrategy | None = None,
7578
) -> None:
79+
"""Initialize strategy dispatchers for default and ERS streams."""
7680
self.default_strategy = default_strategy or DefaultAllowedHandlerStrategy()
7781
self.ers_strategy = ers_strategy or ERSAllowedHandlersStrategy()
7882

@@ -81,7 +85,7 @@ def resolve(
8185
record: logging.LogRecord,
8286
fallback_handlers : set[Any],
8387
) -> set[Any] | None:
84-
88+
"""Resolve handlers using stream-aware strategy selection."""
8589
if getattr(record, "stream", None) == StreamType.ERS:
8690
return self.ers_strategy.resolve(record, fallback_handlers)
8791
return self.default_strategy.resolve(record, fallback_handlers)

src/daqpytools/logging/specs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,4 @@ class FilterSpec:
4848
alias: Any
4949
filter_class: type[logging.Filter]
5050
factory: Callable[[set[Any], Mapping[str, Any]], logging.Filter]
51-
fallback_types: tuple[Any, ...] = tuple()
51+
fallback_types: tuple[Any, ...] = ()

0 commit comments

Comments
 (0)