diff --git a/README.md b/README.md index 9bbb320..f7caed5 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/migration_checker.py b/migration_linter.py similarity index 94% rename from migration_checker.py rename to migration_linter.py index cf1dece..8ea9969 100644 --- a/migration_checker.py +++ b/migration_linter.py @@ -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() diff --git a/test_migration_checker.py b/test_migration_linter.py similarity index 63% rename from test_migration_checker.py rename to test_migration_linter.py index b52acef..5d9c5a3 100644 --- a/test_migration_checker.py +++ b/test_migration_linter.py @@ -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')