Code Monkey home page Code Monkey logo

django_coverage_plugin's Introduction

Package stability Latest PyPI Version Apache 2.0 License Supported Python Versions Supported Django Versions

Django Template Coverage.py Plugin

A coverage.py plugin to measure test coverage of Django templates.

Supported Python versions: 2.7, and 3.6 through 3.10.

Supported Django versions: 1.8, 1.11, 2.x and 3.x.

Supported coverage.py versions: 4.x or higher.

The plugin is pip installable:

$ pip install django_coverage_plugin

To run it, add this setting to your .coveragerc file:

[run]
plugins = django_coverage_plugin

Then run your tests under coverage.py.

You will see your templates listed in your coverage report along with your Python modules. Please use coverage.py v4.4 or greater to allow the plugin to identify untested templates.

If you get a django.core.exceptions.ImproperlyConfigured error, you need to set the DJANGO_SETTINGS_MODULE environment variable.

Template coverage only works if your Django templates have debugging enabled. If you get django_coverage_plugin.plugin.DjangoTemplatePluginException: Template debugging must be enabled in settings, or if no templates get measured, make sure you have TEMPLATES.OPTIONS.debug set to True in your settings file:

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'debug': True,
        },
    },
]

Configuration

The Django template plugin uses some existing settings from your .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

Coverage.py can't tell whether a {% blocktrans %} tag used the singular or plural text, so both are marked as used if the tag is used.

What the? How?

The technique used to measure the coverage is the same that Dmitry Trofimov used in dtcov, but integrated into coverage.py as a plugin, and made more performant. I'd love to see how well it works in a real production project. If you want to help me with it, feel free to drop me an email.

The coverage.py plugin mechanism is designed to be generally useful for hooking into the collection and reporting phases of coverage.py, specifically to support non-Python files. If you have non-Python files you'd like to support in coverage.py, let's talk.

Tests

To run the tests:

$ pip install -r requirements.txt
$ tox

History

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.

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.

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.

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.

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.

v1.1 --- 2015-11-12

Explicitly configure settings if need be to get things to work.

v1.0 --- 2015-09-20

First version :)

django_coverage_plugin's People

Contributors

adnathanail avatar agriffis avatar browniebroke avatar charettes avatar federicobond avatar izquierdo avatar jaap3 avatar jambonrose avatar jessamynsmith avatar joshuadavidthomas avatar nedbat avatar pamelam avatar skeen avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.