File py313.patch of Package python-loguru

From a7a2d72d9e3495ddec9dde2852fa7a932b76d0c4 Mon Sep 17 00:00:00 2001
From: Dave Hall <dave@etianen.com>
Date: Sun, 11 Feb 2024 23:34:27 +0000
Subject: [PATCH 3/5] Fixing `test_pickling` tests for Python 3.13.

The `Handler.lock` is substituted for a `nullcontext`, keeping Python 3.13 happy. A no-op stub for `Handler.release` is added, keeping all other Python versions happy.
---
 tests/test_pickling.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Index: loguru-0.7.2/tests/test_pickling.py
===================================================================
--- loguru-0.7.2.orig/tests/test_pickling.py
+++ loguru-0.7.2/tests/test_pickling.py
@@ -39,11 +39,18 @@ class StreamHandler:
         self.stopped = True
 
 
+class MockLock:
+    def __enter__(self):
+        pass
+
+    def __exit__(self, *excinfo):
+        pass
+
+
 class StandardHandler(logging.Handler):
     def __init__(self, level):
         super().__init__(level)
         self.written = ""
-        self.lock = None
 
     def emit(self, record):
         self.written += record.getMessage()
@@ -51,8 +58,11 @@ class StandardHandler(logging.Handler):
     def acquire(self):
         pass
 
+    def release(self):
+        pass
+
     def createLock(self):  # noqa: N802
-        return None
+        self.lock = MockLock()
 
 
 def format_function(record):
Index: loguru-0.7.2/loguru/_better_exceptions.py
===================================================================
--- loguru-0.7.2.orig/loguru/_better_exceptions.py
+++ loguru-0.7.2/loguru/_better_exceptions.py
@@ -497,7 +497,7 @@ class ExceptionFormatter:
             else:
                 yield from self._indent(introduction + "\n", group_nesting)
 
-        frames_lines = traceback.format_list(frames) + exception_only
+        frames_lines = self._format_list(frames) + exception_only
         if self._colorize or self._backtrace or self._diagnose:
             frames_lines = self._format_locations(frames_lines, has_introduction=has_introduction)
 
@@ -524,5 +524,39 @@ class ExceptionFormatter:
             if not is_exception_group(exc) or group_nesting == 10:
                 yield from self._indent("-" * 35, group_nesting + 1, prefix="+-")
 
+    def _format_list(self, frames):
+        result = []
+        last_file = None
+        last_line = None
+        last_name = None
+        count = 0
+        for filename, lineno, name, line in frames:
+            if (
+                last_file is not None
+                and last_file == filename
+                and last_line is not None
+                and last_line == lineno
+                and last_name is not None
+                and last_name == name
+            ):
+                count += 1
+            else:
+                if count > 3:
+                    result.append(f"  [Previous line repeated {count-3} more times]\n")
+                last_file = filename
+                last_line = lineno
+                last_name = name
+                count = 0
+            if count >= 3:
+                continue
+            row = []
+            row.append('  File "{}", line {}, in {}\n'.format(filename, lineno, name))
+            if line:
+                row.append("    {}\n".format(line.strip()))
+            result.append("".join(row))
+        if count > 3:
+            result.append(f"  [Previous line repeated {count-3} more times]\n")
+        return result
+
     def format_exception(self, type_, value, tb, *, from_decorator=False):
         yield from self._format_exception(value, tb, is_first=True, from_decorator=from_decorator)
openSUSE Build Service is sponsored by