Rename to linter

This commit is contained in:
david_wobrock committed 2017-04-05 14:41:44 +02:00
1 parent 69cf2fe7b5
commit 3b7d567d72
3 files changed
+17 -19

No files matched your search

+6 -9
View File
@@ -1,10 +1,10 @@
# Django migration checker
# Django migration linter
Detect backward incompatible migrations for your django projects. All in one file.
Detect backward incompatible migrations for your django project. All in one file.
## Usage
`python migration_checker.py DJANGO_PROJECT_FOLDER [GIT_COMMIT_ID] [--ignore-name-contains=IGNORE_NAME_CONTAINS] [--include-apps INCLUDE_APPS [INCLUDE_APPS ...] | --exclude-apps EXCLUDE_APPS [EXCLUDE_APPS ...]]`
`python migration_linter.py DJANGO_PROJECT_FOLDER [GIT_COMMIT_ID] [--ignore-name-contains=IGNORE_NAME_CONTAINS] [--include-apps INCLUDE_APPS [INCLUDE_APPS ...] | --exclude-apps EXCLUDE_APPS [EXCLUDE_APPS ...]]`
* `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, the initial repo commit will be used.
@@ -20,20 +20,17 @@ Needed software (in PATH):
* `git`
* UNIX command line tools like `tail`
The checker will try to detect whether if the project is a django project and is versioned with git.
The linter will try to detect whether if the project is a django project and is versioned with git.
## Tests
Launch the tests with: `python -m unittest test_migration_checker`
Launch the tests with: `python -m unittest test_migration_linter`
More test are to be written.
## Improvements
* Add an appropriate license
* More tests (always!)
* Detect data migration (not only scheme migrations)
* Detection dependent on specified database (mysql, postgresql, ...)
## Credits
[3YOURMIND GmbH](https://www.3yourmind.com)
+7 -6
View File
@@ -5,7 +5,7 @@ import re
from subprocess import Popen, PIPE
class MigrationChecker:
class MigrationLinter:
MIGRATION_FOLDER_NAME = 'migrations'
migration_tests = (
@@ -52,7 +52,7 @@ class MigrationChecker:
if diff_process.returncode != 0:
raise Exception('Error while executing git diff command')
def check_migrations(self):
def lint_migrations(self):
nb_valid = 0
nb_erroneous = 0
nb_ignore = 0
@@ -80,10 +80,11 @@ class MigrationChecker:
print('*** Summary:')
print('Valid migrations: {0}/{1} - erroneous migrations: {2}/{1} - ignored migrations: {3}/{1}'.format(nb_valid, len(self.changed_migration_files), nb_erroneous, nb_ignore))
def _split_migration_path(self, migration_path):
@classmethod
def _split_migration_path(cls, migration_path):
decomposed_path = split_path(migration_path)
for i, p in enumerate(decomposed_path):
if p == self.MIGRATION_FOLDER_NAME:
if p == cls.MIGRATION_FOLDER_NAME:
return decomposed_path[i-1], os.path.splitext(decomposed_path[i+1])[0]
def should_ignore_migration(self, app_name, migration_name):
@@ -145,5 +146,5 @@ if __name__ == '__main__':
folder_name = args.django_folder[0]
if valid_folder(folder_name):
checker = MigrationChecker(folder_name, args.commit_id, ignore_name_contains=args.ignore_name_contains, include_apps=args.include_apps, exclude_apps=args.exclude_apps)
checker.check_migrations()
linter = MigrationLinter(folder_name, args.commit_id, ignore_name_contains=args.ignore_name_contains, include_apps=args.include_apps, exclude_apps=args.exclude_apps)
linter.lint_migrations()
@@ -1,17 +1,17 @@
import unittest
import checker
from migration_linter import MigrationLinter
class CheckerTest(unittest.TestCase):
class LinterTest(unittest.TestCase):
def test_split_migration_path(self):
input_path = 'apps/the_app/migrations/0001_stuff.py'
app, mig = checker.split_migration_path(input_path)
app, mig = MigrationLinter._split_migration_path(input_path)
self.assertEqual(app, 'the_app')
self.assertEqual(mig, '0001_stuff')
def test_split_migration_path_2(self):
input_path = 'the_app/migrations/0001_stuff.py'
app, mig = checker.split_migration_path(input_path)
app, mig = MigrationLinter._split_migration_path(input_path)
self.assertEqual(app, 'the_app')
self.assertEqual(mig, '0001_stuff')