Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-django-coverage-plugin for
openSUSE:Factory checked in at 2021-12-26 13:30:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-coverage-plugin (Old)
and /work/SRC/openSUSE:Factory/.python-django-coverage-plugin.new.2520
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-coverage-plugin"
Sun Dec 26 13:30:29 2021 rev:3 rq:942558 version:2.0.2
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-django-coverage-plugin/python-django-coverage-plugin.changes
2021-05-20 19:26:00.557708973 +0200
+++
/work/SRC/openSUSE:Factory/.python-django-coverage-plugin.new.2520/python-django-coverage-plugin.changes
2021-12-26 13:30:47.418971252 +0100
@@ -1,0 +2,20 @@
+Sun Dec 26 06:33:30 UTC 2021 - John Vandenberg <[email protected]>
+
+- Update to v2.0.2
+ * If a non-UTF8 file was found when looking for templates, it
+ would fail when reading during the reporting phase, ending
+ execution. This failure is now raised in a way that can be
+ ignored with a .coveragerc setting of
+ [report] ignore_errors=True.
+ * When using source=., an existing coverage HTML report directory
+ would be found and believed to be unmeasured HTML template files
+- from v2.0.0
+ * Drop support for Python 3.4 and 3.5.
+ * A setting is available: template_extensions lets you set the file
+ extensions that will be considered when looking for unused templates
+ * Fix an issue on Windows where file names were being compared
+ case-sensitively, causing templates to be missed
+ * Fix an issue where tag libraries can't be found if imported
+ during test collection.
+
+-------------------------------------------------------------------
Old:
----
django_coverage_plugin-1.8.0.tar.gz
New:
----
django_coverage_plugin-2.0.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-coverage-plugin.spec ++++++
--- /var/tmp/diff_new_pack.oMQdzP/_old 2021-12-26 13:30:48.094971722 +0100
+++ /var/tmp/diff_new_pack.oMQdzP/_new 2021-12-26 13:30:48.098971725 +0100
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-django-coverage-plugin
-Version: 1.8.0
+Version: 2.0.2
Release: 0
Summary: Django template coveragepy plugin
License: Apache-2.0
@@ -59,8 +59,8 @@
%pytest
%files %{python_files}
+%doc README.rst
%license LICENSE.txt
-%doc HISTORY.rst README.rst
%{python_sitelib}/*
%changelog
++++++ django_coverage_plugin-1.8.0.tar.gz ->
django_coverage_plugin-2.0.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/.editorconfig
new/django_coverage_plugin-2.0.2/.editorconfig
--- old/django_coverage_plugin-1.8.0/.editorconfig 1970-01-01
01:00:00.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/.editorconfig 2021-11-11
15:05:51.000000000 +0100
@@ -0,0 +1,38 @@
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details:
https://github.com/nedbat/django_coverage_plugin/blob/master/NOTICE.txt
+
+# This file is for unifying the coding style for different editors and IDEs.
+# More information at http://EditorConfig.org
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+max_line_length = 80
+trim_trailing_whitespace = true
+
+[*.py]
+max_line_length = 100
+
+[*.yml]
+indent_size = 2
+
+[*.rst]
+max_line_length = 79
+
+[Makefile]
+indent_style = tab
+indent_size = 8
+
+[*,cover]
+trim_trailing_whitespace = false
+
+[*.diff]
+trim_trailing_whitespace = false
+
+[.git/*]
+trim_trailing_whitespace = false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_coverage_plugin-1.8.0/.github/workflows/tests.yml
new/django_coverage_plugin-2.0.2/.github/workflows/tests.yml
--- old/django_coverage_plugin-1.8.0/.github/workflows/tests.yml
1970-01-01 01:00:00.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/.github/workflows/tests.yml
2021-11-11 15:05:51.000000000 +0100
@@ -0,0 +1,106 @@
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
+
+name: "Tests"
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+ schedule:
+ # Since we test against the tip of Django development, run the tests once a
+ # week, Sundays at 6:00 UTC.
+ - cron: "0 6 * * 0"
+
+
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ tests:
+ name: "Python ${{ matrix.python-version }} on ${{ matrix.os }}"
+ runs-on: "${{ matrix.os }}"
+
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ - windows-latest
+ python-version:
+ # When changing this list, be sure to check the [gh-actions] list in
+ # tox.ini so that tox will run properly.
+ - "2.7"
+ - "3.6"
+ - "3.7"
+ - "3.8"
+ - "3.9"
+ - "3.10"
+ exclude:
+ # Windows 2.7 doesn't work because Microsoft removed stuff we needed.
+ - os: windows-latest
+ python-version: "2.7"
+ fail-fast: false
+
+ steps:
+ - name: "Check out the repo"
+ uses: "actions/checkout@v2"
+
+ - name: "Set up Python"
+ uses: "actions/setup-python@v2"
+ with:
+ python-version: "${{ matrix.python-version }}"
+
+ - name: "Install dependencies"
+ run: |
+ set -xe
+ python -VV
+ python -m site
+ python -m pip install -r requirements.txt
+ python -m pip install tox-gh-actions
+
+ - name: "Run tox for ${{ matrix.python-version }}"
+ run: |
+ # GitHub Actions on Windows sets TEMP to a shortname, and HOME to a
+ # longname. Eventually, filename comparisons fail because of the
+ # difference. Fix $TEMP.
+ echo $TEMP
+ if [ "$RUNNER_OS" == "Windows" ]; then
+ export TMP=$HOME\\AppData\\Local\\Temp
+ export TEMP=$HOME\\AppData\\Local\\Temp
+ fi
+ echo $TEMP
+ python -m tox
+
+ checks:
+ name: "Quality checks"
+ runs-on: "ubuntu-latest"
+
+ steps:
+ - name: "Check out the repo"
+ uses: "actions/checkout@v2"
+
+ - name: "Set up Python"
+ uses: "actions/setup-python@v2"
+ with:
+ python-version: "3.8"
+
+ - name: "Install dependencies"
+ run: |
+ set -xe
+ python -VV
+ python -m site
+ python -m pip install -r requirements.txt
+
+ - name: "Run check"
+ run: |
+ python -m tox -e check
+
+ - name: "Run pkgcheck"
+ run: |
+ python -m tox -e pkgcheck
+
+ - name: "Run doc"
+ run: |
+ python -m tox -e doc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/.travis.yml
new/django_coverage_plugin-2.0.2/.travis.yml
--- old/django_coverage_plugin-1.8.0/.travis.yml 2020-01-24
02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/.travis.yml 1970-01-01
01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-sudo: false
-language: python
-python:
- - "2.7"
- - "3.4"
- - "3.5"
- - "3.6"
- - "3.7"
- - "3.8"
-install: pip install tox-travis
-script: tox
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/HISTORY.rst
new/django_coverage_plugin-2.0.2/HISTORY.rst
--- old/django_coverage_plugin-1.8.0/HISTORY.rst 2020-01-24
02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/HISTORY.rst 1970-01-01
01:00:00.000000000 +0100
@@ -1,138 +0,0 @@
-=======
-History
-=======
-
-v1.8.0 --- 2020-01-23
----------------------
-
-Add support for:
-
-- Coverage 5
-
-v1.7.0 --- 2020-01-16
----------------------
-
-Add support for:
-
-- Python 3.7 & 3.8
-- Django 2.2 & 3.0
-
-v1.6.0 --- 2018-09-04
----------------------
-
-Add support for Django 2.1.
-
-
-v1.5.2 --- 2017-10-18
----------------------
-
-Validates support for Django version 2.0b1. Improves discovery of
-template files.
-
-
-v1.5.1a --- 2017-04-05
-----------------------
-
-Validates support for Django version 1.11. Testing for new package
-maintainer Pamela McA'Nulty
-
-
-v1.5.0 --- 2017-02-23
----------------------
-
-Removes support for Django versions below 1.8. Validates support for
-Django version 1.11b1
-
-
-v1.4.2 --- 2017-02-06
----------------------
-
-Fixes another instance of `issue 32`_, which was the result of an
-initialization order problem.
-
-
-
-v1.4.1 --- 2017-01-25
----------------------
-
-Fixes `issue 32`_, which was the result of an initialization order
-problem.
-
-.. _issue 32: https://github.com/nedbat/django_coverage_plugin/issues/32
-
-
-
-v1.4 --- 2017-01-16
--------------------
-
-Django 1.10.5 is now supported.
-
-Checking settings configuration is deferred so that settings.py is
-included in coverage reporting. Fixes `issue 28`_.
-
-Only the ``django.template.backends.django.DjangoTemplates`` template
-engine is supported, and it must be configured with
-``['OPTIONS']['debug'] = True``. Fixes `issue 27`_.
-
-.. _issue 28: https://github.com/nedbat/django_coverage_plugin/issues/28
-.. _issue 27: https://github.com/nedbat/django_coverage_plugin/issues/27
-
-
-
-v1.3.1 --- 2016-06-02
----------------------
-
-Settings are read slightly differently, so as to not interfere with
-programs that don't need settings. Fixes `issue 18`_.
-
-.. _issue 18: https://github.com/nedbat/django_coverage_plugin/issues/18
-
-
-
-v1.3 --- 2016-04-03
--------------------
-
-Multiple template engines are allowed. Thanks, Simon Charette.
-
-
-
-v1.2.2 --- 2016-02-01
----------------------
-
-No change in code, but Django 1.9.2 is now supported.
-
-
-
-v1.2.1 --- 2016-01-28
----------------------
-
-The template debug settings are checked properly for people still using
-``TEMPLATE_DEBUG`` in newer versions of Django.
-
-
-
-v1.2 --- 2016-01-16
--------------------
-
-Check if template debugging is enabled in the settings, and raise a
-visible warning if not. This prevents mysterious failures of the
-plugin, and fixes `issue 17`_.
-
-Potential Django 1.9 support is included, but the patch to Django hasn't
-been applied yet.
-
-.. _issue 17: https://github.com/nedbat/django_coverage_plugin/issues/17
-
-
-
-v1.1 --- 2015-11-12
--------------------
-
-Explicitly configure settings if need be to get things to work.
-
-
-
-v1.0 --- 2015-09-20
--------------------
-
-First version :)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/MANIFEST.in
new/django_coverage_plugin-2.0.2/MANIFEST.in
--- old/django_coverage_plugin-1.8.0/MANIFEST.in 2020-01-24
02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/MANIFEST.in 2021-11-11
15:05:51.000000000 +0100
@@ -7,8 +7,8 @@
exclude Makefile
exclude requirements.txt
exclude tox.ini
+exclude .editorconfig
include AUTHORS.txt
-include HISTORY.rst
include LICENSE.txt
include NOTICE.txt
include README.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/Makefile
new/django_coverage_plugin-2.0.2/Makefile
--- old/django_coverage_plugin-1.8.0/Makefile 2020-01-24 02:28:18.000000000
+0100
+++ new/django_coverage_plugin-2.0.2/Makefile 2021-11-11 15:05:51.000000000
+0100
@@ -3,13 +3,14 @@
# Makefile for django_coverage_plugin
-default:
- @echo "* No default action *"
+help: ## Show this help.
+ @echo "Available targets:"
+ @grep '^[a-zA-Z]' $(MAKEFILE_LIST) | sort | awk -F ':.*?## ' 'NF==2
{printf " %-26s%s\n", $$1, $$2}'
-test:
- tox
+test: ## Run all the tests.
+ tox -q -- -q
-clean:
+clean: ## Remove non-source files.
-rm -rf *.egg-info
-rm -rf build dist
-rm -f *.pyc */*.pyc */*/*.pyc */*/*/*.pyc */*/*/*/*.pyc */*/*/*/*/*.pyc
@@ -20,13 +21,13 @@
-rm -f .coverage .coverage.* coverage.xml
-rm -f setuptools-*.egg distribute-*.egg distribute-*.tar.gz
-sterile: clean
+sterile: clean ## Remove all non-controlled content,
even if expensive.
-rm -rf .tox*
-SDIST_CMD = python setup.py sdist --formats=gztar
-kit:
- $(SDIST_CMD)
+kit: ## Make the source distribution.
+ python -m build
+ python -m twine check dist/*
-kit_upload:
- twine upload dist/*
+kit_upload: ## Upload the built distributions to
PyPI.
+ twine upload --verbose dist/*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/NOTICE.txt
new/django_coverage_plugin-2.0.2/NOTICE.txt
--- old/django_coverage_plugin-1.8.0/NOTICE.txt 2020-01-24 02:28:18.000000000
+0100
+++ new/django_coverage_plugin-2.0.2/NOTICE.txt 2021-11-11 15:05:51.000000000
+0100
@@ -1,4 +1,4 @@
-Copyright 2015-2020 Ned Batchelder. All rights reserved.
+Copyright 2015-2021 Ned Batchelder. All rights reserved.
Except where noted otherwise, this software is licensed under the Apache
License, Version 2.0 (the "License"); you may not use this work except in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/README.rst
new/django_coverage_plugin-2.0.2/README.rst
--- old/django_coverage_plugin-1.8.0/README.rst 2020-01-24 02:28:18.000000000
+0100
+++ new/django_coverage_plugin-2.0.2/README.rst 2021-11-11 15:05:51.000000000
+0100
@@ -26,11 +26,11 @@
A `coverage.py`_ plugin to measure test coverage of Django templates.
-Supported Python versions: 2.7, 3.4, 3.5, 3.6, 3.7 and 3.8.
+Supported Python versions: 2.7, and 3.6 through 3.10.
-Supported Django versions: 1.8, 1.11, 2.0, 2.1, 2.2 and 3.0.
+Supported Django versions: 1.8, 1.11, 2.x and 3.x.
-Supported coverage.py version 4.x or 5.x.
+Supported coverage.py versions: 4.x or higher.
The plugin is pip installable::
@@ -39,8 +39,7 @@
To run it, add this setting to your ``.coveragerc`` file::
[run]
- plugins =
- django_coverage_plugin
+ plugins = django_coverage_plugin
Then run your tests under `coverage.py`_.
@@ -51,14 +50,51 @@
If you get a :code:`django.core.exceptions.ImproperlyConfigured` error,
you need to set the :code:`DJANGO_SETTINGS_MODULE` environment variable.
+Template coverage only works if your Django templates have debugging enabled.
+If you get :code:`django_coverage_plugin.plugin.DjangoTemplatePluginException:
+Template debugging must be enabled in settings`, or if no templates get
+measured, make sure you have :code:`TEMPLATES.OPTIONS.debug` set to True in
+your settings file:
+
+.. code-block:: python
+
+ TEMPLATES = [
+ {
+ ...
+ 'OPTIONS': {
+ 'debug': True,
+ },
+ },
+ ]
+
Configuration
~~~~~~~~~~~~~
The Django template plugin uses some existing settings from your
-.coveragerc file. The ``source=``, ``include=``, and ``omit=`` options
+``.coveragerc`` file. The ``source=``, ``include=``, and ``omit=`` options
control what template files are included in the report.
+The plugin can find unused template and include them in your results. By
+default, it will look for files in your templates directory with an extension
+of ``.html``, ``.htm``, or ``.txt``. You can configure it to look for a
different set of
+extensions if you like::
+
+ [run]
+ plugins = django_coverage_plugin
+
+ [django_coverage_plugin]
+ template_extensions = html, txt, tex, email
+
+If you use ``pyproject.toml`` for tool configuration use::
+
+ [tool.coverage.run]
+ plugins = [
+ 'django_coverage_plugin',
+ ]
+
+ [tool.coverage.django_coverage_plugin]
+ template_extensions = 'html, txt, tex, email'
Caveats
~~~~~~~
@@ -90,5 +126,182 @@
$ pip install -r requirements.txt
$ tox
+
+History
+~~~~~~~
+
+v2.0.2 ??? 2021-11-11
+-------------------
+
+If a non-UTF8 file was found when looking for templates, it would fail when
+reading during the reporting phase, ending execution. This failure is now
+raised in a way that can be ignored with a .coveragerc setting of ``[report]
+ignore_errors=True`` (`issue 78`_).
+
+When using ``source=.``, an existing coverage HTML report directory would be
+found and believed to be unmeasured HTML template files. This is now fixed.
+
+.. _issue 78: https://github.com/nedbat/django_coverage_plugin/issues/78
+
+
+v2.0.1 ??? 2021-10-06
+-------------------
+
+Test and claim our support on Python 3.10.
+
+v2.0.0 ??? 2021-06-08
+-------------------
+
+Drop support for Python 3.4 and 3.5.
+
+A setting is available: ``template_extensions`` lets you set the file
+extensions that will be considered when looking for unused templates
+(requested in `issue 60`_).
+
+Fix an issue on Windows where file names were being compared
+case-sensitively, causing templates to be missed (`issue 46`_).
+
+Fix an issue (`issue 63`_) where tag libraries can't be found if imported
+during test collection. Thanks to Daniel Izquierdo for the fix.
+
+.. _issue 46: https://github.com/nedbat/django_coverage_plugin/issues/46
+.. _issue 60: https://github.com/nedbat/django_coverage_plugin/issues/60
+.. _issue 63: https://github.com/nedbat/django_coverage_plugin/issues/63
+
+v1.8.0 ??? 2020-01-23
+-------------------
+
+Add support for:
+
+- Coverage 5
+
+v1.7.0 ??? 2020-01-16
+-------------------
+
+Add support for:
+
+- Python 3.7 & 3.8
+- Django 2.2 & 3.0
+
+v1.6.0 ??? 2018-09-04
+-------------------
+
+Add support for Django 2.1.
+
+
+v1.5.2 ??? 2017-10-18
+-------------------
+
+Validates support for Django version 2.0b1. Improves discovery of
+template files.
+
+
+v1.5.1a ??? 2017-04-05
+--------------------
+
+Validates support for Django version 1.11. Testing for new package
+maintainer Pamela McA'Nulty
+
+
+v1.5.0 ??? 2017-02-23
+-------------------
+
+Removes support for Django versions below 1.8. Validates support for
+Django version 1.11b1
+
+
+v1.4.2 ??? 2017-02-06
+-------------------
+
+Fixes another instance of `issue 32`_, which was the result of an
+initialization order problem.
+
+
+
+v1.4.1 ??? 2017-01-25
+-------------------
+
+Fixes `issue 32`_, which was the result of an initialization order
+problem.
+
+.. _issue 32: https://github.com/nedbat/django_coverage_plugin/issues/32
+
+
+
+v1.4 ??? 2017-01-16
+-----------------
+
+Django 1.10.5 is now supported.
+
+Checking settings configuration is deferred so that settings.py is
+included in coverage reporting. Fixes `issue 28`_.
+
+Only the ``django.template.backends.django.DjangoTemplates`` template
+engine is supported, and it must be configured with
+``['OPTIONS']['debug'] = True``. Fixes `issue 27`_.
+
+.. _issue 28: https://github.com/nedbat/django_coverage_plugin/issues/28
+.. _issue 27: https://github.com/nedbat/django_coverage_plugin/issues/27
+
+
+
+v1.3.1 ??? 2016-06-02
+-------------------
+
+Settings are read slightly differently, so as to not interfere with
+programs that don't need settings. Fixes `issue 18`_.
+
+.. _issue 18: https://github.com/nedbat/django_coverage_plugin/issues/18
+
+
+
+v1.3 ??? 2016-04-03
+-----------------
+
+Multiple template engines are allowed. Thanks, Simon Charette.
+
+
+
+v1.2.2 ??? 2016-02-01
+-------------------
+
+No change in code, but Django 1.9.2 is now supported.
+
+
+
+v1.2.1 ??? 2016-01-28
+-------------------
+
+The template debug settings are checked properly for people still using
+``TEMPLATE_DEBUG`` in newer versions of Django.
+
+
+
+v1.2 ??? 2016-01-16
+-----------------
+
+Check if template debugging is enabled in the settings, and raise a
+visible warning if not. This prevents mysterious failures of the
+plugin, and fixes `issue 17`_.
+
+Potential Django 1.9 support is included, but the patch to Django hasn't
+been applied yet.
+
+.. _issue 17: https://github.com/nedbat/django_coverage_plugin/issues/17
+
+
+
+v1.1 ??? 2015-11-12
+-----------------
+
+Explicitly configure settings if need be to get things to work.
+
+
+
+v1.0 ??? 2015-09-20
+-----------------
+
+First version :)
+
.. _coverage.py: http://nedbatchelder.com/code/coverage
.. _dtcov: https://github.com/traff/dtcov
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_coverage_plugin-1.8.0/django_coverage_plugin/__init__.py
new/django_coverage_plugin-2.0.2/django_coverage_plugin/__init__.py
--- old/django_coverage_plugin-1.8.0/django_coverage_plugin/__init__.py
2020-01-24 02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/django_coverage_plugin/__init__.py
2021-11-11 15:05:51.000000000 +0100
@@ -3,9 +3,11 @@
"""Django Template Coverage Plugin"""
+from .plugin import DjangoTemplatePluginException # noqa
from .plugin import DjangoTemplatePlugin
-from .plugin import DjangoTemplatePluginException # noqa
def coverage_init(reg, options):
- reg.add_file_tracer(DjangoTemplatePlugin())
+ plugin = DjangoTemplatePlugin(options)
+ reg.add_file_tracer(plugin)
+ reg.add_configurer(plugin)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_coverage_plugin-1.8.0/django_coverage_plugin/plugin.py
new/django_coverage_plugin-2.0.2/django_coverage_plugin/plugin.py
--- old/django_coverage_plugin-1.8.0/django_coverage_plugin/plugin.py
2020-01-24 02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/django_coverage_plugin/plugin.py
2021-11-11 15:05:51.000000000 +0100
@@ -8,6 +8,11 @@
import os.path
import re
+try:
+ from coverage.exceptions import NoSource
+except ImportError:
+ # for coverage 5.x
+ from coverage.misc import NoSource
import coverage.plugin
import django
import django.template
@@ -25,7 +30,10 @@
except ImportError:
# Django <2.1 uses separate constants for token types
from django.template.base import (
- TOKEN_BLOCK, TOKEN_MAPPING, TOKEN_TEXT, TOKEN_VAR
+ TOKEN_BLOCK,
+ TOKEN_MAPPING,
+ TOKEN_TEXT,
+ TOKEN_VAR,
)
class TokenType:
@@ -75,6 +83,8 @@
return False
if not hasattr(django.template.backends.django, "DjangoTemplates"):
raise DjangoTemplatePluginException("Can't use non-Django templates.")
+ if not django.template.engines._engines:
+ return False
for engine in django.template.engines.all():
if not isinstance(engine,
django.template.backends.django.DjangoTemplates):
@@ -150,12 +160,15 @@
coverage.plugin.FileTracer,
):
- def __init__(self):
+ def __init__(self, options):
+ extensions = options.get("template_extensions", "html,htm,txt")
+ self.extensions = [e.strip() for e in extensions.split(",")]
+
self.debug_checked = False
- self.django_template_dir = os.path.realpath(
+ self.django_template_dir = os.path.normcase(os.path.realpath(
os.path.dirname(django.template.__file__)
- )
+ ))
self.source_map = {}
@@ -171,8 +184,11 @@
)),
]
+ def configure(self, config):
+ self.html_report_dir =
os.path.abspath(config.get_option("html:directory"))
+
def file_tracer(self, filename):
- if filename.startswith(self.django_template_dir):
+ if os.path.normcase(filename).startswith(self.django_template_dir):
if not self.debug_checked:
# Keep calling check_debug until it returns True, which it
# will only do after settings have been configured
@@ -185,12 +201,17 @@
return FileReporter(filename)
def find_executable_files(self, src_dir):
+ # We're only interested in files that look like reasonable HTML
+ # files: Must end with one of our extensions, and must not have
+ # funny characters that probably mean they are editor junk.
+ rx = r"^[^.#~!$@%^&*()+=,]+\.(" + "|".join(self.extensions) + r")$"
+
for (dirpath, dirnames, filenames) in os.walk(src_dir):
+ if dirpath == self.html_report_dir:
+ # Don't confuse the HTML report with HTML templates.
+ continue
for filename in filenames:
- # We're only interested in files that look like reasonable HTML
- # files: Must end with .htm or .html, and must not have certain
- # funny characters that probably mean they are editor junk.
- if re.match(r"^[^.#~!$@%^&*()+=,]+\.html?$", filename):
+ if re.search(rx, filename):
yield os.path.join(dirpath, filename)
# --- FileTracer methods
@@ -198,8 +219,12 @@
def has_dynamic_source_filename(self):
return True
+ # "render" is the public method, but "render_annotated" is an internal
+ # method sometimes implemented directly on nodes.
+ RENDER_METHODS = {"render", "render_annotated"}
+
def dynamic_source_filename(self, filename, frame):
- if frame.f_code.co_name != 'render':
+ if frame.f_code.co_name not in self.RENDER_METHODS:
return None
if 0:
@@ -214,7 +239,7 @@
return None
def line_number_range(self, frame):
- assert frame.f_code.co_name == 'render'
+ assert frame.f_code.co_name in self.RENDER_METHODS
if 0:
dump_frame(frame, label="line_number_range")
@@ -289,7 +314,10 @@
def source(self):
if self._source is None:
- self._source = read_template_source(self.filename)
+ try:
+ self._source = read_template_source(self.filename)
+ except (IOError, UnicodeError) as exc:
+ raise NoSource("Couldn't read {}: {}".format(self.filename,
exc))
return self._source
def lines(self):
@@ -387,7 +415,7 @@
def make_line_map(text):
- line_lengths = [len(l) for l in text.splitlines(True)]
+ line_lengths = [len(line) for line in text.splitlines(True)]
line_map = list(running_sum(line_lengths))
return line_map
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/howto.txt
new/django_coverage_plugin-2.0.2/howto.txt
--- old/django_coverage_plugin-1.8.0/howto.txt 2020-01-24 02:28:18.000000000
+0100
+++ new/django_coverage_plugin-2.0.2/howto.txt 2021-11-11 15:05:51.000000000
+0100
@@ -8,8 +8,8 @@
Development Status :: 5 - Production/Stable
- Copyright date in NOTICE.txt
- Update README.rst with latest changes
-- Update HISTORY.rst with latest changes
- Kits:
- $ make kit
+ $ make clean kit
$ make kit_upload
- tag git
+- make a new gh release:
https://github.com/nedbat/django_coverage_plugin/releases/new
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/requirements.txt
new/django_coverage_plugin-2.0.2/requirements.txt
--- old/django_coverage_plugin-1.8.0/requirements.txt 2020-01-24
02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/requirements.txt 2021-11-11
15:05:51.000000000 +0100
@@ -1,3 +1,4 @@
# To run tests, we just need tox.
tox >= 1.8
+build
twine
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/setup.cfg
new/django_coverage_plugin-2.0.2/setup.cfg
--- old/django_coverage_plugin-1.8.0/setup.cfg 1970-01-01 01:00:00.000000000
+0100
+++ new/django_coverage_plugin-2.0.2/setup.cfg 2021-11-11 15:05:51.000000000
+0100
@@ -0,0 +1,10 @@
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details:
https://github.com/nedbat/django_coverage_plugin/blob/master/NOTICE.txt
+
+[tool:pytest]
+# How come these warnings are suppressed successfully here, but not in
conftest.py??
+filterwarnings =
+ # ignore all DeprecationWarnings...
+ ignore::DeprecationWarning
+ # ...but show them if they are from our code.
+ default::DeprecationWarning:django_coverage_plugin
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/setup.py
new/django_coverage_plugin-2.0.2/setup.py
--- old/django_coverage_plugin-1.8.0/setup.py 2020-01-24 02:28:18.000000000
+0100
+++ new/django_coverage_plugin-2.0.2/setup.py 2021-11-11 15:05:51.000000000
+0100
@@ -33,11 +33,11 @@
License :: OSI Approved :: Apache Software License
Operating System :: OS Independent
Programming Language :: Python :: 2.7
-Programming Language :: Python :: 3.4
-Programming Language :: Python :: 3.5
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
+Programming Language :: Python :: 3.9
+Programming Language :: Python :: 3.10
Programming Language :: Python :: Implementation :: CPython
Programming Language :: Python :: Implementation :: PyPy
Topic :: Software Development :: Quality Assurance
@@ -46,15 +46,13 @@
Framework :: Django
Framework :: Django :: 1.8
Framework :: Django :: 1.11
-Framework :: Django :: 2.0
-Framework :: Django :: 2.1
Framework :: Django :: 2.2
-Framework :: Django :: 3.0
+Framework :: Django :: 3.2
"""
setup(
name='django_coverage_plugin',
- version='1.8.0',
+ version='2.0.2',
description='Django template coverage.py plugin',
long_description=(
re.compile(
@@ -62,6 +60,7 @@
re.M | re.S,
).sub('', read('README.rst'))
),
+ long_description_content_type='text/x-rst',
author='Ned Batchelder',
author_email='[email protected]',
url='https://github.com/nedbat/django_coverage_plugin',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/tests/__init__.py
new/django_coverage_plugin-2.0.2/tests/__init__.py
--- old/django_coverage_plugin-1.8.0/tests/__init__.py 2020-01-24
02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/tests/__init__.py 2021-11-11
15:05:51.000000000 +0100
@@ -5,7 +5,10 @@
# Define URLs here so we can use ROOT_URLCONF="tests"
-from django.conf.urls import url
+try:
+ from django.urls import re_path
+except ImportError:
+ from django.conf.urls import url as re_path
def index(request):
@@ -14,5 +17,5 @@
urlpatterns = [
- url(r'^home$', index, name='index'),
+ re_path(r'^home$', index, name='index'),
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/tests/conftest.py
new/django_coverage_plugin-2.0.2/tests/conftest.py
--- old/django_coverage_plugin-1.8.0/tests/conftest.py 1970-01-01
01:00:00.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/tests/conftest.py 2021-11-11
15:05:51.000000000 +0100
@@ -0,0 +1,38 @@
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details:
https://github.com/nedbat/django_coverage_plugin/blob/master/NOTICE.txt
+
+"""
+Pytest auto configuration.
+
+This module is run automatically by pytest, to define and enable fixtures.
+"""
+
+import re
+import warnings
+
+import django.utils.deprecation
+import pytest
+
+
[email protected](autouse=True)
+def set_warnings():
+ """Configure warnings to show while running tests."""
+ warnings.simplefilter("default")
+ warnings.simplefilter("once", DeprecationWarning)
+
+ # Warnings to suppress:
+ # How come these warnings are successfully suppressed here, but not in
setup.cfg??
+
+ # We know we do tricky things with Django settings, don't warn us about it.
+ warnings.filterwarnings(
+ "ignore",
+ category=UserWarning,
+ message=r"Overriding setting DATABASES can lead to unexpected
behavior.",
+ )
+
+ # Django has warnings like RemovedInDjango40Warning. We use features that
are going to be
+ # deprecated, so we don't need to see those warnings. But the specific
warning classes change
+ # in every release. Find them and ignore them.
+ for name, obj in vars(django.utils.deprecation).items():
+ if re.match(r"RemovedInDjango\d+Warning", name):
+ warnings.filterwarnings("ignore", category=obj)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/tests/plugin_test.py
new/django_coverage_plugin-2.0.2/tests/plugin_test.py
--- old/django_coverage_plugin-1.8.0/tests/plugin_test.py 2020-01-24
02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/tests/plugin_test.py 2021-11-11
15:05:51.000000000 +0100
@@ -52,7 +52,7 @@
if django.VERSION < (1, 10):
# for {% ssi %}
- the_settings['TEMPLATES'][0]['OPTIONS']['allowed_include_roots'] =
['/']
+ the_settings['TEMPLATES'][0]['OPTIONS']['allowed_include_roots'] = [""]
return the_settings
@@ -176,9 +176,15 @@
_, executable, _, missing, _ = analysis
return executable, missing
- def measured_files(self):
- """Get the list of measured files, in relative form."""
- return [os.path.relpath(f) for f in
self.cov.get_data().measured_files()]
+ def assert_measured_files(self, *template_files):
+ """Assert that the measured files are `template_files`.
+
+ The names in `template_files` are the base names of files
+ in the templates directory.
+ """
+ measured = {os.path.relpath(f) for f in
self.cov.get_data().measured_files()}
+ expected = {os.path.join("templates", f) for f in template_files}
+ self.assertEqual(measured, expected)
def assert_analysis(self, executable, missing=None, name=None):
"""Assert that the analysis for `name` is right."""
@@ -225,19 +231,27 @@
"""Assert that our plugin was disabled during an operation."""
# self.run_django_coverage will raise PluginDisabled if the plugin
# was disabled.
- with self.assertRaises(PluginDisabled):
- yield
- stderr = self.stderr()
+ # Coverage.py 6.0 made the warnings real warnings, so we have to adapt
+ # how we test the warnings based on the version.
+ if coverage.version.version_info >= (6, 0):
+ import coverage.exceptions as cov_exc
+ ctxmgr = self.assertWarns(cov_exc.CoverageWarning)
+ else:
+ ctxmgr = nullcontext()
+ with ctxmgr as cw:
+ with self.assertRaises(PluginDisabled):
+ yield
+
+ if cw is not None:
+ warn_text = "\n".join(str(w.message) for w in cw.warnings)
+ else:
+ warn_text = self.stderr()
self.assertIn(
- "Coverage.py warning: "
"Disabling plug-in 'django_coverage_plugin.DjangoTemplatePlugin' "
"due to an exception:",
- stderr
- )
- self.assertIn(
- "DjangoTemplatePluginException: " + msg,
- stderr
+ warn_text
)
+ self.assertIn("DjangoTemplatePluginException: " + msg, warn_text)
def squashed(s):
@@ -276,3 +290,9 @@
class PluginDisabled(Exception):
"""Raised if we find that our plugin has been disabled."""
pass
+
+
[email protected]
+def nullcontext():
+ """For when we need a context manager to do nothing."""
+ yield None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/tests/test_extends.py
new/django_coverage_plugin-2.0.2/tests/test_extends.py
--- old/django_coverage_plugin-1.8.0/tests/test_extends.py 2020-01-24
02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/tests/test_extends.py 2021-11-11
15:05:51.000000000 +0100
@@ -168,10 +168,7 @@
text = self.run_django_coverage(name="outer.html", context={'a': 17})
self.assertEqual(text, "First\nInside {{ a }}\nJob\n\nLast\n")
self.assert_analysis([1, 2, 3], name="outer.html")
- self.assertEqual(
- set(self.measured_files()),
- set(["templates/outer.html", "templates/nested.html"])
- )
+ self.assert_measured_files("outer.html", "nested.html")
def test_ssi_parsed(self):
nested = self.make_template(name="nested.html", text="""\
@@ -188,7 +185,4 @@
text = self.run_django_coverage(name="outer.html", context={'a': 17})
self.assertEqual(text, "First\nInside 17\nJob\n\nLast\n")
self.assert_analysis([1, 2, 3], name="outer.html")
- self.assertEqual(
- set(self.measured_files()),
- set(["templates/outer.html", "templates/nested.html"])
- )
+ self.assert_measured_files("outer.html", "nested.html")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/tests/test_flow.py
new/django_coverage_plugin-2.0.2/tests/test_flow.py
--- old/django_coverage_plugin-1.8.0/tests/test_flow.py 2020-01-24
02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/tests/test_flow.py 2021-11-11
15:05:51.000000000 +0100
@@ -5,7 +5,7 @@
import textwrap
-from .plugin_test import DjangoPluginTestCase, squashed
+from .plugin_test import DjangoPluginTestCase, django_stop_before, squashed
class IfTest(DjangoPluginTestCase):
@@ -173,6 +173,7 @@
self.assert_analysis([1, 2, 3, 4, 5])
+@django_stop_before(4, 0)
class IfEqualTest(DjangoPluginTestCase):
def test_ifequal(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/tests/test_html.py
new/django_coverage_plugin-2.0.2/tests/test_html.py
--- old/django_coverage_plugin-1.8.0/tests/test_html.py 2020-01-24
02:28:18.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/tests/test_html.py 2021-11-11
15:05:51.000000000 +0100
@@ -4,6 +4,8 @@
"""Tests of HTML reporting for django_coverage_plugin."""
+import glob
+
from .plugin_test import DjangoPluginTestCase
@@ -16,6 +18,7 @@
self.run_django_coverage()
self.cov.html_report()
- with open("htmlcov/templates_test_simple_html.html") as fhtml:
+ html_file = glob.glob("htmlcov/*_test_simple_html.html")[0]
+ with open(html_file) as fhtml:
html = fhtml.read()
self.assertIn('<span class="txt">Simple © 2015</span>', html)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/tests/test_source.py
new/django_coverage_plugin-2.0.2/tests/test_source.py
--- old/django_coverage_plugin-1.8.0/tests/test_source.py 1970-01-01
01:00:00.000000000 +0100
+++ new/django_coverage_plugin-2.0.2/tests/test_source.py 2021-11-11
15:05:51.000000000 +0100
@@ -0,0 +1,174 @@
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details:
https://github.com/nedbat/django_coverage_plugin/blob/master/NOTICE.txt
+
+"""Tests of template inheritance for django_coverage_plugin."""
+
+import os
+
+try:
+ from coverage.exceptions import NoSource
+except ImportError:
+ # for coverage 5.x
+ from coverage.misc import NoSource
+
+from .plugin_test import DjangoPluginTestCase
+
+
+class FindSourceTest(DjangoPluginTestCase):
+
+ def test_finding_source(self):
+ # This is a template that is rendered.
+ self.make_template(name="main.html", text="Hello")
+ # These are templates that aren't rendered, but are considered
renderable.
+ self.make_template(name="unused.html", text="Not used")
+ self.make_template(name="unused.htm", text="Not used")
+ self.make_template(name="unused.txt", text="Not used")
+ # These are things left behind by an editor.
+ self.make_template(name="~unused.html", text="junk")
+ self.make_template(name="unused=.html", text="junk")
+ self.make_template(name="unused.html,", text="junk")
+ # This is some other file format we don't recognize.
+ self.make_template(name="phd.tex", text="Too complicated to read")
+
+ text = self.run_django_coverage(name="main.html")
+ self.assertEqual(text, "Hello")
+
+ # The rendered file has data, and was measured.
+ self.assert_analysis([1], name="main.html")
+ # The unrendered files have data, and were not measured.
+ self.assert_analysis([1], name="unused.html", missing=[1])
+ self.assert_analysis([1], name="unused.htm", missing=[1])
+ self.assert_analysis([1], name="unused.txt", missing=[1])
+ # The editor leave-behinds are not in the measured files.
+ self.assert_measured_files("main.html", "unused.html", "unused.htm",
"unused.txt")
+
+ def test_customized_extensions(self):
+ self.make_file(".coveragerc", """\
+ [run]
+ plugins = django_coverage_plugin
+ [django_coverage_plugin]
+ template_extensions = html, tex
+ """)
+ # This is a template that is rendered.
+ self.make_template(name="main.html", text="Hello")
+ # These are templates that aren't rendered, but are considered
renderable.
+ self.make_template(name="unused.html", text="Not used")
+ self.make_template(name="phd.tex", text="Too complicated to read")
+ # These are things left behind by an editor.
+ self.make_template(name="~unused.html", text="junk")
+ self.make_template(name="unused=.html", text="junk")
+ self.make_template(name="unused.html,", text="junk")
+ # This is some other file format we don't recognize.
+ self.make_template(name="unused.htm", text="Not used")
+ self.make_template(name="unused.txt", text="Not used")
+
+ text = self.run_django_coverage(name="main.html")
+ self.assertEqual(text, "Hello")
+
+ # The rendered file has data, and was measured.
+ self.assert_analysis([1], name="main.html")
+ # The unrendered files have data, and were not measured.
+ self.assert_analysis([1], name="unused.html", missing=[1])
+ self.assert_analysis([1], name="phd.tex", missing=[1])
+ # The editor leave-behinds are not in the measured files.
+ self.assert_measured_files("main.html", "unused.html", "phd.tex")
+
+ def test_non_utf8_error(self):
+ # A non-UTF8 text file will raise an error.
+ self.make_file(".coveragerc", """\
+ [run]
+ plugins = django_coverage_plugin
+ source = .
+ """)
+ # This is a template that is rendered.
+ self.make_template(name="main.html", text="Hello")
+ # Extra file containing a word encoded in CP-1252
+ self.make_file(self._path("static/changelog.txt"), bytes=b"sh\xf6n")
+
+ text = self.run_django_coverage(name="main.html")
+ self.assertEqual(text, "Hello")
+
+ self.assert_measured_files("main.html",
"static{}changelog.txt".format(os.sep))
+ self.assert_analysis([1], name="main.html")
+ with self.assertRaisesRegexp(NoSource, r"changelog.txt.*invalid start
byte"):
+ self.cov.html_report()
+
+ def test_non_utf8_omitted(self):
+ # If we omit the directory with the non-UTF8 file, all is well.
+ self.make_file(".coveragerc", """\
+ [run]
+ plugins = django_coverage_plugin
+ source = .
+ [report]
+ omit = */static/*
+ """)
+ # This is a template that is rendered.
+ self.make_template(name="main.html", text="Hello")
+ # Extra file containing a word encoded in CP-1252
+ self.make_file(self._path("static/changelog.txt"), bytes=b"sh\xf6n")
+
+ text = self.run_django_coverage(name="main.html")
+ self.assertEqual(text, "Hello")
+
+ self.assert_measured_files("main.html",
"static{}changelog.txt".format(os.sep))
+ self.assert_analysis([1], name="main.html")
+ self.cov.html_report()
+
+ def test_non_utf8_ignored(self):
+ # If we ignore reporting errors, a non-UTF8 text file is fine.
+ self.make_file(".coveragerc", """\
+ [run]
+ plugins = django_coverage_plugin
+ source = .
+ [report]
+ ignore_errors = True
+ """)
+ # This is a template that is rendered.
+ self.make_template(name="main.html", text="Hello")
+ # Extra file containing a word encoded in CP-1252
+ self.make_file(self._path("static/changelog.txt"), bytes=b"sh\xf6n")
+
+ text = self.run_django_coverage(name="main.html")
+ self.assertEqual(text, "Hello")
+
+ self.assert_measured_files("main.html",
"static{}changelog.txt".format(os.sep))
+ self.assert_analysis([1], name="main.html")
+ self.cov.html_report()
+
+ def test_htmlcov_isnt_measured(self):
+ # We used to find the HTML report and think it was template files.
+ self.make_file(".coveragerc", """\
+ [run]
+ plugins = django_coverage_plugin
+ source = .
+ """)
+ self.make_template(name="main.html", text="Hello")
+ text = self.run_django_coverage(name="main.html")
+ self.assertEqual(text, "Hello")
+
+ self.assert_measured_files("main.html")
+ self.cov.html_report()
+
+ # Run coverage again with an HTML report on disk.
+ text = self.run_django_coverage(name="main.html")
+ self.assert_measured_files("main.html")
+
+ def test_custom_html_report_isnt_measured(self):
+ # We used to find the HTML report and think it was template files.
+ self.make_file(".coveragerc", """\
+ [run]
+ plugins = django_coverage_plugin
+ source = .
+ [html]
+ directory = my_html_report
+ """)
+ self.make_template(name="main.html", text="Hello")
+ text = self.run_django_coverage(name="main.html")
+ self.assertEqual(text, "Hello")
+
+ self.assert_measured_files("main.html")
+ self.cov.html_report()
+
+ # Run coverage again with an HTML report on disk.
+ text = self.run_django_coverage(name="main.html")
+ self.assert_measured_files("main.html")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_coverage_plugin-1.8.0/tox.ini
new/django_coverage_plugin-2.0.2/tox.ini
--- old/django_coverage_plugin-1.8.0/tox.ini 2020-01-24 02:28:18.000000000
+0100
+++ new/django_coverage_plugin-2.0.2/tox.ini 2021-11-11 15:05:51.000000000
+0100
@@ -14,30 +14,27 @@
[tox]
envlist =
- py27-django{18,19,110,111},
- py34-django{18,19,110,111,20},
- py35-django{18,19,110,111,20,21,22},
- py36-django{18,19,110,111,20,21,22,30,tip},
- py37-django{20,21,22,30,tip},
- py38-django{22,30,tip},
+ py27-django{18,111},
+ py36-django{18,111,22,32},
+ py37-django{22,32},
+ py38-django{22,32,tip},
+ py39-django{22,32,tip},
+ py310-django{32,tip},
check,pkgcheck,doc
[testenv]
deps =
+ pytest
unittest-mixins==1.6
django18: Django>=1.8,<1.9
- django19: Django>=1.9,<1.10
- django110: Django>=1.10,<1.11
django111: Django>=1.11,<2.0
- django20: Django>=2.0,<2.1
- django21: Django>=2.1,<2.2
django22: Django>=2.2,<3.0
- django30: Django>=3.0,<3.1
- djangotip: https://github.com/django/django/archive/master.tar.gz
+ django32: Django>=3.2,<4.0
+ djangotip: https://github.com/django/django/archive/main.tar.gz
commands =
python -c "import tests.banner"
- python -m unittest {posargs:discover -b}
+ python -m pytest {posargs}
usedevelop = True
@@ -50,17 +47,20 @@
commands =
flake8 --max-line-length=100 setup.py django_coverage_plugin tests setup.py
- isort --verbose --check-only --diff --recursive django_coverage_plugin
tests setup.py
+ isort --check-only --diff django_coverage_plugin tests setup.py
[testenv:pkgcheck]
skip_install = true
deps =
+ build
docutils
check-manifest
readme-renderer
+ twine
commands =
- python setup.py check --strict --metadata --restructuredtext
+ python -m build --config-setting=--quiet
+ twine check dist/*
check-manifest {toxinidir}
[testenv:doc]
@@ -69,3 +69,12 @@
commands =
rst2html.py --strict README.rst /tmp/django_coverage_plugin_README.html
+
+[gh-actions]
+python =
+ 2.7: py27
+ 3.6: py36
+ 3.7: py37
+ 3.8: py38
+ 3.9: py39
+ 3.10: py310