- 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>

View File

@@ -18,20 +18,13 @@
%{?sle15_python_module_pythons}
Name: python-pytest-examples
Version: 0.0.10
Version: 0.0.12
Release: 0
Summary: Pytest plugin for testing examples in docstrings and markdown files
License: MIT
URL: https://github.com/pydantic/pytest-examples
# sdist without tests
Source: https://github.com/pydantic/pytest-examples/archive/refs/tags/v%{version}.tar.gz#/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
Source: https://files.pythonhosted.org/packages/source/p/pytest-examples/pytest_examples-%{version}.tar.gz
BuildRequires: %{python_module black}
BuildRequires: %{python_module hatchling}
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.
%prep
%autosetup -p1 -n pytest-examples-%{version}
%autosetup -p1 -n pytest_examples-%{version}
%build
%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