Add Django management command to launch the linter
This commit is contained in:
1 parent
f05a986973
commit
0eb584889a
3 files changed
+103
No files matched your search
Whitespace-only changes.
Whitespace-only changes.
@@ -0,0 +1,103 @@
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
from importlib import import_module
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from django_migration_linter import MigrationLinter
|
||||
from django_migration_linter.constants import __version__
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Lint your migrations"
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
"commit_id",
|
||||
metavar="GIT_COMMIT_ID",
|
||||
type=str,
|
||||
nargs="?",
|
||||
help=(
|
||||
"if specified, only migrations since this commit "
|
||||
"will be taken into account. If not specified, "
|
||||
"the initial repo commit will be used"
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--ignore-name-contains",
|
||||
type=str,
|
||||
nargs="?",
|
||||
help="ignore migrations containing this name",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--ignore-name",
|
||||
type=str,
|
||||
nargs="*",
|
||||
help="ignore migrations with exactly one of these names",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--database",
|
||||
type=str,
|
||||
nargs="?",
|
||||
help=(
|
||||
"specify the database for which to generate the SQL. "
|
||||
"Defaults to default"
|
||||
),
|
||||
)
|
||||
|
||||
cache_group = parser.add_mutually_exclusive_group(required=False)
|
||||
cache_group.add_argument(
|
||||
"--cache-path",
|
||||
type=str,
|
||||
help="specify a directory that should be used to store cache-files in.",
|
||||
)
|
||||
cache_group.add_argument(
|
||||
"--no-cache", action="store_true", help="don't use a cache"
|
||||
)
|
||||
|
||||
incl_excl_group = parser.add_mutually_exclusive_group(required=False)
|
||||
incl_excl_group.add_argument(
|
||||
"--include-apps",
|
||||
type=str,
|
||||
nargs="*",
|
||||
help="check only migrations that are in the specified django apps",
|
||||
)
|
||||
incl_excl_group.add_argument(
|
||||
"--exclude-apps",
|
||||
type=str,
|
||||
nargs="*",
|
||||
help="ignore migrations that are in the specified django apps",
|
||||
)
|
||||
|
||||
# args = parser.parse_args()
|
||||
|
||||
# folder_name = args.django_folder[0]
|
||||
|
||||
def handle(self, *args, **options):
|
||||
settings_path = os.path.dirname(
|
||||
import_module(os.getenv("DJANGO_SETTINGS_MODULE")).__file__
|
||||
)
|
||||
|
||||
if options["verbosity"] > 1:
|
||||
logging.basicConfig(format="%(message)s", level=logging.DEBUG)
|
||||
else:
|
||||
logging.basicConfig(format="%(message)s")
|
||||
|
||||
linter = MigrationLinter(
|
||||
settings_path,
|
||||
ignore_name_contains=options["ignore_name_contains"],
|
||||
ignore_name=options["ignore_name"],
|
||||
include_apps=options["include_apps"],
|
||||
exclude_apps=options["exclude_apps"],
|
||||
database=options["database"],
|
||||
cache_path=options["cache_path"],
|
||||
no_cache=options["no_cache"],
|
||||
)
|
||||
linter.lint_all_migrations(git_commit_id=options["commit_id"])
|
||||
linter.print_summary()
|
||||
if linter.has_errors:
|
||||
sys.exit(1)
|
||||
|
||||
def get_version(self):
|
||||
return __version__
|
||||
Reference in new issue
Block a user