Do not rely on unreliable dir output and use exists query

This commit is contained in:
Alan Rominger
2022-10-10 11:19:52 -04:00
committed by Dave
parent 700de14c76
commit 1ebff23232

View File

@@ -5,6 +5,7 @@ import logging
import threading import threading
import time import time
import urllib.parse import urllib.parse
from pathlib import Path
from django.conf import settings from django.conf import settings
from django.contrib.auth import logout from django.contrib.auth import logout
@@ -202,16 +203,17 @@ class URLModificationMiddleware(MiddlewareMixin):
@memoize(ttl=20) @memoize(ttl=20)
def is_migrating(): def is_migrating():
last_applied = MigrationRecorder(connection).migration_qs.order_by('-applied').only('name').first().name latest_number = 0
last_number = int(last_applied.split('_', 1)[0]) latest_name = ''
for migration_name in dir(migrations): for migration_path in Path(migrations.__path__[0]).glob('[0-9]*.py'):
try: try:
migration_number = int(migration_name.split('_', 1)[0]) migration_number = int(migration_path.name.split('_', 1)[0])
except ValueError: except ValueError:
continue continue
if migration_number > last_number: if migration_number > latest_number:
return True latest_number = migration_number
return False latest_name = migration_path.name[: -len('.py')]
return not MigrationRecorder(connection).migration_qs.filter(app='main', name=latest_name).exists()
class MigrationRanCheckMiddleware(MiddlewareMixin): class MigrationRanCheckMiddleware(MiddlewareMixin):