diff --git a/more-aggressive-location-stripping.patch b/more-aggressive-location-stripping.patch
new file mode 100644
index 0000000..e260f95
--- /dev/null
+++ b/more-aggressive-location-stripping.patch
@@ -0,0 +1,44 @@
+From 66e14cdd101e4214cca6acca8f48b9abe4f75729 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ionel=20Cristian=20M=C4=83rie=C8=99?= <contact@ionelmc.ro>
+Date: Fri, 15 Dec 2023 16:52:07 +0200
+Subject: [PATCH] More aggressive location stripping. Ref #74.
+
+---
+ tests/test_pickle_exception.py | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+Index: tblib-3.0.0/tests/test_pickle_exception.py
+===================================================================
+--- tblib-3.0.0.orig/tests/test_pickle_exception.py
++++ tblib-3.0.0/tests/test_pickle_exception.py
+@@ -29,6 +29,10 @@ class CustomError(Exception):
+     pass
+ 
+ 
++def strip_locations(tb_text):
++    return tb_text.replace('    ~~^~~\n', '').replace('    ^^^^^^^^^^^^^^^^^\n', '')
++
++
+ @pytest.mark.parametrize('protocol', [None, *list(range(1, pickle.HIGHEST_PROTOCOL + 1))])
+ @pytest.mark.parametrize('how', ['global', 'instance', 'class'])
+ def test_install(clear_dispatch_table, how, protocol):
+@@ -58,8 +62,8 @@ def test_install(clear_dispatch_table, h
+     else:
+         raise AssertionError
+ 
+-    expected_format_exception = ''.join(format_exception(type(exc), exc, exc.__traceback__))
+-    print(expected_format_exception)
++    expected_format_exception = strip_locations(''.join(format_exception(type(exc), exc, exc.__traceback__)))
++
+     # Populate Exception.__dict__, which is used in some cases
+     exc.x = 1
+     exc.__cause__.x = 2
+@@ -88,7 +92,7 @@ def test_install(clear_dispatch_table, h
+     if has_python311:
+         assert exc.__notes__ == ['note 1', 'note 2']
+ 
+-    assert expected_format_exception == ''.join(format_exception(type(exc), exc, exc.__traceback__))
++    assert expected_format_exception == strip_locations(''.join(format_exception(type(exc), exc, exc.__traceback__)))
+ 
+ 
+ @tblib.pickling_support.install
diff --git a/python-tblib.changes b/python-tblib.changes
index c5718d6..32e38da 100644
--- a/python-tblib.changes
+++ b/python-tblib.changes
@@ -1,3 +1,16 @@
+-------------------------------------------------------------------
+Fri May 17 09:22:14 UTC 2024 - Markéta Machová <mmachova@suse.com>
+
+- Update to 3.0.0
+  * Removed support for legacy Pythons (2.7 up to 3.7) and added Pythons 
+    3.11 and 3.12 in the test grid.
+  * Added support for __context__, __suppress_context__ and __notes__.
+  * Added the get_locals argument to tblib.pickling_support.install(), 
+    tblib.Traceback and tblib.Frame.
+- Add vendore-reraise-from-six.patch to get rid of six
+- Add more-aggressive-location-stripping.patch to fix test failure
+- Standardize multibuild
+
 -------------------------------------------------------------------
 Fri Jun  9 11:45:42 UTC 2023 - ecsos <ecsos@opensuse.org>
 
diff --git a/python-tblib.spec b/python-tblib.spec
index c184b76..9ce2610 100644
--- a/python-tblib.spec
+++ b/python-tblib.spec
@@ -1,7 +1,7 @@
 #
-# spec file for package python
+# spec file for package python-tblib
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,34 +18,33 @@
 
 %global flavor @BUILD_FLAVOR@%{nil}
 %if "%{flavor}" == "test"
+%define psuffix -%{flavor}
 %bcond_without  test
-%bcond_without  test_twisted
-%define psuffix -test
 %else
-%bcond_without  test
-%bcond_with     test_twisted
+%define psuffix %{nil}
+%bcond_with     test
 %endif
 %{?sle15_python_module_pythons}
 Name:           python-tblib%{?psuffix}
-Version:        1.7.0
+Version:        3.0.0
 Release:        0
 Summary:        Traceback serialization library
 License:        BSD-2-Clause
 Group:          Development/Languages/Python
 URL:            https://github.com/ionelmc/python-tblib
 Source:         https://files.pythonhosted.org/packages/source/t/tblib/tblib-%{version}.tar.gz
+# PATCH-FIX-UPSTREAM https://github.com/ionelmc/python-tblib/pull/77 vendore reraise() from six
+Patch:          vendore-reraise-from-six.patch
+# PATCH-FIX-UPSTREAM https://github.com/ionelmc/python-tblib/issues/74 More aggressive location stripping. Ref #74.
+Patch:          more-aggressive-location-stripping.patch
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-%if %{with test_twisted}
+%if %{with test}
 BuildRequires:  %{python_module Twisted}
+BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module tblib == %{version}}
 %endif
-%if %{with test}
-BuildRequires:  %{python_module pytest}
-BuildRequires:  %{python_module six}
-%endif
-Requires:       python-six
 BuildArch:      noarch
 
 %python_subpackages
@@ -70,13 +69,13 @@ are solely responsible for security problems should you decide to use
 the pickle support.
 
 %prep
-%setup -q -n tblib-%{version}
+%autosetup -p1 -n tblib-%{version}
 
 %build
 %python_build
 
 %install
-%if "%{flavor}" != "test"
+%if !%{with test}
 %python_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 %endif
@@ -86,11 +85,12 @@ the pickle support.
 %pytest
 %endif
 
-%if "%{flavor}" != "test"
+%if !%{with test}
 %files %{python_files}
 %doc AUTHORS.rst CHANGELOG.rst README.rst
 %license LICENSE
-%{python_sitelib}/*
+%{python_sitelib}/tblib
+%{python_sitelib}/tblib-%{version}*-info
 %endif
 
 %changelog
diff --git a/tblib-1.7.0.tar.gz b/tblib-1.7.0.tar.gz
deleted file mode 100644
index 27a4c31..0000000
--- a/tblib-1.7.0.tar.gz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:059bd77306ea7b419d4f76016aef6d7027cc8a0785579b5aad198803435f882c
-size 33074
diff --git a/tblib-3.0.0.tar.gz b/tblib-3.0.0.tar.gz
new file mode 100644
index 0000000..a155a91
--- /dev/null
+++ b/tblib-3.0.0.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93622790a0a29e04f0346458face1e144dc4d32f493714c6c3dff82a4adb77e6
+size 30616
diff --git a/vendore-reraise-from-six.patch b/vendore-reraise-from-six.patch
new file mode 100644
index 0000000..7a7722f
--- /dev/null
+++ b/vendore-reraise-from-six.patch
@@ -0,0 +1,63 @@
+From 9f6f864f7de6ce6640bab6d962f00b956da75361 Mon Sep 17 00:00:00 2001
+From: Alexandre Detiste <alexandre.detiste@gmail.com>
+Date: Wed, 1 May 2024 13:43:53 +0200
+Subject: [PATCH] vendore reraise() from six
+
+---
+ ci/requirements.txt     |  1 -
+ setup.py                |  2 +-
+ src/tblib/decorators.py | 14 ++++++++++++--
+ 3 files changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/ci/requirements.txt b/ci/requirements.txt
+index a1708f4..b4f1852 100644
+--- a/ci/requirements.txt
++++ b/ci/requirements.txt
+@@ -1,6 +1,5 @@
+ virtualenv>=16.6.0
+ pip>=19.1.1
+ setuptools>=18.0.1
+-six>=1.14.0
+ tox
+ twine
+diff --git a/setup.py b/setup.py
+index c5364a1..c09d4c3 100755
+--- a/setup.py
++++ b/setup.py
+@@ -64,7 +64,7 @@ def read(*names, **kwargs):
+     ],
+     python_requires='>=3.8',
+     install_requires=[
+-        # eg: "aspectlib==1.1.1", "six>=1.7",
++        # eg: "aspectlib==1.1.1",
+     ],
+     extras_require={
+         # eg:
+diff --git a/src/tblib/decorators.py b/src/tblib/decorators.py
+index 38d0675..a1ace45 100644
+--- a/src/tblib/decorators.py
++++ b/src/tblib/decorators.py
+@@ -1,11 +1,21 @@
+ import sys
+ from functools import wraps
+ 
+-from six import reraise
+-
+ from . import Traceback
+ 
+ 
++def reraise(tp, value, tb=None):
++    try:
++        if value is None:
++            value = tp()
++        if value.__traceback__ is not tb:
++            raise value.with_traceback(tb)
++        raise value
++    finally:
++        value = None
++        tb = None
++
++
+ class Error:
+     def __init__(self, exc_type, exc_value, traceback):
+         self.exc_type = exc_type