Skip to content

Commit 3a5e839

Browse files
committed
modernize
1 parent 3750459 commit 3a5e839

File tree

5 files changed

+135
-126
lines changed

5 files changed

+135
-126
lines changed

logwrap/log_on_access.py

Lines changed: 49 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
"""Property with logging on successful get/set/delete or failure."""
1717

18+
from __future__ import annotations
19+
1820
# Standard Library
1921
import inspect
2022
import logging
@@ -28,6 +30,10 @@
2830
from logwrap import constants
2931
from logwrap import repr_utils
3032

33+
if typing.TYPE_CHECKING:
34+
# Standard Library
35+
from collections.abc import Callable
36+
3137
__all__ = ("LogOnAccess",)
3238

3339
_LOGGER: logging.Logger = logging.getLogger(__name__)
@@ -137,35 +143,35 @@ class LogOnAccess(property, typing.Generic[_OwnerT, _ReturnT]):
137143

138144
def __init__(
139145
self,
140-
fget: typing.Optional[typing.Callable[[_OwnerT], _ReturnT]] = None,
141-
fset: typing.Optional[typing.Callable[[_OwnerT, _ReturnT], None]] = None,
142-
fdel: typing.Optional[typing.Callable[[_OwnerT], None]] = None,
143-
doc: typing.Optional[str] = None,
146+
fget: Callable[[_OwnerT], _ReturnT] | None = None,
147+
fset: Callable[[_OwnerT, _ReturnT], None] | None = None,
148+
fdel: Callable[[_OwnerT], None] | None = None,
149+
doc: str | None = None,
144150
*,
145151
# Extended settings start
146-
logger: typing.Optional[typing.Union[logging.Logger, str]] = None,
152+
logger: logging.Logger | str | None = None,
147153
log_object_repr: bool = True,
148154
log_level: int = logging.DEBUG,
149155
exc_level: int = logging.DEBUG,
150156
log_before: bool = True,
151157
log_success: bool = True,
152158
log_failure: bool = True,
153159
log_traceback: bool = True,
154-
override_name: typing.Optional[str] = None,
160+
override_name: str | None = None,
155161
max_indent: int = 20,
156162
) -> None:
157163
"""Advanced property main entry point.
158164
159165
:param fget: normal getter.
160-
:type fget: typing.Optional[typing.Callable[[typing.Any, ], typing.Any]]
166+
:type fget: Callable[[_OwnerT], _ReturnT] | None
161167
:param fset: normal setter.
162-
:type fset: typing.Optional[typing.Callable[[typing.Any, typing.Any], None]]
168+
:type fset: Callable[[_OwnerT, _ReturnT], None] | None
163169
:param fdel: normal deleter.
164-
:type fdel: typing.Optional[typing.Callable[[typing.Any, ], None]]
170+
:type fdel: Callable[[_OwnerT], None] | None
165171
:param doc: docstring override
166-
:type doc: typing.Optional[str]
172+
:type doc: str | None
167173
:param logger: logger instance or name to use as override
168-
:type logger: typing.Optional[typing.Union[logging.Logger, str]]
174+
:type logger: logging.Logger | str | None
169175
:param log_object_repr: use `repr` over object to describe owner if True else owner class name and id
170176
:type log_object_repr: bool
171177
:param log_level: log level for successful operations
@@ -181,14 +187,14 @@ def __init__(
181187
:param log_traceback: Log traceback on exceptions
182188
:type log_traceback: bool
183189
:param override_name: override property name if not None else use getter/setter/deleter name
184-
:type override_name: typing.Optional[str]
190+
:type override_name: str | None
185191
:param max_indent: maximal indent before classic repr() call
186192
:type max_indent: int
187193
"""
188194
super().__init__(fget=fget, fset=fset, fdel=fdel, doc=doc)
189195

190196
if logger is None or isinstance(logger, logging.Logger):
191-
self.__logger: typing.Optional[logging.Logger] = logger
197+
self.__logger: logging.Logger | None = logger
192198
else:
193199
self.__logger = logging.getLogger(logger)
194200

@@ -199,28 +205,28 @@ def __init__(
199205
self.__log_success: bool = log_success
200206
self.__log_failure: bool = log_failure
201207
self.__log_traceback: bool = log_traceback
202-
self.__override_name: typing.Optional[str] = override_name
208+
self.__override_name: str | None = override_name
203209
self.__max_indent: int = max_indent
204210
self.__name: str = ""
205-
self.__owner: typing.Optional[typing.Type[_OwnerT]] = None
211+
self.__owner: type[_OwnerT] | None = None
206212

207-
def __set_name__(self, owner: typing.Optional[typing.Type[_OwnerT]], name: str) -> None:
213+
def __set_name__(self, owner: type[_OwnerT] | None, name: str) -> None:
208214
"""Set __name__ and __objclass__ property.
209215
210216
:param owner: owner class, where descriptor applied
211-
:type owner: typing.Optional[type]
217+
:type owner: type[_OwnerT] | None
212218
:param name: descriptor name
213219
:type name: str
214220
"""
215221
self.__owner = owner
216222
self.__name = name
217223

218224
@property
219-
def __objclass__(self) -> typing.Optional[typing.Type[_OwnerT]]: # pragma: no cover
225+
def __objclass__(self) -> type[_OwnerT] | None: # pragma: no cover
220226
"""Read-only owner.
221227
222228
:return: property owner class
223-
:rtype: typing.Optional[type]
229+
:rtype: type[_OwnerT] | None
224230
"""
225231
return self.__owner
226232

@@ -235,19 +241,19 @@ def __traceback(self) -> str:
235241
return ""
236242
exc_info = sys.exc_info()
237243
stack: traceback.StackSummary = traceback.extract_stack()
238-
full_tb: typing.List[traceback.FrameSummary] = [elem for elem in stack if elem.filename != _CURRENT_FILE]
239-
exc_line: typing.List[str] = traceback.format_exception_only(*exc_info[:2])
244+
full_tb: list[traceback.FrameSummary] = [elem for elem in stack if elem.filename != _CURRENT_FILE]
245+
exc_line: list[str] = traceback.format_exception_only(*exc_info[:2])
240246
# Make standard traceback string
241247
tb_text = "\nTraceback (most recent call last):\n" + "".join(traceback.format_list(full_tb)) + "".join(exc_line)
242248
return tb_text
243249

244-
def __get_obj_source(self, instance: _OwnerT, owner: typing.Optional[typing.Type[_OwnerT]] = None) -> str:
250+
def __get_obj_source(self, instance: _OwnerT, owner: type[_OwnerT] | None = None) -> str:
245251
"""Get object repr block.
246252
247253
:param instance: object instance
248254
:type instance: typing.Any
249255
:param owner: object class (available for getter usage only)
250-
:type owner: typing.Optional[type]
256+
:type owner: type[_OwnerT] | None
251257
:return: repr of object if it not disabled else repr placeholder
252258
:rtype: str
253259
"""
@@ -263,7 +269,7 @@ def _get_logger_for_instance(self, instance: _OwnerT) -> logging.Logger:
263269
"""Get logger for log calls.
264270
265271
:param instance: Owner class instance. Filled only if instance created, else None.
266-
:type instance: typing.Optional[owner]
272+
:type instance: _OwnerT | None
267273
:return: logger instance
268274
:rtype: logging.Logger
269275
"""
@@ -284,12 +290,12 @@ def _get_logger_for_instance(self, instance: _OwnerT) -> logging.Logger:
284290
def __get__(
285291
self,
286292
instance: None,
287-
owner: typing.Optional[typing.Type[_OwnerT]] = None,
293+
owner: type[_OwnerT] | None = None,
288294
) -> typing.NoReturn:
289295
"""Get descriptor.
290296
291297
:param instance: Owner class instance. Filled only if instance created, else None.
292-
:type instance: typing.Optional[owner]
298+
:type instance: _OwnerT | None
293299
:param owner: Owner class for property.
294300
:return: getter call result if getter presents
295301
:rtype: typing.Any
@@ -301,12 +307,12 @@ def __get__(
301307
def __get__(
302308
self,
303309
instance: _OwnerT,
304-
owner: typing.Optional[typing.Type[_OwnerT]] = None,
305-
) -> _ReturnT: # noqa: F811
310+
owner: type[_OwnerT] | None = None,
311+
) -> _ReturnT:
306312
"""Get descriptor.
307313
308314
:param instance: Owner class instance. Filled only if instance created, else None.
309-
:type instance: typing.Optional[owner]
315+
:type instance: _OwnerT | None
310316
:param owner: Owner class for property.
311317
:return: getter call result if getter presents
312318
:rtype: typing.Any
@@ -316,13 +322,13 @@ def __get__(
316322

317323
def __get__(
318324
self,
319-
instance: typing.Optional[_OwnerT],
320-
owner: typing.Optional[typing.Type[_OwnerT]] = None,
321-
) -> _ReturnT: # noqa: F811
325+
instance: _OwnerT | None,
326+
owner: type[_OwnerT] | None = None,
327+
) -> _ReturnT:
322328
"""Get descriptor.
323329
324330
:param instance: Owner class instance. Filled only if instance created, else None.
325-
:type instance: typing.Optional[owner]
331+
:type instance: _OwnerT | None
326332
:param owner: Owner class for property.
327333
:return: getter call result if getter presents
328334
:rtype: typing.Any
@@ -360,7 +366,7 @@ def __set__(self, instance: _OwnerT, value: _ReturnT) -> None:
360366
"""Set descriptor.
361367
362368
:param instance: Owner class instance. Filled only if instance created, else None.
363-
:type instance: typing.Optional
369+
:type instance: _OwnerT | None
364370
:param value: Value for setter
365371
:raises AttributeError: Setter is not available
366372
:raises Exception: Something goes wrong
@@ -396,7 +402,7 @@ def __delete__(self, instance: _OwnerT) -> None:
396402
"""Delete descriptor.
397403
398404
:param instance: Owner class instance. Filled only if instance created, else None.
399-
:type instance: typing.Optional
405+
:type instance: _OwnerT | None
400406
:raises AttributeError: Deleter is not available
401407
:raises Exception: Something goes wrong
402408
"""
@@ -423,20 +429,20 @@ def __delete__(self, instance: _OwnerT) -> None:
423429
raise
424430

425431
@property
426-
def logger(self) -> typing.Optional[logging.Logger]:
432+
def logger(self) -> logging.Logger | None:
427433
"""Logger instance to use as override.
428434
429435
:return: logger instance if set
430-
:rtype: typing.Optional[logging.Logger]
436+
:rtype: logging.Logger | None
431437
"""
432438
return self.__logger
433439

434440
@logger.setter
435-
def logger(self, logger: typing.Union[logging.Logger, str, None]) -> None:
441+
def logger(self, logger: logging.Logger | str | None) -> None:
436442
"""Logger instance to use as override.
437443
438444
:param logger: logger instance, logger name or None if override disable required
439-
:type logger: typing.Union[logging.Logger, str, None]
445+
:type logger: logging.Logger | str | None
440446
"""
441447
if logger is None or isinstance(logger, logging.Logger):
442448
self.__logger = logger
@@ -570,20 +576,20 @@ def log_traceback(self, value: bool) -> None:
570576
self.__log_traceback = value
571577

572578
@property
573-
def override_name(self) -> typing.Optional[str]:
579+
def override_name(self) -> str | None:
574580
"""Override property name if not None else use getter/setter/deleter name.
575581
576582
:return: property name override
577-
:rtype: typing.Optional[str]
583+
:rtype: str | None
578584
"""
579585
return self.__override_name
580586

581587
@override_name.setter
582-
def override_name(self, name: typing.Optional[str]) -> None:
588+
def override_name(self, name: str | None) -> None:
583589
"""Override property name if not None else use getter/setter/deleter name.
584590
585591
:param name: property name override
586-
:type name: typing.Optional[str]
592+
:type name: str | None
587593
"""
588594
self.__override_name = name
589595

logwrap/log_wrap.pxd

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ import inspect
1919
import logging
2020
import typing
2121

22-
# Package Implementation
23-
2422
cdef:
2523
unsigned long indent
2624

0 commit comments

Comments
 (0)