Rename to linter
This commit is contained in:
1 parent
69cf2fe7b5
commit
3b7d567d72
3 files changed
+17
-19
No files matched your search
@@ -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)
|
||||
@@ -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')
|
||||
Reference in new issue
Block a user