forked from pool/python-loguru
- Update to 0.6.0
* Remove internal use of pickle.loads() considered as a security
vulnerability referenced as CVE-2022-0329 (#563).
* Modify coroutine sink to make it discard log messages when
loop=None and no event loop is running (due to internally using
asyncio.get_running_loop() in place of
asyncio.get_event_loop()).
* Remove the possibility to add a coroutine sink with
enqueue=True if loop=None and no event loop is running.
* Change default encoding of file sink to be utf8 instead of
locale.getpreferredencoding() (#339).
* Prevent non-ascii characters to be escaped while logging JSON
message with serialize=True (#575, thanks @ponponon).
* Fix flake8 errors and improve code readability (#353, thanks
@AndrewYakimets).
- Drop merged patches:
* loguru-exception-formatting-py39.patch
* pytest-6.2-excepthooks.patch
- Add loguru-fix-repr-tests.patch
* Fix "repr()" tests failing on Python 3.11 and Python 3.10.6
* https://github.com/Delgan/loguru/commit/4fe21f66
OBS-URL: https://build.opensuse.org/request/show/993287
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-loguru?expand=0&rev=15
141 lines
4.1 KiB
Diff
141 lines
4.1 KiB
Diff
From 4fe21f66991abeb1905e24c3bc3c634543d959a2 Mon Sep 17 00:00:00 2001
|
|
From: Delgan <delgan.py@gmail.com>
|
|
Date: Sun, 17 Jul 2022 09:18:56 +0200
|
|
Subject: [PATCH] Fix "repr()" tests failing on Python 3.11
|
|
|
|
---
|
|
tests/test_repr.py | 87 +++++++++++++++++++---------------------------
|
|
1 file changed, 36 insertions(+), 51 deletions(-)
|
|
|
|
diff --git a/tests/test_repr.py b/tests/test_repr.py
|
|
index ba48839..76f413d 100644
|
|
--- a/tests/test_repr.py
|
|
+++ b/tests/test_repr.py
|
|
@@ -1,34 +1,11 @@
|
|
-import builtins
|
|
import logging
|
|
import pathlib
|
|
import re
|
|
import sys
|
|
-from inspect import iscoroutinefunction
|
|
|
|
-import loguru
|
|
from loguru import logger
|
|
|
|
|
|
-class Wrapper:
|
|
- def __init__(self, wrapped, *, repr, name):
|
|
- self._wrapped = wrapped
|
|
- self._repr = repr
|
|
- self._name = name
|
|
- self.raised = False
|
|
-
|
|
- def __repr__(self):
|
|
- return self._repr
|
|
-
|
|
- def __getattr__(self, name):
|
|
- if name == "__name__":
|
|
- if self._name is None:
|
|
- self.raised = True
|
|
- raise AttributeError
|
|
- else:
|
|
- return self._name
|
|
- return getattr(self._wrapped, name)
|
|
-
|
|
-
|
|
def test_no_handler():
|
|
assert repr(logger) == "<loguru.logger handlers=[]>"
|
|
|
|
@@ -112,22 +89,30 @@ def my_function(message):
|
|
assert repr(logger) == "<loguru.logger handlers=[(id=0, level=10, sink=my_function)]>"
|
|
|
|
|
|
-def test_function_without_name(monkeypatch):
|
|
- function = Wrapper(lambda _: None, repr="<FunctionWithout>", name=None)
|
|
- monkeypatch.setattr(builtins, "callable", lambda x: x is function or callable(x))
|
|
+def test_callable_without_name():
|
|
+ class Function:
|
|
+ def __call__(self):
|
|
+ pass
|
|
+
|
|
+ def __repr__(self):
|
|
+ return "<FunctionWithout>"
|
|
|
|
- logger.add(function)
|
|
+ logger.add(Function())
|
|
assert repr(logger) == "<loguru.logger handlers=[(id=0, level=10, sink=<FunctionWithout>)]>"
|
|
- assert function.raised
|
|
|
|
|
|
-def test_function_with_empty_name(monkeypatch):
|
|
- function = Wrapper(lambda _: None, repr="<FunctionEmpty>", name="")
|
|
- monkeypatch.setattr(builtins, "callable", lambda x: x is function or callable(x))
|
|
+def test_callable_with_empty_name():
|
|
+ class Function:
|
|
+ __name__ = ""
|
|
+
|
|
+ def __call__(self):
|
|
+ pass
|
|
+
|
|
+ def __repr__(self):
|
|
+ return "<FunctionEmpty>"
|
|
|
|
- logger.add(function)
|
|
+ logger.add(Function())
|
|
assert repr(logger) == "<loguru.logger handlers=[(id=0, level=10, sink=<FunctionEmpty>)]>"
|
|
- assert not function.raised
|
|
|
|
|
|
def test_coroutine_function():
|
|
@@ -138,32 +123,32 @@ async def my_async_function(message):
|
|
assert repr(logger) == "<loguru.logger handlers=[(id=0, level=10, sink=my_async_function)]>"
|
|
|
|
|
|
-def test_coroutine_function_without_name(monkeypatch):
|
|
- async_function = Wrapper(lambda _: None, repr="<AsyncFunctionWithout>", name=None)
|
|
- monkeypatch.setattr(
|
|
- loguru._logger,
|
|
- "iscoroutinefunction",
|
|
- lambda x: x is async_function or iscoroutinefunction(x),
|
|
- )
|
|
+def test_coroutine_callable_without_name():
|
|
+ class CoroutineFunction:
|
|
+ async def __call__(self):
|
|
+ pass
|
|
+
|
|
+ def __repr__(self):
|
|
+ return "<AsyncFunctionWithout>"
|
|
|
|
- logger.add(async_function)
|
|
+ logger.add(CoroutineFunction())
|
|
assert (
|
|
repr(logger) == "<loguru.logger handlers=[(id=0, level=10, sink=<AsyncFunctionWithout>)]>"
|
|
)
|
|
- assert async_function.raised
|
|
|
|
|
|
-def test_coroutine_function_with_empty_name(monkeypatch):
|
|
- async_function = Wrapper(lambda _: None, repr="<AsyncFunctionEmpty>", name="")
|
|
- monkeypatch.setattr(
|
|
- loguru._logger,
|
|
- "iscoroutinefunction",
|
|
- lambda x: x is async_function or iscoroutinefunction(x),
|
|
- )
|
|
+def test_coroutine_function_with_empty_name():
|
|
+ class CoroutineFunction:
|
|
+ __name__ = ""
|
|
+
|
|
+ def __call__(self):
|
|
+ pass
|
|
+
|
|
+ def __repr__(self):
|
|
+ return "<AsyncFunctionEmpty>"
|
|
|
|
- logger.add(async_function)
|
|
+ logger.add(CoroutineFunction())
|
|
assert repr(logger) == "<loguru.logger handlers=[(id=0, level=10, sink=<AsyncFunctionEmpty>)]>"
|
|
- assert not async_function.raised
|
|
|
|
|
|
def test_standard_handler():
|