Karim shoair commited on
Commit
7003b66
·
1 Parent(s): c7e573a

feat: Change logger to be flexible enough for the spiders classes

Browse files
scrapling/core/utils/__init__.py CHANGED
@@ -1,5 +1,7 @@
1
  from ._utils import (
2
  log,
 
 
3
  __CONSECUTIVE_SPACES_REGEX__,
4
  flatten,
5
  _is_iterable,
 
1
  from ._utils import (
2
  log,
3
+ set_logger,
4
+ reset_logger,
5
  __CONSECUTIVE_SPACES_REGEX__,
6
  flatten,
7
  _is_iterable,
scrapling/core/utils/_utils.py CHANGED
@@ -1,6 +1,7 @@
1
  import logging
2
  from itertools import chain
3
  from re import compile as re_compile
 
4
 
5
  from lxml import html
6
 
@@ -36,7 +37,25 @@ def setup_logger():
36
  return logger
37
 
38
 
39
- log = setup_logger()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
 
42
  def flatten(lst: Iterable[Any]) -> List[Any]:
 
1
  import logging
2
  from itertools import chain
3
  from re import compile as re_compile
4
+ from contextvars import ContextVar, Token
5
 
6
  from lxml import html
7
 
 
37
  return logger
38
 
39
 
40
+ _current_logger: ContextVar[logging.Logger] = ContextVar("scrapling_logger", default=setup_logger())
41
+
42
+
43
+ class LoggerProxy:
44
+ def __getattr__(self, name: str):
45
+ return getattr(_current_logger.get(), name)
46
+
47
+
48
+ log = LoggerProxy()
49
+
50
+
51
+ def set_logger(logger: logging.Logger) -> Token:
52
+ """Set the current context logger. Returns token for reset."""
53
+ return _current_logger.set(logger)
54
+
55
+
56
+ def reset_logger(token: Token) -> None:
57
+ """Reset logger to previous state using token."""
58
+ _current_logger.reset(token)
59
 
60
 
61
  def flatten(lst: Iterable[Any]) -> List[Any]: