Skip to main content

A Django app, which checks whether all model instances can be resaved without errors

Project description

# Django Validation Report

Django Validation Report (DVR) allows you to control whether all model instances can be resaved without errors.

Suppose you have a Model:

```py
class Person(models.Model):
is_monastic = models.BooleanField()
monastic_name = models.CharField(max_length=100, blank=True)
```

Later on, after there are already some Person objects in the database, you add a `clean` method to the model:

```py
def clean(self):
if self.is_monastic and not self.monastic_name:
raise ValidationError(
"If a Person is monastic, 'monastic_name' must be specified")
```

Now, it would be nice to control whether the old Person objects meet new standards. Otherwise unexpected ValidationErrors might be risen if the old ones are being resaved.

Django Validation Report offers a solution to this problem.

## Features

DVR provides:

1. a report view for logged in users
2. a `manage.py` command to show the report on the console
3. automatic report email sending to admins; this is designed to be addded to your CI/CD script

## Requirements

- Python 3
- Django 2 (should aslo work with previous versions, but it hasn't been tested. See issue [#1](https://github.com/eeriksp/django-validation-report/issues/1))

## Installation

Install using pip:

```
pip install django-validation-report
```

Then add `validation_report` to your INSTALLED_APPS.

```py
INSTALLED_APPS = [
...
'validation_report.apps.ValidationReportConfig',
]
```

To your main `urls.py` add:

```py
urlpatterns = [
...
path('validation-report/', include('validation_report.urls')),
]
```

Also make sure you have specified `LOGIN_URL` in your `settings.py`. In order to see the generated report, the user must be logged in. If you do not have a custom login page, you can just use the default admin login page `LOGIN_URL = '/admin/login/'`.

The emails are sent to `settings.ADMINS`, so check that this constant has been specified and email sending has been configured.

## Usage

### View

Go to `/validation-report/` URL. As a logged in user, you should see something like this:

```
Validation report

Run full_clean() for all Django model instances and return a report regarding failures.

Validating 'Person' with id '1' raised [ValidationError(["If a Person is monastic, 'monastic_name' must be specified"])]
Validating 'Person' with id '3' raised [ValidationError(["If a Person is monastic, 'monastic_name' must be specified"])]

Task completed, 2 errors detected
```


If an error occurred and the server stopped delivering the `StreamingHttpResponse` before all model instances were checked, an error message will be shown:

```
Validation report

Run full_clean() for all Django model instances and return a report regarding failures.

Validating 'Person' with id '1' raised [ValidationError(["If a Person is monastic, 'monastic_name' must be specified"])]

ERROR: Task was not completed, server response was interrupted.
```

### `Manage.py` command

Type

```
$ ./manage.py validationreport
```
The given report is similar to the one returned by the view in the previous chapter.

### Email sending

Type

```
$ ./manage.py validationreport --sendmail
```
You should see something like this:

```
Run `full_clean()` for all Django model instances and return a report regarding failures.
Validating 'Person' with id '1' raised [ValidationError(["If a Person is monastic, 'monastic_name' must be specified"])]
Validating 'Person' with id '3' raised [ValidationError(["If a Person is monastic, 'monastic_name' must be specified"])]
Task completed, 2 errors detected

The report was sent to the following addresses:
abbot@monastery.eu
```

This command is especially useful for adding to your CI/CD script, so you will be notified on time and all possible confusion can be avoided.

## License

DVR is published under MIT license.

Inspired by [SQLite developers](https://www.sqlite.org/different.html), we add the following blessing:

>May you do good and not evil\
May you find forgiveness for yourself and forgive others\
May you share freely, never taking more than you give.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-validation-report-1.0.1.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_validation_report-1.0.1-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file django-validation-report-1.0.1.tar.gz.

File metadata

  • Download URL: django-validation-report-1.0.1.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.2

File hashes

Hashes for django-validation-report-1.0.1.tar.gz
Algorithm Hash digest
SHA256 ba8ced15936509567442e90e14284fa155242b21ba674ffe13ccb47552bf77e5
MD5 291508a9442e716f46cc05246404b939
BLAKE2b-256 89e1ee314feba3f80d4d0005fbd51453b4e7fae60b9318a3833b82c58e749808

See more details on using hashes here.

File details

Details for the file django_validation_report-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: django_validation_report-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.2

File hashes

Hashes for django_validation_report-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 39998131076f5d1e027fefae16cc0992daf06e4e70e4c7d9f6101a6ebb743e37
MD5 4921c6ef3e2a19e5c03991a1ca00f130
BLAKE2b-256 0adbb5bf664d2916b819d8928f413e7db25db556cedd53714d7bfa6811835b2a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page