chore: Upgrade Python syntax with pyupgrade
Run with the following pre-commit configuration: ``` repos: - repo: https://github.com/asottile/pyupgrade rev: v3.1.0 hooks: - id: pyupgrade args: [ "--py3-plus", "--py36-plus", "--py37-plus" ] ``` The rationale for every change can be found at https://github.com/asottile/pyupgrade
This commit is contained in:
1 parent
92eab3c929
commit
bd4eb89b8c
29 files changed
+32
-65
No files matched your search
@@ -6,20 +6,20 @@ class Cache(dict):
|
|||||||
def __init__(self, django_folder, database, cache_path):
|
def __init__(self, django_folder, database, cache_path):
|
||||||
self.filename = os.path.join(
|
self.filename = os.path.join(
|
||||||
cache_path,
|
cache_path,
|
||||||
"{0}_{1}.pickle".format(django_folder.replace(os.sep, "_"), database),
|
"{}_{}.pickle".format(django_folder.replace(os.sep, "_"), database),
|
||||||
)
|
)
|
||||||
|
|
||||||
if not os.path.exists(os.path.dirname(self.filename)):
|
if not os.path.exists(os.path.dirname(self.filename)):
|
||||||
os.makedirs(os.path.dirname(self.filename))
|
os.makedirs(os.path.dirname(self.filename))
|
||||||
|
|
||||||
super(Cache, self).__init__()
|
super().__init__()
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
try:
|
try:
|
||||||
with open(self.filename, "rb") as f:
|
with open(self.filename, "rb") as f:
|
||||||
tmp_dict = pickle.load(f)
|
tmp_dict = pickle.load(f)
|
||||||
self.update(tmp_dict)
|
self.update(tmp_dict)
|
||||||
except IOError:
|
except OSError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ from ..utils import (
|
|||||||
CONFIG_NAME = "django_migration_linter"
|
CONFIG_NAME = "django_migration_linter"
|
||||||
PYPROJECT_TOML = "pyproject.toml"
|
PYPROJECT_TOML = "pyproject.toml"
|
||||||
DEFAULT_CONFIG_FILES = (
|
DEFAULT_CONFIG_FILES = (
|
||||||
".{}.cfg".format(CONFIG_NAME),
|
f".{CONFIG_NAME}.cfg",
|
||||||
"setup.cfg",
|
"setup.cfg",
|
||||||
"tox.ini",
|
"tox.ini",
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class Command(MakeMigrationsCommand):
|
|||||||
help = "Creates new migration(s) for apps and lints them."
|
help = "Creates new migration(s) for apps and lints them."
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
super(Command, self).add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--lint",
|
"--lint",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
@@ -49,10 +49,10 @@ class Command(MakeMigrationsCommand):
|
|||||||
self.warnings_as_errors = options["warnings_as_errors"]
|
self.warnings_as_errors = options["warnings_as_errors"]
|
||||||
self.sql_analyser = options["sql_analyser"]
|
self.sql_analyser = options["sql_analyser"]
|
||||||
configure_logging(options["verbosity"])
|
configure_logging(options["verbosity"])
|
||||||
return super(Command, self).handle(*app_labels, **options)
|
return super().handle(*app_labels, **options)
|
||||||
|
|
||||||
def write_migration_files(self, changes):
|
def write_migration_files(self, changes):
|
||||||
super(Command, self).write_migration_files(changes)
|
super().write_migration_files(changes)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
not getattr(settings, "MIGRATION_LINTER_OVERRIDE_MAKEMIGRATIONS", False)
|
not getattr(settings, "MIGRATION_LINTER_OVERRIDE_MAKEMIGRATIONS", False)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class MessageType(Enum):
|
|||||||
return list(map(lambda c: c.value, MessageType))
|
return list(map(lambda c: c.value, MessageType))
|
||||||
|
|
||||||
|
|
||||||
class MigrationLinter(object):
|
class MigrationLinter:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
path=None,
|
path=None,
|
||||||
@@ -263,17 +263,17 @@ class MigrationLinter(object):
|
|||||||
if lint_result.value in self.quiet:
|
if lint_result.value in self.quiet:
|
||||||
return
|
return
|
||||||
if not self.no_output:
|
if not self.no_output:
|
||||||
print("({0}, {1})... {2}".format(app_label, migration_name, msg))
|
print(f"({app_label}, {migration_name})... {msg}")
|
||||||
|
|
||||||
def print_errors(self, errors):
|
def print_errors(self, errors):
|
||||||
if MessageType.ERROR.value in self.quiet:
|
if MessageType.ERROR.value in self.quiet:
|
||||||
return
|
return
|
||||||
for err in errors:
|
for err in errors:
|
||||||
error_str = "\t{0}".format(err["msg"])
|
error_str = "\t{}".format(err["msg"])
|
||||||
if err.get("table"):
|
if err.get("table"):
|
||||||
error_str += " (table: {0}".format(err["table"])
|
error_str += " (table: {}".format(err["table"])
|
||||||
if err.get("column"):
|
if err.get("column"):
|
||||||
error_str += ", column: {0}".format(err["column"])
|
error_str += ", column: {}".format(err["column"])
|
||||||
error_str += ")"
|
error_str += ")"
|
||||||
if not self.no_output:
|
if not self.no_output:
|
||||||
print(error_str)
|
print(error_str)
|
||||||
@@ -291,10 +291,10 @@ class MigrationLinter(object):
|
|||||||
if self.no_output:
|
if self.no_output:
|
||||||
return
|
return
|
||||||
print("*** Summary ***")
|
print("*** Summary ***")
|
||||||
print("Valid migrations: {}/{}".format(self.nb_valid, self.nb_total))
|
print(f"Valid migrations: {self.nb_valid}/{self.nb_total}")
|
||||||
print("Erroneous migrations: {}/{}".format(self.nb_erroneous, self.nb_total))
|
print(f"Erroneous migrations: {self.nb_erroneous}/{self.nb_total}")
|
||||||
print("Migrations with warnings: {}/{}".format(self.nb_warnings, self.nb_total))
|
print(f"Migrations with warnings: {self.nb_warnings}/{self.nb_total}")
|
||||||
print("Ignored migrations: {}/{}".format(self.nb_ignored, self.nb_total))
|
print(f"Ignored migrations: {self.nb_ignored}/{self.nb_total}")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_errors(self):
|
def has_errors(self):
|
||||||
@@ -302,7 +302,7 @@ class MigrationLinter(object):
|
|||||||
|
|
||||||
def get_sql(self, app_label, migration_name):
|
def get_sql(self, app_label, migration_name):
|
||||||
logger.info(
|
logger.info(
|
||||||
"Calling sqlmigrate command {} {}".format(app_label, migration_name)
|
f"Calling sqlmigrate command {app_label} {migration_name}"
|
||||||
)
|
)
|
||||||
dev_null = open(os.devnull, "w")
|
dev_null = open(os.devnull, "w")
|
||||||
try:
|
try:
|
||||||
@@ -327,7 +327,7 @@ class MigrationLinter(object):
|
|||||||
from django.db.migrations.loader import MIGRATIONS_MODULE_NAME
|
from django.db.migrations.loader import MIGRATIONS_MODULE_NAME
|
||||||
|
|
||||||
return (
|
return (
|
||||||
re.search(r"/{0}/.*\.py".format(MIGRATIONS_MODULE_NAME), filename)
|
re.search(fr"/{MIGRATIONS_MODULE_NAME}/.*\.py", filename)
|
||||||
and "__init__" not in filename
|
and "__init__" not in filename
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -343,12 +343,12 @@ class MigrationLinter(object):
|
|||||||
|
|
||||||
migrations = []
|
migrations = []
|
||||||
try:
|
try:
|
||||||
with open(migrations_file_path, "r") as file:
|
with open(migrations_file_path) as file:
|
||||||
for line in file:
|
for line in file:
|
||||||
if cls.is_migration_file(line):
|
if cls.is_migration_file(line):
|
||||||
app_label, name = split_migration_path(line)
|
app_label, name = split_migration_path(line)
|
||||||
migrations.append((app_label, name))
|
migrations.append((app_label, name))
|
||||||
except IOError:
|
except OSError:
|
||||||
logger.exception("Migrations list path not found %s", migrations_file_path)
|
logger.exception("Migrations list path not found %s", migrations_file_path)
|
||||||
raise Exception("Error while reading migrations list file")
|
raise Exception("Error while reading migrations list file")
|
||||||
|
|
||||||
@@ -363,9 +363,9 @@ class MigrationLinter(object):
|
|||||||
migrations = []
|
migrations = []
|
||||||
# Get changes since specified commit
|
# Get changes since specified commit
|
||||||
git_diff_command = (
|
git_diff_command = (
|
||||||
"cd {0} && git diff --relative --name-only --diff-filter=AR {1}"
|
"cd {} && git diff --relative --name-only --diff-filter=AR {}"
|
||||||
).format(self.django_path, git_commit_id)
|
).format(self.django_path, git_commit_id)
|
||||||
logger.info("Executing {0}".format(git_diff_command))
|
logger.info(f"Executing {git_diff_command}")
|
||||||
diff_process = Popen(git_diff_command, shell=True, stdout=PIPE, stderr=PIPE)
|
diff_process = Popen(git_diff_command, shell=True, stdout=PIPE, stderr=PIPE)
|
||||||
for line in map(clean_bytes_to_str, diff_process.stdout.readlines()):
|
for line in map(clean_bytes_to_str, diff_process.stdout.readlines()):
|
||||||
# Only gather lines that include added migrations
|
# Only gather lines that include added migrations
|
||||||
@@ -537,7 +537,7 @@ class MigrationLinter(object):
|
|||||||
model = model.split(".", 1)[0]
|
model = model.split(".", 1)[0]
|
||||||
has_get_model_call = (
|
has_get_model_call = (
|
||||||
re.search(
|
re.search(
|
||||||
r"{}.*= +\w+\.get_model\(".format(model),
|
fr"{model}.*= +\w+\.get_model\(",
|
||||||
source_code,
|
source_code,
|
||||||
)
|
)
|
||||||
is not None
|
is not None
|
||||||
|
|||||||
@@ -36,13 +36,13 @@ def has_add_unique(sql_statements, **kwargs):
|
|||||||
|
|
||||||
concerned_table = regex_result.group(1)
|
concerned_table = regex_result.group(1)
|
||||||
table_is_added_in_transaction = any(
|
table_is_added_in_transaction = any(
|
||||||
sql.startswith("CREATE TABLE {}".format(concerned_table))
|
sql.startswith(f"CREATE TABLE {concerned_table}")
|
||||||
for sql in sql_statements
|
for sql in sql_statements
|
||||||
)
|
)
|
||||||
return not table_is_added_in_transaction
|
return not table_is_added_in_transaction
|
||||||
|
|
||||||
|
|
||||||
class BaseAnalyser(object):
|
class BaseAnalyser:
|
||||||
base_migration_tests = [
|
base_migration_tests = [
|
||||||
{
|
{
|
||||||
"code": "RENAME_TABLE",
|
"code": "RENAME_TABLE",
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ def has_create_index(sql_statements, **kwargs):
|
|||||||
|
|
||||||
concerned_table = regex_result.group(2)
|
concerned_table = regex_result.group(2)
|
||||||
table_is_added_in_transaction = any(
|
table_is_added_in_transaction = any(
|
||||||
sql.startswith("CREATE TABLE {}".format(concerned_table))
|
sql.startswith(f"CREATE TABLE {concerned_table}")
|
||||||
for sql in sql_statements
|
for sql in sql_statements
|
||||||
)
|
)
|
||||||
return not table_is_added_in_transaction
|
return not table_is_added_in_transaction
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ def get_migration_abspath(app_label, migration_name):
|
|||||||
from django.db.migrations.loader import MigrationLoader
|
from django.db.migrations.loader import MigrationLoader
|
||||||
|
|
||||||
module_name, _ = MigrationLoader.migrations_module(app_label)
|
module_name, _ = MigrationLoader.migrations_module(app_label)
|
||||||
migration_path = "{}.{}".format(module_name, migration_name)
|
migration_path = f"{module_name}.{migration_name}"
|
||||||
migration_module = import_module(migration_path)
|
migration_module = import_module(migration_path)
|
||||||
|
|
||||||
migration_file = migration_module.__file__
|
migration_file = migration_module.__file__
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ PROJECT_DIR = path.abspath(path.dirname(__file__))
|
|||||||
def get_version():
|
def get_version():
|
||||||
constants = path.join(PROJECT_DIR, "django_migration_linter", "constants.py")
|
constants = path.join(PROJECT_DIR, "django_migration_linter", "constants.py")
|
||||||
_version_re = re.compile(r"__version__\s+=\s+(?P<version>.*)")
|
_version_re = re.compile(r"__version__\s+=\s+(?P<version>.*)")
|
||||||
with open(constants, "r") as f:
|
with open(constants) as f:
|
||||||
match = _version_re.search(f.read())
|
match = _version_re.search(f.read())
|
||||||
version = match.group("version") if match is not None else '"unknown"'
|
version = match.group("version") if match is not None else '"unknown"'
|
||||||
return str(ast.literal_eval(version))
|
return str(ast.literal_eval(version))
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from django_migration_linter import MigrationLinter
|
|||||||
from tests import fixtures
|
from tests import fixtures
|
||||||
|
|
||||||
|
|
||||||
class BaseBackwardCompatibilityDetection(object):
|
class BaseBackwardCompatibilityDetection:
|
||||||
def setUp(self, *args, **kwargs):
|
def setUp(self, *args, **kwargs):
|
||||||
self.database = next(iter(self.databases))
|
self.database = next(iter(self.databases))
|
||||||
self.test_project_path = os.path.dirname(settings.BASE_DIR)
|
self.test_project_path = os.path.dirname(settings.BASE_DIR)
|
||||||
@@ -24,7 +24,7 @@ class BaseBackwardCompatibilityDetection(object):
|
|||||||
"app_unique_together",
|
"app_unique_together",
|
||||||
database=self.database,
|
database=self.database,
|
||||||
)
|
)
|
||||||
return super(BaseBackwardCompatibilityDetection, self).setUp(*args, **kwargs)
|
return super().setUp(*args, **kwargs)
|
||||||
|
|
||||||
def _test_linter_finds_errors(self, app=None, commit_id=None):
|
def _test_linter_finds_errors(self, app=None, commit_id=None):
|
||||||
linter = self._launch_linter(app, commit_id)
|
linter = self._launch_linter(app, commit_id)
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 14:54
|
# Generated by Django 1.11.18 on 2019-04-14 14:54
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 14:55
|
# Generated by Django 1.11.18 on 2019-04-14 14:55
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 14:56
|
# Generated by Django 1.11.18 on 2019-04-14 14:56
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 14:56
|
# Generated by Django 1.11.18 on 2019-04-14 14:56
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 14:59
|
# Generated by Django 1.11.18 on 2019-04-14 14:59
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 14:59
|
# Generated by Django 1.11.18 on 2019-04-14 14:59
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 14:59
|
# Generated by Django 1.11.18 on 2019-04-14 14:59
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 14:59
|
# Generated by Django 1.11.18 on 2019-04-14 14:59
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
# class A(models.Model):
|
# class A(models.Model):
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 15:02
|
# Generated by Django 1.11.18 on 2019-04-14 15:02
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 15:02
|
# Generated by Django 1.11.18 on 2019-04-14 15:02
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 15:00
|
# Generated by Django 1.11.18 on 2019-04-14 15:00
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11.18 on 2019-04-14 15:00
|
# Generated by Django 1.11.18 on 2019-04-14 15:00
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ class SqlAnalyserTestCase(unittest.TestCase):
|
|||||||
|
|
||||||
def assertValidSql(self, sql, allow_warnings=False):
|
def assertValidSql(self, sql, allow_warnings=False):
|
||||||
errors, _, warnings = self.analyse_sql(sql)
|
errors, _, warnings = self.analyse_sql(sql)
|
||||||
self.assertEqual(0, len(errors), "Found errors in sql: {}".format(errors))
|
self.assertEqual(0, len(errors), f"Found errors in sql: {errors}")
|
||||||
if not allow_warnings:
|
if not allow_warnings:
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
0, len(warnings), "Found warnings in sql: {}".format(errors)
|
0, len(warnings), f"Found warnings in sql: {errors}"
|
||||||
)
|
)
|
||||||
|
|
||||||
def assertBackwardIncompatibleSql(self, sql, code=None):
|
def assertBackwardIncompatibleSql(self, sql, code=None):
|
||||||
|
|||||||
Reference in new issue
Block a user