Skip to main content

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 attrs setting specified.
  • model-meta-attribute - Each Model.Meta in the project must have all attributes from attrs setting specified.
  • no-unique-together - Use UniqueConstraint with the constraints option instead.
  • model-admin - Each model must be registered in admin.
  • field-file-upload-to - FileField / ImageField must have non empty upload_to argument.
  • field-verbose-name - All model's fields must have verbose name.
  • field-verbose-name-gettext - verbose_name must use gettext.
  • field-verbose-name-gettext-case - Words in text wrapped with gettext must be in one case.
  • field-help-text-gettext - help_text must use gettext.
  • field-text-null - text fields shouldn't use null=True.
  • field-null - don't pass null=False to model fields (this is django default).
  • field-foreign-key-db-index - ForeignKey fields must specify db_index explicitly (to apply only to fields in indexes: when: indexes).
  • field-related-name - Related fields must specify related_name explicitly.
  • field-default-null - If field nullable (null=True), then default=None argument 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 in your Django settings:

INSTALLED_APPS = [
    ...,
    "django.contrib.admin",  # make sure this comes before 'extra_checks' if you plan to use the `model-admin` check
    "extra_checks",
    ...
]

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 = {
    "checks": [
        {
            "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 uv sync, run tests uv run pytest.

Credits

The project was built using ideas and code snippets from:

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_extra_checks-0.17.0.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

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

django_extra_checks-0.17.0-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file django_extra_checks-0.17.0.tar.gz.

File metadata

  • Download URL: django_extra_checks-0.17.0.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_extra_checks-0.17.0.tar.gz
Algorithm Hash digest
SHA256 619f79f37de23931d08539ed97b2b945c2887c73f753eccc98544ffd3f7d3e60
MD5 9e6c93f6eb001942c953b18befa0601d
BLAKE2b-256 632b2ce50c5736d00a39f737944d7a174cef154368b0b10a6164c614a60c22ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_extra_checks-0.17.0.tar.gz:

Publisher: main.yml on kalekseev/django-extra-checks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_extra_checks-0.17.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_extra_checks-0.17.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f41e2e4455e5467aa9b3e28500d4d140b9fb9eedf5e42e0fb71498846813608a
MD5 a0fde0c27ab1edfd5b4732ded28d6cf7
BLAKE2b-256 583d92f6b4727b936ed293eafad1236600cb7bd36b27d189abea59dd6f65bebf

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_extra_checks-0.17.0-py3-none-any.whl:

Publisher: main.yml on kalekseev/django-extra-checks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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