Skip to main content

Detect backward incompatible migrations for your django project

Project description

Django migration linter

Detect backward incompatible migrations for your Django project. It will save you time by making sure migrations will not break with a older codebase.

Build Status PyPI PR_Welcome 3YD_Hiring GitHub_Stars

Quick installation

pip install django-migration-linter

And add the migration linter to your INSTALLED_APPS:

INSTALLED_APPS = [
    ...,
    "django_migration_linter",
    ...,
]

Optionally, add a configuration:

MIGRATION_LINTER_OPTIONS = {
    ...
}

For details about configuration options, checkout Usage.

Usage example

$ python manage.py lintmigrations

(app_add_not_null_column, 0001_create_table)... OK
(app_add_not_null_column, 0002_add_new_not_null_field)... ERR
        NOT NULL constraint on columns
(app_drop_table, 0001_initial)... OK
(app_drop_table, 0002_delete_a)... ERR
        DROPPING table
(app_ignore_migration, 0001_initial)... OK
(app_ignore_migration, 0002_ignore_migration)... IGNORE
(app_rename_table, 0001_initial)... OK
(app_rename_table, 0002_auto_20190414_1500)... ERR
        RENAMING tables

*** Summary ***
Valid migrations: 4/8
Erroneous migrations: 3/8
Migrations with warnings: 0/8
Ignored migrations: 1/8

The linter analysed all migrations from the Django project. It found 3 migrations that are doing backward incompatible operations and 1 that is explicitly ignored. The list of incompatibilities that the linter analyses can be found at docs/incompatibilities.md.

More advanced usages of the linter and options can be found at docs/usage.md.

Integration

One can either integrate the linter in the CI using its lintmigrations command, or detect incompatibilities during generation of migrations with

$ python manage.py makemigrations --lint

Migrations for 'app_correct':
  tests/test_project/app_correct/migrations/0003_a_column.py
    - Add field column to a
Linting for 'app_correct':
(app_correct, 0003_a_column)... ERR
        NOT NULL constraint on columns

The migration linter detected that this migration is not backward compatible.
- If you keep the migration, you will want to fix the issue or ignore the migration.
- By default, the newly created migration file will be deleted.
Do you want to keep the migration? [y/N] n
Deleted tests/test_project/app_correct/migrations/0003_a_column.py

The linter found that the newly created migration is not backward compatible and deleted the file after confirmation. This behaviour can be the default of the makemigrations command through the MIGRATION_LINTER_OVERRIDE_MAKEMIGRATIONS Django setting. Find out more about the makemigrations command at docs/makemigrations.md.

More information

Please find more documentation in the docs/ folder.

Some implementation details can be found in the ./docs/internals/ folder.

Blog post

They talk about the linter

Related

  • django-test-migrations - Test django schema and data migrations, including migrations' order and best practices.

License

django-migration-linter is released under the Apache 2.0 License.

Maintained by David Wobrock

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_migration_linter-6.0.0.tar.gz (35.9 kB view details)

Uploaded Source

Built Distribution

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

django_migration_linter-6.0.0-py3-none-any.whl (27.7 kB view details)

Uploaded Python 3

File details

Details for the file django_migration_linter-6.0.0.tar.gz.

File metadata

  • Download URL: django_migration_linter-6.0.0.tar.gz
  • Upload date:
  • Size: 35.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.1

File hashes

Hashes for django_migration_linter-6.0.0.tar.gz
Algorithm Hash digest
SHA256 b7fdd4fe55862795378d99b4d8d80d454408c22647909d0fa533b63f9545c63e
MD5 5a94d46c683bfefe01066dabee4b9c9d
BLAKE2b-256 5c0cfed1d01477ecb8547750df6b4922129cbf4bab26433df77c81fa77da06df

See more details on using hashes here.

File details

Details for the file django_migration_linter-6.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_migration_linter-6.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8fbac51a77fbe86d814e2b996b80aa831d21499982085cda1cacc84b7b4971a5
MD5 524599b77987d9d12b00313ed2f067c6
BLAKE2b-256 65221f99542f53f0f55ad766ed2fe4c788f1a6120dbdbb2d05446c5127dfb84e

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