Hello community,
here is the log from the commit of package python-pytest-django for
openSUSE:Factory checked in at 2019-11-25 11:23:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-django (Old)
and /work/SRC/openSUSE:Factory/.python-pytest-django.new.26869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pytest-django"
Mon Nov 25 11:23:45 2019 rev:9 rq:750272 version:3.7.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-pytest-django/python-pytest-django.changes
2019-11-03 11:39:22.634007607 +0100
+++
/work/SRC/openSUSE:Factory/.python-pytest-django.new.26869/python-pytest-django.changes
2019-11-25 11:23:46.858111345 +0100
@@ -1,0 +2,10 @@
+Fri Nov 15 10:49:15 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 3.7.0:
+ * Monkeypatch pytest to not use ``TestCase.debug`` with unittests, instead
+ of patching it into Django (#782).
+ * Work around pytest crashing due to ``pytest.fail`` being used from within
the
+ DB blocker, and pytest trying to display an object representation involving
+ DB access (#781). pytest-django uses a ``RuntimeError`` now instead.
+
+-------------------------------------------------------------------
Old:
----
pytest-django-3.6.0.tar.gz
New:
----
pytest-django-3.7.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pytest-django.spec ++++++
--- /var/tmp/diff_new_pack.WLxdHy/_old 2019-11-25 11:23:47.346111258 +0100
+++ /var/tmp/diff_new_pack.WLxdHy/_new 2019-11-25 11:23:47.350111257 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-pytest-django
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LLC.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-pytest-django
-Version: 3.6.0
+Version: 3.7.0
Release: 0
Summary: A Django plugin for py.test
License: BSD-3-Clause
++++++ pytest-django-3.6.0.tar.gz -> pytest-django-3.7.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/PKG-INFO
new/pytest-django-3.7.0/PKG-INFO
--- old/pytest-django-3.6.0/PKG-INFO 2019-10-17 03:07:59.000000000 +0200
+++ new/pytest-django-3.7.0/PKG-INFO 2019-11-09 07:16:53.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: pytest-django
-Version: 3.6.0
+Version: 3.7.0
Summary: A Django plugin for pytest.
Home-page: https://pytest-django.readthedocs.io/
Author: Andreas Pelme
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/docs/changelog.rst
new/pytest-django-3.7.0/docs/changelog.rst
--- old/pytest-django-3.6.0/docs/changelog.rst 2019-10-17 03:07:43.000000000
+0200
+++ new/pytest-django-3.7.0/docs/changelog.rst 2019-11-09 07:16:37.000000000
+0100
@@ -1,6 +1,20 @@
Changelog
=========
+3.7.0 (2019-11-09)
+------------------
+
+Bugfixes
+^^^^^^^^
+
+* Monkeypatch pytest to not use ``TestCase.debug`` with unittests, instead
+ of patching it into Django (#782).
+
+* Work around pytest crashing due to ``pytest.fail`` being used from within the
+ DB blocker, and pytest trying to display an object representation involving
+ DB access (#781). pytest-django uses a ``RuntimeError`` now instead.
+
+
3.6.0 (2019-10-17)
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-django-3.6.0/pytest_django/live_server_helper.py
new/pytest-django-3.7.0/pytest_django/live_server_helper.py
--- old/pytest-django-3.6.0/pytest_django/live_server_helper.py 2019-10-17
03:07:43.000000000 +0200
+++ new/pytest-django-3.7.0/pytest_django/live_server_helper.py 2019-11-09
07:16:37.000000000 +0100
@@ -1,6 +1,7 @@
-import sys
+import six
[email protected]_2_unicode_compatible
class LiveServer(object):
"""The liveserver fixture
@@ -70,21 +71,11 @@
def url(self):
return "http://%s:%s" % (self.thread.host, self.thread.port)
- if sys.version_info < (3, 0):
+ def __str__(self):
+ return self.url
- def __unicode__(self):
- return self.url
-
- def __add__(self, other):
- return unicode(self) + other # noqa: pyflakes on python3
-
- else:
-
- def __str__(self):
- return self.url
-
- def __add__(self, other):
- return str(self) + other
+ def __add__(self, other):
+ return "%s%s" % (self, other)
def __repr__(self):
return "<LiveServer listening at %s>" % self.url
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/pytest_django/plugin.py
new/pytest-django-3.7.0/pytest_django/plugin.py
--- old/pytest-django-3.6.0/pytest_django/plugin.py 2019-10-17
03:07:43.000000000 +0200
+++ new/pytest-django-3.7.0/pytest_django/plugin.py 2019-11-09
07:16:37.000000000 +0100
@@ -518,27 +518,24 @@
yield
return
- request.getfixturevalue("django_db_setup")
+ from _pytest.unittest import TestCaseFunction
- cls = request.node.cls
+ if "debug" in TestCaseFunction.runtest.__code__.co_names:
+ # Fix pytest (https://github.com/pytest-dev/pytest/issues/5991), only
+ # if "self._testcase.debug()" is being used (forward compatible).
+ from _pytest.monkeypatch import MonkeyPatch
+
+ def non_debugging_runtest(self):
+ self._testcase(result=self)
+
+ mp_debug = MonkeyPatch()
+ mp_debug.setattr("_pytest.unittest.TestCaseFunction.runtest",
non_debugging_runtest)
+ else:
+ mp_debug = None
- # Implement missing (as of 2.2) debug() wrapper/method for Django's
TestCase.
- # See pytest-dev/pytest-django#406.
- # Pending PR for Django: https://github.com/django/django/pull/7436.
- def _cleaning_debug(self):
- testMethod = getattr(self, self._testMethodName)
- skipped = getattr(self.__class__, "__unittest_skip__", False) or
getattr(
- testMethod, "__unittest_skip__", False
- )
-
- if not skipped:
- self._pre_setup()
- super(cls, self).debug()
- if not skipped:
- self._post_teardown()
+ request.getfixturevalue("django_db_setup")
- orig_debug = cls.debug
- cls.debug = _cleaning_debug
+ cls = request.node.cls
with django_db_blocker.unblock():
if _handle_unittest_methods:
@@ -553,7 +550,8 @@
else:
yield
- cls.debug = orig_debug
+ if mp_debug:
+ mp_debug.undo()
@pytest.fixture(scope="function", autouse=True)
@@ -774,7 +772,7 @@
def _blocking_wrapper(*args, **kwargs):
__tracebackhide__ = True
__tracebackhide__ # Silence pyflakes
- pytest.fail(
+ raise RuntimeError(
"Database access not allowed, "
'use the "django_db" mark, or the '
'"db" or "transactional_db" fixtures to enable it.'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/pytest_django.egg-info/PKG-INFO
new/pytest-django-3.7.0/pytest_django.egg-info/PKG-INFO
--- old/pytest-django-3.6.0/pytest_django.egg-info/PKG-INFO 2019-10-17
03:07:59.000000000 +0200
+++ new/pytest-django-3.7.0/pytest_django.egg-info/PKG-INFO 2019-11-09
07:16:53.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: pytest-django
-Version: 3.6.0
+Version: 3.7.0
Summary: A Django plugin for pytest.
Home-page: https://pytest-django.readthedocs.io/
Author: Andreas Pelme
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-django-3.6.0/pytest_django.egg-info/SOURCES.txt
new/pytest-django-3.7.0/pytest_django.egg-info/SOURCES.txt
--- old/pytest-django-3.6.0/pytest_django.egg-info/SOURCES.txt 2019-10-17
03:07:59.000000000 +0200
+++ new/pytest-django-3.7.0/pytest_django.egg-info/SOURCES.txt 2019-11-09
07:16:53.000000000 +0100
@@ -59,6 +59,7 @@
pytest_django_test/app/static/a_file.txt
tests/conftest.py
tests/test_database.py
+tests/test_db_access_in_repr.py
tests/test_db_setup.py
tests/test_django_configurations.py
tests/test_django_settings_module.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/pytest_django_test/db_helpers.py
new/pytest-django-3.7.0/pytest_django_test/db_helpers.py
--- old/pytest-django-3.6.0/pytest_django_test/db_helpers.py 2019-10-17
03:07:43.000000000 +0200
+++ new/pytest-django-3.7.0/pytest_django_test/db_helpers.py 2019-11-09
07:16:37.000000000 +0100
@@ -5,7 +5,7 @@
import pytest
from django.conf import settings
-from django.utils.encoding import force_text
+from django.utils.encoding import force_str
# Construct names for the "inner" database used in runpytest tests
@@ -66,14 +66,14 @@
if db_engine == "postgresql_psycopg2":
r = run_cmd("psql", "postgres", "-c", "DROP DATABASE %s" % name)
- assert "DROP DATABASE" in force_text(
+ assert "DROP DATABASE" in force_str(
r.std_out
- ) or "does not exist" in force_text(r.std_err)
+ ) or "does not exist" in force_str(r.std_err)
return
if db_engine == "mysql":
r = run_mysql("-e", "DROP DATABASE %s" % name)
- assert "database doesn't exist" in force_text(r.std_err) or
r.status_code == 0
+ assert "database doesn't exist" in force_str(r.std_err) or
r.status_code == 0
return
assert db_engine == "sqlite3", "%s cannot be tested properly!" % db_engine
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/tests/test_database.py
new/pytest-django-3.7.0/tests/test_database.py
--- old/pytest-django-3.6.0/tests/test_database.py 2019-10-17
03:07:43.000000000 +0200
+++ new/pytest-django-3.7.0/tests/test_database.py 2019-11-09
07:16:37.000000000 +0100
@@ -16,17 +16,17 @@
def test_noaccess():
- with pytest.raises(pytest.fail.Exception):
+ with pytest.raises(RuntimeError):
Item.objects.create(name="spam")
- with pytest.raises(pytest.fail.Exception):
+ with pytest.raises(RuntimeError):
Item.objects.count()
@pytest.fixture
def noaccess():
- with pytest.raises(pytest.fail.Exception):
+ with pytest.raises(RuntimeError):
Item.objects.create(name="spam")
- with pytest.raises(pytest.fail.Exception):
+ with pytest.raises(RuntimeError):
Item.objects.count()
@@ -254,7 +254,7 @@
"*test_db_access_2 FAILED*",
"*test_db_access_3 FAILED*",
"*ERROR at setup of TestCase_setupClass.test_db_access_1*",
- '*Failed: Database access not allowed, use the "django_db" mark, '
+ '*RuntimeError: Database access not allowed, use the "django_db"
mark, '
'or the "db" or "transactional_db" fixtures to enable it.',
]
)
@@ -274,7 +274,7 @@
result = django_testdir.runpytest_subprocess("-v")
result.stderr.fnmatch_lines(
[
- '*Failed: Database access not allowed, use the "django_db"
mark, '
+ '*RuntimeError: Database access not allowed, use the
"django_db" mark, '
'or the "db" or "transactional_db" fixtures to enable it.*'
]
)
@@ -290,7 +290,7 @@
result = django_testdir.runpytest_subprocess("-v")
result.stdout.fnmatch_lines(
[
- '*Failed: Database access not allowed, use the "django_db"
mark, '
+ '*RuntimeError: Database access not allowed, use the
"django_db" mark, '
'or the "db" or "transactional_db" fixtures to enable it.'
]
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/tests/test_db_access_in_repr.py
new/pytest-django-3.7.0/tests/test_db_access_in_repr.py
--- old/pytest-django-3.6.0/tests/test_db_access_in_repr.py 1970-01-01
01:00:00.000000000 +0100
+++ new/pytest-django-3.7.0/tests/test_db_access_in_repr.py 2019-11-09
07:16:37.000000000 +0100
@@ -0,0 +1,27 @@
+def test_db_access_with_repr_in_report(django_testdir):
+ django_testdir.create_test_module(
+ """
+ import pytest
+
+ from .app.models import Item
+
+ def test_via_db_blocker(django_db_setup, django_db_blocker):
+ with django_db_blocker.unblock():
+ Item.objects.get(name='This one is not there')
+
+ def test_via_db_fixture(db):
+ Item.objects.get(name='This one is not there')
+ """
+ )
+
+ result = django_testdir.runpytest_subprocess("--tb=auto")
+ result.stdout.fnmatch_lines([
+ "tpkg/test_the_test.py FF",
+ "E *DoesNotExist: Item matching query does not exist.",
+ "tpkg/test_the_test.py:8: ",
+ 'self = *RuntimeError*Database access not allowed*',
+ "E *DoesNotExist: Item matching query does not exist.",
+ "* 2 failed in *",
+ ])
+ assert "INTERNALERROR" not in str(result.stdout) + str(result.stderr)
+ assert result.ret == 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/tests/test_environment.py
new/pytest-django-3.7.0/tests/test_environment.py
--- old/pytest-django-3.6.0/tests/test_environment.py 2019-10-17
03:07:43.000000000 +0200
+++ new/pytest-django-3.7.0/tests/test_environment.py 2019-11-09
07:16:37.000000000 +0100
@@ -219,7 +219,7 @@
def test_database_noaccess():
- with pytest.raises(pytest.fail.Exception):
+ with pytest.raises(RuntimeError):
Item.objects.count()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/tests/test_fixtures.py
new/pytest-django-3.7.0/tests/test_fixtures.py
--- old/pytest-django-3.6.0/tests/test_fixtures.py 2019-10-17
03:07:43.000000000 +0200
+++ new/pytest-django-3.7.0/tests/test_fixtures.py 2019-11-09
07:16:37.000000000 +0100
@@ -15,7 +15,7 @@
from django.db import connection, transaction
from django.test.client import Client, RequestFactory
from django.test.testcases import connections_support_transactions
-from django.utils.encoding import force_text
+from django.utils.encoding import force_str
from pytest_django.lazy_django import get_django_version
from pytest_django_test.app.models import Item
@@ -42,13 +42,13 @@
def test_admin_client(admin_client):
assert isinstance(admin_client, Client)
resp = admin_client.get("/admin-required/")
- assert force_text(resp.content) == "You are an admin"
+ assert force_str(resp.content) == "You are an admin"
def test_admin_client_no_db_marker(admin_client):
assert isinstance(admin_client, Client)
resp = admin_client.get("/admin-required/")
- assert force_text(resp.content) == "You are an admin"
+ assert force_str(resp.content) == "You are an admin"
@pytest.mark.django_db
@@ -328,10 +328,10 @@
TestLiveServer._test_settings_before_run = True
def test_url(self, live_server):
- assert live_server.url == force_text(live_server)
+ assert live_server.url == force_str(live_server)
def test_change_settings(self, live_server, settings):
- assert live_server.url == force_text(live_server)
+ assert live_server.url == force_str(live_server)
def test_settings_restored(self):
"""Ensure that settings are restored after test_settings_before."""
@@ -356,20 +356,20 @@
def test_db_changes_visibility(self, live_server):
response_data = urlopen(live_server + "/item_count/").read()
- assert force_text(response_data) == "Item count: 0"
+ assert force_str(response_data) == "Item count: 0"
Item.objects.create(name="foo")
response_data = urlopen(live_server + "/item_count/").read()
- assert force_text(response_data) == "Item count: 1"
+ assert force_str(response_data) == "Item count: 1"
def test_fixture_db(self, db, live_server):
Item.objects.create(name="foo")
response_data = urlopen(live_server + "/item_count/").read()
- assert force_text(response_data) == "Item count: 1"
+ assert force_str(response_data) == "Item count: 1"
def test_fixture_transactional_db(self, transactional_db, live_server):
Item.objects.create(name="foo")
response_data = urlopen(live_server + "/item_count/").read()
- assert force_text(response_data) == "Item count: 1"
+ assert force_str(response_data) == "Item count: 1"
@pytest.fixture
def item(self):
@@ -386,7 +386,7 @@
def test_item_db(self, item_db, live_server):
response_data = urlopen(live_server + "/item_count/").read()
- assert force_text(response_data) == "Item count: 1"
+ assert force_str(response_data) == "Item count: 1"
@pytest.fixture
def item_transactional_db(self, transactional_db):
@@ -394,7 +394,7 @@
def test_item_transactional_db(self, item_transactional_db, live_server):
response_data = urlopen(live_server + "/item_count/").read()
- assert force_text(response_data) == "Item count: 1"
+ assert force_str(response_data) == "Item count: 1"
@pytest.mark.django_project(
extra_settings="""
@@ -418,7 +418,7 @@
django_testdir.create_test_module(
"""
import pytest
- from django.utils.encoding import force_text
+ from django.utils.encoding import force_str
try:
from urllib2 import urlopen, HTTPError
@@ -431,7 +431,7 @@
in settings.INSTALLED_APPS)
response_data = urlopen(
live_server + '/static/a_file.txt').read()
- assert force_text(response_data) == 'bla\\n'
+ assert force_str(response_data) == 'bla\\n'
"""
)
result = django_testdir.runpytest_subprocess("--tb=short", "-v")
@@ -607,7 +607,7 @@
def test_block_manually(self, django_db_blocker):
try:
django_db_blocker.block()
- with pytest.raises(pytest.fail.Exception):
+ with pytest.raises(RuntimeError):
Item.objects.exists()
finally:
django_db_blocker.restore()
@@ -615,7 +615,7 @@
@pytest.mark.django_db
def test_block_with_block(self, django_db_blocker):
with django_db_blocker.block():
- with pytest.raises(pytest.fail.Exception):
+ with pytest.raises(RuntimeError):
Item.objects.exists()
def test_unblock_manually(self, django_db_blocker):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/tests/test_unittest.py
new/pytest-django-3.7.0/tests/test_unittest.py
--- old/pytest-django-3.6.0/tests/test_unittest.py 2019-10-17
03:07:43.000000000 +0200
+++ new/pytest-django-3.7.0/tests/test_unittest.py 2019-11-09
07:16:37.000000000 +0100
@@ -458,7 +458,7 @@
assert result.ret == 0
-def test_debug_restored(django_testdir):
+def test_debug_not_used(django_testdir):
django_testdir.create_test_module(
"""
from django.test import TestCase
@@ -468,22 +468,14 @@
class TestClass1(TestCase):
- def test_method(self):
- pass
-
-
- class TestClass2(TestClass1):
-
- def _pre_setup(self):
- global pre_setup_count
- pre_setup_count += 1
- super(TestClass2, self)._pre_setup()
+ def debug(self):
+ assert 0, "should not be called"
def test_method(self):
- assert pre_setup_count == 1
+ pass
"""
)
result = django_testdir.runpytest_subprocess("--pdb")
- result.stdout.fnmatch_lines(["*= 2 passed in *"])
+ result.stdout.fnmatch_lines(["*= 1 passed in *"])
assert result.ret == 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-django-3.6.0/tests/test_urls.py
new/pytest-django-3.7.0/tests/test_urls.py
--- old/pytest-django-3.6.0/tests/test_urls.py 2019-10-17 03:07:43.000000000
+0200
+++ new/pytest-django-3.7.0/tests/test_urls.py 2019-11-09 07:16:37.000000000
+0100
@@ -1,6 +1,6 @@
import pytest
from django.conf import settings
-from django.utils.encoding import force_text
+from django.utils.encoding import force_str
@pytest.mark.urls("pytest_django_test.urls_overridden")
@@ -16,7 +16,7 @@
@pytest.mark.urls("pytest_django_test.urls_overridden")
def test_urls_client(client):
response = client.get("/overridden_url/")
- assert force_text(response.content) == "Overridden urlconf works!"
+ assert force_str(response.content) == "Overridden urlconf works!"
def test_urls_cache_is_cleared(testdir):