Skip to main content

Detect backward incompatible migrations for your django project

Project description

Detect backward incompatible migrations for your django project. It will save you time by making sure migrations will not break anything.

https://travis-ci.org/3YOURMIND/django-migration-linter.svg?branch=master https://img.shields.io/pypi/v/django-migration-linter.svg https://img.shields.io/github/license/3yourmind/django-migration-linter.svg https://img.shields.io/badge/PR-welcome-green.svg https://img.shields.io/badge/3YOURMIND-Hiring-brightgreen.svg https://img.shields.io/github/stars/3YOURMIND/django-migration-linter.svg?style=social&label=Stars

Installation

pip install django-migration-linter

Usage

django-migration-linter DJANGO_PROJECT_FOLDER [GIT_COMMIT_ID] [--ignore-name-contains=IGNORE_NAME_CONTAINS] [--include-apps INCLUDE_APPS [INCLUDE_APPS ...] | --exclude-apps EXCLUDE_APPS [EXCLUDE_APPS ...]]

Parameter

Description

DJANGO_PROJECT_FOLDER

An absolute or relative path to the django project.

GIT_COMMIT_ID

If specified, only migrations since this commit will be taken into account. If not specified, all migrations will be linted.

--ignore-name-contains IGNORE_NAME_CONTAINS

Ignore migrations containing this name.

--ignore-name IGNORE_NAME [IGNORE_NAME ...]

Ignore migrations with exactly one of these names.

--include-apps INCLUDE_APPS [INCLUDE_APPS ...]

Check only migrations that are in the specified django apps.

--exclude-apps EXCLUDE_APPS [EXCLUDE_APPS ...]

Ignore migrations that are in the specified django apps.

--verbose or -v

Print more information during execution.

--database DATABASE

Specify the database for which to generate the SQL. Defaults to default.

--cache-path PATH

specify a directory that should be used to store cache-files in.

--no-cache

Don’t use a cache.

Examples

3YOURMIND is running the linter on every build getting pushed through CI. Checkout the examples/ folder to see how you could integrate the linter in your test suite.

Backward incompatible migrations

The linter analyses your migrations and checks the SQL for:

  • Added NOT NULL columns, which don’t have a DEFAULT value

  • Dropping columns

  • Renaming columns

  • Renaming tables

  • Altering columns (which can be backward compatible and eventually ignored)

Those are the most important and frequent backward incompatible migrations. We are happy to add more if you have some.

Ignoring migrations

You can also ignore migrations by adding this to your migrations:

import django_migration_linter as linter
# ...

    operations = [
        linter.IgnoreMigration(),
        # ...
    ]
# ...

Cache

By default, the linter uses a cache to prevent linting the same migration again. The default location of the cache on Linux is /home/<username>/.cache/django-migration-linter/<version>/<ldjango-project>.pickle.

Since the linter uses hashes, modifying migration files, will re-run the linter on that migration. If you want to run the linter without cache, use the flag --no-cache. If you want to invalidate the cache, delete the cache folder.

Tests

The easiest way to run the tests is to invoke tox.

Contributing

First, thank you very much if you want to contribute to the project. Please base your work on the master branch and also target this branch in your pull request.

Blog post

Keeping Django database migrations backward compatible

License

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

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

Uploaded Source

Built Distribution

django_migration_linter-0.1.5-py2.py3-none-any.whl (27.0 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: django-migration-linter-0.1.5.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.6.7

File hashes

Hashes for django-migration-linter-0.1.5.tar.gz
Algorithm Hash digest
SHA256 a38c3cc1d8feef48d0f9a24446ab424409385bfc4dd4a88cc3fe226abac1b89f
MD5 e163d6c90bd557b12272452d2442418f
BLAKE2b-256 b4f1f9c1c9e07ae9c168e912a19d16388f4ce7f77d59cad3f763192307aa754c

See more details on using hashes here.

File details

Details for the file django_migration_linter-0.1.5-py2.py3-none-any.whl.

File metadata

  • Download URL: django_migration_linter-0.1.5-py2.py3-none-any.whl
  • Upload date:
  • Size: 27.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.29.1 CPython/3.6.7

File hashes

Hashes for django_migration_linter-0.1.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4a836903c3fbceb0ba5e7d3ed60ebb0afea2536f6802a71ece2ac77aeb43de18
MD5 4a3ff176fa5b966926682f516c5e12df
BLAKE2b-256 066a94162ef5e8bea3356f55d5bcec93ff189f6d2e2c592aeef8c5f20d416b8c

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