Source code for swh.web.utils.management.commands.rename_app
# Copyright (C) 2022 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU Affero General Public License version 3, or any later version
# See top-level LICENSE file for more information
"""
A Django Management Command to rename existing Django Applications.
Adapted from https://github.com/odwyersoftware/django-rename-app
"""
import logging
from django.core.management.base import BaseCommand
from django.db import connection
logger = logging.getLogger(__name__)
[docs]
class Command(BaseCommand):
help = (
"Renames a Django Application. Usage rename_app [old_app_name] [new_app_name]"
)
[docs]
def add_arguments(self, parser):
parser.add_argument("old_app_name", nargs=1, type=str)
parser.add_argument("new_app_name", nargs=1, type=str)
[docs]
def handle(self, old_app_name, new_app_name, *args, **options):
with connection.cursor() as cursor:
old_app_name = old_app_name[0]
new_app_name = new_app_name[0]
try:
cursor.execute(
"SELECT * FROM django_content_type "
f"where app_label='{new_app_name}'"
)
has_already_been_ran = cursor.fetchone()
if has_already_been_ran:
logger.info(
"Renaming app %s to %s has already been done, exiting without "
"making any changes",
old_app_name,
new_app_name,
)
return None
cursor.execute(
f"UPDATE django_content_type SET app_label='{new_app_name}' "
f"WHERE app_label='{old_app_name}'"
)
cursor.execute(
f"UPDATE django_migrations SET app='{new_app_name}' "
f"WHERE app='{old_app_name}'"
)
except Exception as e:
logger.info(
"Error while trying to rename app %s to %s: %s",
old_app_name,
new_app_name,
str(e),
)
return None