Collection of useful checks for Django Checks Framework
Project description
Django Extra Checks
Collection of useful checks for Django Checks Frameworks
Checks
Models
- extra-checks-config - settings.EXTRA_CHECKS is valid config for django-extra-checks (always enabled).
- model-attribute - Each Model in the project must have all attributes from
attrssetting specified. - model-meta-attribute - Each Model.Meta in the project must have all attributes from
attrssetting specified. - no-unique-together - Use
UniqueConstraintwith theconstraintsoption instead. - no-index-together - [DEPRECATED] Use the
indexesoption instead. - model-admin - Each model must be registered in admin.
- field-file-upload-to -
FileField/ImageFieldmust have non emptyupload_toargument. - field-verbose-name - All model's fields must have verbose name.
- field-verbose-name-gettext -
verbose_namemust use gettext. - field-verbose-name-gettext-case - Words in text wrapped with gettext must be in one case.
- field-help-text-gettext -
help_textmust use gettext. - field-text-null - text fields shouldn't use
null=True. - field-boolean-null - [DEPRECATED] prefer using
BooleanField(null=True)instead ofNullBooleanField. - field-null - don't pass
null=Falseto model fields (this is django default). - field-foreign-key-db-index - ForeignKey fields must specify
db_indexexplicitly (to apply only to fields in indexes:when: indexes). - field-related-name - Related fields must specify
related_nameexplicitly. - field-default-null - If field nullable (
null=True), thendefault=Noneargument is redundant and should be removed. WARNING Be aware that setting is database dependent, eg. Oracle interprets empty strings as nulls as a result django uses empty string instead of null as default. - field-choices-constraint - Fields with choices must have companion CheckConstraint to enforce choices on database level, details.
DRF Serializers
- drf-model-serializer-extra-kwargs - ModelSerializer's extra_kwargs must not include fields that specified on serializer.
- drf-model-serializer-meta-attribute - Each ModelSerializer.Meta must have all attributes specified in
attrs, use case.
Installation
Install with pip install django-extra-checks
Add extra_checks to INSTALLED_APPS (use extra_checks.apps.ExtraChecksConfig for Django versions prior to 3.2).
Settings
To enable some check define EXTRA_CHECKS setting with a dict of checks and its settings:
EXTRA_CHECKS = {
"checks": [
# require non empty `upload_to` argument.
"field-file-upload-to",
# use dict form if check need configuration
# eg. all models must have fk to Site model
{"id": "model-attribute", "attrs": ["site"]},
# require `db_table` for all models, increase level to CRITICAL
{"id": "model-meta-attribute", "attrs": ["db_table"], "level": "CRITICAL"},
]
}
By default only your project apps are checked but you can use
include_apps option to specify apps to check (including third party apps):
EXTRA_CHECKS = {
# use same names as in INSTALLED_APPS
"include_apps": ["django.contrib.sites", "my_app"],
...
}
Ignoring check problems
Use extra-checks-disable-next-line comment to disable checks:
# disable specific checks on model
# extra-checks-disable-next-line model-attribute, model-admin
class MyModel(models.Model):
# disable all checks on image field
# extra-checks-disable-next-line
image = models.ImageField()
# separate comments and check's codes are also supported
# extra-checks-disable-next-line X014
# extra-checks-disable-next-line no-unique-together
class Meta:
...
Another way is to provide function that accepts field, model or
serializer class as its first argument and returns True if it must be skipped.
Be aware that the more computation expensive your skipif functions the
slower django check will run.
skipif example:
def skipif_streamfield(field, *args, **kwargs):
return isinstance(field, wagtail.core.fields.StreamField)
def skipif_non_core_app(model_cls, *args, **kwargs):
return model_cls._meta.app_label != "my_core_app"
EXTRA_CHECKS = {
"check": [
{
"id": "field-verbose-name-gettext",
# make this check skip wagtail's StreamField
"skipif": skipif_streamfield
},
{
"id": "model-admin",
# models from non core app shouldn't be registered in admin
"skipif": skipif_non_core_app,
},
]
}
Development
Install dev deps in virtualenv pip install -e .[dev,test].
Credits
The project was built using ideas and code snippets from:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_extra_checks-0.14.0.tar.gz.
File metadata
- Download URL: django_extra_checks-0.14.0.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f3436d485ef23b0836afc6d7447b53bd64a088ba0a1a617d9500e876548fb77
|
|
| MD5 |
30faa850903935059e9aa4a8d0bfdc9c
|
|
| BLAKE2b-256 |
4a346dd2d363f9ffe95602c9473537db7caa6bad712d33c05e34785161e9e6bb
|
File details
Details for the file django_extra_checks-0.14.0-py3-none-any.whl.
File metadata
- Download URL: django_extra_checks-0.14.0-py3-none-any.whl
- Upload date:
- Size: 21.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e0d7413bac22eae7c26bf1b1be4eb7c7e5b86eb7eaa3f9c546c910553f6fbcf
|
|
| MD5 |
f17519f083283bf1dbb30c808a3ce8ac
|
|
| BLAKE2b-256 |
d23b658bb9a9968c51abf4c1c069bc2e6bbf2f0bc7a67e5920beb83c7b99a712
|