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 codecov PyPI PR_Welcome 3YD_Hiring GitHub_Stars

Quick installation

pip install django-migration-linter

And add the migration linter your INSTALLED_APPS:

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

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-4.1.0.tar.gz (49.8 kB view details)

Uploaded Source

Built Distribution

django_migration_linter-4.1.0-py3-none-any.whl (92.2 kB view details)

Uploaded Python 3

File details

Details for the file django-migration-linter-4.1.0.tar.gz.

File metadata

  • Download URL: django-migration-linter-4.1.0.tar.gz
  • Upload date:
  • Size: 49.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.8.10

File hashes

Hashes for django-migration-linter-4.1.0.tar.gz
Algorithm Hash digest
SHA256 418f5ecee833576b79da213e4fc11f56f36e65ea190b7e62a3d8217c487b7635
MD5 5b51a99e29d41d45e622f67cab3fc68f
BLAKE2b-256 7afd80041701f72b59423e9648c12fe783aff1f0c0986873a713bdd4ca32282d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: django_migration_linter-4.1.0-py3-none-any.whl
  • Upload date:
  • Size: 92.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.8.10

File hashes

Hashes for django_migration_linter-4.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5d47577231d91a6d2c524066a07808d6e36086e1b8d9a52eb14b0d21246cc597
MD5 5bdb07fdd18ae1de966fc28cebb6f953
BLAKE2b-256 d9eb25d4ab8ff48ec2b4339f0a8c6007291943c3fcf7fae505d84f7b4d959ed2

See more details on using hashes here.

Supported by

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