- update to 0.0.12:

* Pin `ruff` version and prep for v0.0.12 release
- update to 0.0.11:
  * Use `tb_lineno` to point to correct line in traceback
  * Fix deprecation warnings in Python 3.12
  * Include tests in sdist
  * `ruff` now requires the `check` specification
- drop ruff05.patch,  fix-traceback.patch,
  support-python-312.patch, test-ruff-0.1.0.patch: upstream

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:pytest/python-pytest-examples?expand=0&rev=13
This commit is contained in:
2024-07-03 16:14:15 +00:00
committed by Git OBS Bridge
parent 84494923c4
commit 0f17fe3296
8 changed files with 20 additions and 339 deletions

View File

@@ -1,223 +0,0 @@
From 3fe64dc479d318fa58fd1952bd37ce9db2beb23f Mon Sep 17 00:00:00 2001
From: Alex Hall <alex.mojaki@gmail.com>
Date: Sun, 17 Sep 2023 17:35:21 +0200
Subject: [PATCH 1/4] Use tb_lineno to point to correct line in traceback
---
pytest_examples/traceback.py | 14 +++++++-------
tests/test_run_examples.py | 9 ++++++---
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/pytest_examples/traceback.py b/pytest_examples/traceback.py
index 7dedfa1..591f995 100644
--- a/pytest_examples/traceback.py
+++ b/pytest_examples/traceback.py
@@ -1,7 +1,6 @@
from __future__ import annotations as _annotations
import sys
-import traceback
from types import CodeType, FrameType, TracebackType
from typing import TYPE_CHECKING
@@ -21,16 +20,17 @@ def create_example_traceback(exc: Exception, module_path: str, example: CodeExam
# f_code.co_posonlyargcount was added in 3.8
return None
frames = []
- for frame, _ in traceback.walk_tb(exc.__traceback__):
+ tb = exc.__traceback__
+ while tb is not None:
+ frame = tb.tb_frame
if frame.f_code.co_filename == module_path:
- frames.append(create_custom_frame(frame, example))
+ frames.append((create_custom_frame(frame, example), tb.tb_lasti, tb.tb_lineno + example.start_line))
+ tb = tb.tb_next
frames.reverse()
new_tb = None
- for altered_frame in frames:
- new_tb = TracebackType(
- tb_next=new_tb, tb_frame=altered_frame, tb_lasti=altered_frame.f_lasti, tb_lineno=altered_frame.f_lineno
- )
+ for altered_frame, lasti, lineno in frames:
+ new_tb = TracebackType(tb_next=new_tb, tb_frame=altered_frame, tb_lasti=lasti, tb_lineno=lineno)
return new_tb
diff --git a/tests/test_run_examples.py b/tests/test_run_examples.py
index 6943329..9f077d7 100644
--- a/tests/test_run_examples.py
+++ b/tests/test_run_examples.py
@@ -224,7 +224,10 @@ def test_run_directly(tmp_path, eval_example):
x = 4
def div(y):
- return x / y
+ try:
+ return x / y
+ finally:
+ str(y)
div(2)
div(0)"""
@@ -244,10 +247,10 @@ def div(y):
# debug(exc_info.traceback)
assert exc_info.traceback[-1].frame.code.path == md_file
- assert exc_info.traceback[-1].lineno == 6
+ assert exc_info.traceback[-1].lineno == 7
assert exc_info.traceback[-2].frame.code.path == md_file
- assert exc_info.traceback[-2].lineno == 9
+ assert exc_info.traceback[-2].lineno == 12
def test_print_sub(pytester: pytest.Pytester):
From e07b1538df6eb662c2b92b9da9b768a2cc1f3ed3 Mon Sep 17 00:00:00 2001
From: Alex Hall <alex.mojaki@gmail.com>
Date: Sun, 17 Sep 2023 19:08:32 +0200
Subject: [PATCH 2/4] Keep the original co_firstlineno
---
pytest_examples/traceback.py | 10 ++++------
tests/test_run_examples.py | 2 +-
2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/pytest_examples/traceback.py b/pytest_examples/traceback.py
index 591f995..9e797ed 100644
--- a/pytest_examples/traceback.py
+++ b/pytest_examples/traceback.py
@@ -36,12 +36,10 @@ def create_example_traceback(exc: Exception, module_path: str, example: CodeExam
def create_custom_frame(frame: FrameType, example: CodeExample) -> FrameType:
"""
- Create a new frame that mostly matches `frame` but with a filename from `example` and line number
- altered to match the example.
+ Create a new frame that mostly matches `frame` but with a filename from `example`.
Taken mostly from https://naleraphael.github.io/blog/posts/devlog_create_a_builtin_frame_object/
- With the CodeType creation inspired by https://stackoverflow.com/a/16123158/949890. However, we use
- `frame.f_lineno` for the line number instead of `f_code.co_firstlineno` as that seems to work.
+ With the CodeType creation inspired by https://stackoverflow.com/a/16123158/949890.
"""
import ctypes
@@ -77,7 +75,7 @@ def create_custom_frame(frame: FrameType, example: CodeExample) -> FrameType:
str(example.path),
f_code.co_name,
f_code.co_qualname,
- frame.f_lineno + example.start_line,
+ f_code.co_firstlineno,
f_code.co_lnotab,
f_code.co_exceptiontable,
)
@@ -95,7 +93,7 @@ def create_custom_frame(frame: FrameType, example: CodeExample) -> FrameType:
f_code.co_varnames,
str(example.path),
f_code.co_name,
- frame.f_lineno + example.start_line,
+ f_code.co_firstlineno,
f_code.co_lnotab,
)
diff --git a/tests/test_run_examples.py b/tests/test_run_examples.py
index 9f077d7..9bf3dcc 100644
--- a/tests/test_run_examples.py
+++ b/tests/test_run_examples.py
@@ -54,7 +54,7 @@ def test_find_run_examples(example: CodeExample, eval_example: EvalExample):
# assert 'my_file_9_13.py:12: AssertionError' in '\n'.join(result.outlines)
assert result.outlines[-8:-3] == [
- '',
+ ' b = 2',
'> assert a + b == 4',
'E AssertionError',
'',
From 089cf8a4f0a91a5b85108205d0f58cf603af3ac5 Mon Sep 17 00:00:00 2001
From: Alex Hall <alex.mojaki@gmail.com>
Date: Wed, 20 Sep 2023 15:46:34 +0200
Subject: [PATCH 3/4] Adjust co_firstlineno so that the pytest includes the
correct context.
---
pytest_examples/traceback.py | 8 +++++---
tests/test_run_examples.py | 6 ++++--
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/pytest_examples/traceback.py b/pytest_examples/traceback.py
index 9e797ed..94ede45 100644
--- a/pytest_examples/traceback.py
+++ b/pytest_examples/traceback.py
@@ -36,7 +36,9 @@ def create_example_traceback(exc: Exception, module_path: str, example: CodeExam
def create_custom_frame(frame: FrameType, example: CodeExample) -> FrameType:
"""
- Create a new frame that mostly matches `frame` but with a filename from `example`.
+ Create a new frame that mostly matches `frame` but with a code object that has
+ a filename from `example` and adjusted an adjusted first line number
+ so that pytest shows the correct code context in the traceback.
Taken mostly from https://naleraphael.github.io/blog/posts/devlog_create_a_builtin_frame_object/
With the CodeType creation inspired by https://stackoverflow.com/a/16123158/949890.
@@ -75,7 +77,7 @@ def create_custom_frame(frame: FrameType, example: CodeExample) -> FrameType:
str(example.path),
f_code.co_name,
f_code.co_qualname,
- f_code.co_firstlineno,
+ f_code.co_firstlineno + example.start_line,
f_code.co_lnotab,
f_code.co_exceptiontable,
)
@@ -93,7 +95,7 @@ def create_custom_frame(frame: FrameType, example: CodeExample) -> FrameType:
f_code.co_varnames,
str(example.path),
f_code.co_name,
- f_code.co_firstlineno,
+ f_code.co_firstlineno + example.start_line,
f_code.co_lnotab,
)
diff --git a/tests/test_run_examples.py b/tests/test_run_examples.py
index 9bf3dcc..ad878ea 100644
--- a/tests/test_run_examples.py
+++ b/tests/test_run_examples.py
@@ -52,8 +52,10 @@ def test_find_run_examples(example: CodeExample, eval_example: EvalExample):
result = pytester.runpytest('-p', 'no:pretty', '-v')
result.assert_outcomes(passed=1, failed=1)
- # assert 'my_file_9_13.py:12: AssertionError' in '\n'.join(result.outlines)
- assert result.outlines[-8:-3] == [
+ assert result.outlines[-11:-3] == [
+ '_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ',
+ '',
+ ' a = 1',
' b = 2',
'> assert a + b == 4',
'E AssertionError',
From e07ec3de414c00afa11a94bd136b33f77608c767 Mon Sep 17 00:00:00 2001
From: Alex Hall <alex.mojaki@gmail.com>
Date: Sat, 23 Sep 2023 12:08:07 +0200
Subject: [PATCH 4/4] Loosen testing result.outlines
---
tests/test_run_examples.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/test_run_examples.py b/tests/test_run_examples.py
index ad878ea..1dcfba1 100644
--- a/tests/test_run_examples.py
+++ b/tests/test_run_examples.py
@@ -52,8 +52,8 @@ def test_find_run_examples(example: CodeExample, eval_example: EvalExample):
result = pytester.runpytest('-p', 'no:pretty', '-v')
result.assert_outcomes(passed=1, failed=1)
- assert result.outlines[-11:-3] == [
- '_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ',
+ assert result.outlines[-11].startswith('_ _ _ _ ')
+ assert result.outlines[-10:-3] == [
'',
' a = 1',
' b = 2',

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:dce3ca92ef6ac225387e9e38cac45cf81776f01a7b69fbacff4012b62984611f
size 22058

BIN
pytest_examples-0.0.12.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -1,3 +1,17 @@
-------------------------------------------------------------------
Wed Jul 3 16:13:14 UTC 2024 - Dirk Müller <dmueller@suse.com>
- update to 0.0.12:
* Pin `ruff` version and prep for v0.0.12 release
- update to 0.0.11:
* Use `tb_lineno` to point to correct line in traceback
* Fix deprecation warnings in Python 3.12
* Include tests in sdist
* `ruff` now requires the `check` specification
- drop ruff05.patch, fix-traceback.patch,
support-python-312.patch, test-ruff-0.1.0.patch: upstream
------------------------------------------------------------------- -------------------------------------------------------------------
Mon Jul 1 18:03:28 UTC 2024 - Dirk Müller <dmueller@suse.com> Mon Jul 1 18:03:28 UTC 2024 - Dirk Müller <dmueller@suse.com>

View File

@@ -18,20 +18,13 @@
%{?sle15_python_module_pythons} %{?sle15_python_module_pythons}
Name: python-pytest-examples Name: python-pytest-examples
Version: 0.0.10 Version: 0.0.12
Release: 0 Release: 0
Summary: Pytest plugin for testing examples in docstrings and markdown files Summary: Pytest plugin for testing examples in docstrings and markdown files
License: MIT License: MIT
URL: https://github.com/pydantic/pytest-examples URL: https://github.com/pydantic/pytest-examples
# sdist without tests # sdist without tests
Source: https://github.com/pydantic/pytest-examples/archive/refs/tags/v%{version}.tar.gz#/pytest-examples-%{version}.tar.gz Source: https://files.pythonhosted.org/packages/source/p/pytest-examples/pytest_examples-%{version}.tar.gz
# PATCH-FIX-UPSTREAM gh#pydantic/pytest-examples#17
Patch0: fix-traceback.patch
# PATCH-FIX-UPSTREAM test-ruff-0.1.0.patch - fix tests for ruff-0.1.0
Patch1: test-ruff-0.1.0.patch
# PATCH-FIX-UPSTREAM gh#pydantic/pytest-examples#22
Patch2: support-python-312.patch
Patch3: ruff05.patch
BuildRequires: %{python_module black} BuildRequires: %{python_module black}
BuildRequires: %{python_module hatchling} BuildRequires: %{python_module hatchling}
BuildRequires: %{python_module pip} BuildRequires: %{python_module pip}
@@ -56,7 +49,7 @@ Pytest plugin for testing Python code examples in docstrings and markdown files.
It can also update code examples in place to format them and insert or update print statements. It can also update code examples in place to format them and insert or update print statements.
%prep %prep
%autosetup -p1 -n pytest-examples-%{version} %autosetup -p1 -n pytest_examples-%{version}
%build %build
%pyproject_wheel %pyproject_wheel

View File

@@ -1,13 +0,0 @@
Index: pytest-examples-0.0.10/pytest_examples/lint.py
===================================================================
--- pytest-examples-0.0.10.orig/pytest_examples/lint.py
+++ pytest-examples-0.0.10/pytest_examples/lint.py
@@ -47,7 +47,7 @@ def ruff_check(
*,
extra_ruff_args: tuple[str, ...] = (),
) -> str:
- args = 'ruff', '-', *config.ruff_config(), *extra_ruff_args
+ args = 'ruff', 'check', '-', *config.ruff_config(), *extra_ruff_args
p = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True)
stdout, stderr = p.communicate(example.source, timeout=2)

View File

@@ -1,68 +0,0 @@
From 35f93d668c8a4a337d1c9d477fa5732fa439b1b3 Mon Sep 17 00:00:00 2001
From: Alex Hall <alex.mojaki@gmail.com>
Date: Wed, 27 Sep 2023 17:47:51 +0200
Subject: [PATCH 1/2] Fix deprecation warnings in Python 3.12
---
.github/workflows/ci.yml | 2 +-
pytest_examples/traceback.py | 21 ++++++++++++++++++++-
requirements/testing.txt | 6 ++----
3 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/pytest_examples/traceback.py b/pytest_examples/traceback.py
index 94ede45..41880fe 100644
--- a/pytest_examples/traceback.py
+++ b/pytest_examples/traceback.py
@@ -62,7 +62,26 @@ def create_custom_frame(frame: FrameType, example: CodeExample) -> FrameType:
ctypes.pythonapi.PyThreadState_Get.restype = P_MEM_TYPE
f_code = frame.f_code
- if sys.version_info >= (3, 11):
+ if sys.version_info >= (3, 12):
+ code = CodeType(
+ f_code.co_argcount,
+ f_code.co_posonlyargcount,
+ f_code.co_kwonlyargcount,
+ f_code.co_nlocals,
+ f_code.co_stacksize,
+ f_code.co_flags,
+ f_code.co_code,
+ f_code.co_consts,
+ f_code.co_names,
+ f_code.co_varnames,
+ str(example.path),
+ f_code.co_name,
+ f_code.co_qualname,
+ f_code.co_firstlineno + example.start_line,
+ f_code.co_linetable,
+ f_code.co_exceptiontable,
+ )
+ elif sys.version_info >= (3, 11):
code = CodeType(
f_code.co_argcount,
f_code.co_posonlyargcount,
diff --git a/requirements/testing.txt b/requirements/testing.txt
index 805175d..4b42722 100644
--- a/requirements/testing.txt
+++ b/requirements/testing.txt
@@ -2,10 +2,8 @@
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
-# pip-compile --output-file=requirements/testing.txt --resolver=backtracking requirements/testing.in
+# pip-compile --output-file=requirements/testing.txt requirements/testing.in
#
-attrs==22.2.0
- # via pytest
coverage==7.2.2
# via -r requirements/testing.in
exceptiongroup==1.1.1
@@ -22,7 +20,7 @@ pluggy==1.0.0
# via pytest
pygments==2.14.0
# via rich
-pytest==7.2.2
+pytest==7.4.2
# via pytest-pretty
pytest-pretty==1.1.1
# via -r requirements/testing.in

View File

@@ -1,22 +0,0 @@
From cade1306918e9984d0d45d5e274d01b734b5fd3a Mon Sep 17 00:00:00 2001
From: Anton Zhukharev <ancieg@altlinux.org>
Date: Wed, 18 Oct 2023 09:38:34 +0300
Subject: [PATCH] update tests for ruff>=0.1.0
---
tests/test_run_examples.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/test_run_examples.py b/tests/test_run_examples.py
index 1dcfba1..4330d71 100644
--- a/tests/test_run_examples.py
+++ b/tests/test_run_examples.py
@@ -114,7 +114,7 @@ def test_find_run_examples(example: CodeExample, eval_example: EvalExample):
' my_file.md:2:8: F401 [*] `sys` imported but unused\n'
' my_file.md:3:7: F821 Undefined name `missing`\n'
' Found 2 errors.\n'
- ' [*] 1 potentially fixable with the --fix option.\n'
+ ' [*] 1 fixable with the `--fix` option.\n'
'=== short test summary info ===\n'
) in output