mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	import: Replace generic Exception with CommandError.
This change improves error handling in `do_import_realm` by replacing the use of a generic Exception with CommandError. The updated approach provides clearer, user-friendly error messages when there is a version mismatch between the exported data and the Zulip server. Fixes #32292.
This commit is contained in:
		@@ -13,6 +13,7 @@ import pyvips
 | 
			
		||||
from bs4 import BeautifulSoup
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from django.core.cache import cache
 | 
			
		||||
from django.core.management.base import CommandError
 | 
			
		||||
from django.core.validators import validate_email
 | 
			
		||||
from django.db import connection, transaction
 | 
			
		||||
from django.db.backends.utils import CursorWrapper
 | 
			
		||||
@@ -2122,10 +2123,10 @@ def check_migration_status(exported_migration_status: MigrationStatusJson) -> No
 | 
			
		||||
    exported_primary_version = exported_migration_status["zulip_version"].split(".")[0]
 | 
			
		||||
    local_primary_version = local_migration_status["zulip_version"].split(".")[0]
 | 
			
		||||
    if exported_primary_version != local_primary_version:
 | 
			
		||||
        raise Exception(
 | 
			
		||||
            "Export was generated on a different Zulip major version.\n"
 | 
			
		||||
            f"Export={exported_migration_status['zulip_version']}\n"
 | 
			
		||||
            f"Server={local_migration_status['zulip_version']}"
 | 
			
		||||
        raise CommandError(
 | 
			
		||||
            "Error: Export was generated on a different Zulip major version.\n"
 | 
			
		||||
            f"Export version: {exported_migration_status['zulip_version']}\n"
 | 
			
		||||
            f"Server version: {local_migration_status['zulip_version']}"
 | 
			
		||||
        )
 | 
			
		||||
    exported_migrations_by_app = exported_migration_status["migrations_by_app"]
 | 
			
		||||
    local_migrations_by_app = local_migration_status["migrations_by_app"]
 | 
			
		||||
@@ -2160,13 +2161,13 @@ def check_migration_status(exported_migration_status: MigrationStatusJson) -> No
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        error_message = (
 | 
			
		||||
            "Export was generated on a different Zulip version.\n"
 | 
			
		||||
            f"Export={exported_migration_status['zulip_version']}\n"
 | 
			
		||||
            f"Server={local_migration_status['zulip_version']}\n"
 | 
			
		||||
            "Error: Export was generated on a different Zulip version.\n"
 | 
			
		||||
            f"Export version: {exported_migration_status['zulip_version']}\n"
 | 
			
		||||
            f"Server version: {local_migration_status['zulip_version']}\n"
 | 
			
		||||
            "\n"
 | 
			
		||||
            "Database formats differ between the exported realm and this server.\n"
 | 
			
		||||
            "Printing migrations that differ between the versions:\n"
 | 
			
		||||
            "--- exported realm\n"
 | 
			
		||||
            "+++ this server"
 | 
			
		||||
        ) + "\n".join(sorted_error_log)
 | 
			
		||||
        raise Exception(error_message)
 | 
			
		||||
        raise CommandError(error_message)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
Export was generated on a different Zulip version.
 | 
			
		||||
Export={version_placeholder}
 | 
			
		||||
Server={version_placeholder}
 | 
			
		||||
Error: Export was generated on a different Zulip version.
 | 
			
		||||
Export version: {version_placeholder}
 | 
			
		||||
Server version: {version_placeholder}
 | 
			
		||||
 | 
			
		||||
Database formats differ between the exported realm and this server.
 | 
			
		||||
Printing migrations that differ between the versions:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
Export was generated on a different Zulip version.
 | 
			
		||||
Export={version_placeholder}
 | 
			
		||||
Server={version_placeholder}
 | 
			
		||||
Error: Export was generated on a different Zulip version.
 | 
			
		||||
Export version: {version_placeholder}
 | 
			
		||||
Server version: {version_placeholder}
 | 
			
		||||
 | 
			
		||||
Database formats differ between the exported realm and this server.
 | 
			
		||||
Printing migrations that differ between the versions:
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ from unittest.mock import patch
 | 
			
		||||
import orjson
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from django.core.exceptions import ValidationError
 | 
			
		||||
from django.core.management.base import CommandError
 | 
			
		||||
from django.db.models import Q, QuerySet
 | 
			
		||||
from django.utils.timezone import now as timezone_now
 | 
			
		||||
from typing_extensions import override
 | 
			
		||||
@@ -2199,7 +2200,7 @@ class RealmImportExportTest(ExportFile):
 | 
			
		||||
 | 
			
		||||
        with (
 | 
			
		||||
            patch("zerver.lib.import_realm.ZULIP_VERSION", "8.0"),
 | 
			
		||||
            self.assertRaises(Exception) as e,
 | 
			
		||||
            self.assertRaises(CommandError) as e,
 | 
			
		||||
            self.assertLogs(level="INFO"),
 | 
			
		||||
        ):
 | 
			
		||||
            do_import_realm(
 | 
			
		||||
@@ -2207,9 +2208,9 @@ class RealmImportExportTest(ExportFile):
 | 
			
		||||
                "test-zulip",
 | 
			
		||||
            )
 | 
			
		||||
        expected_error_message = (
 | 
			
		||||
            "Export was generated on a different Zulip major version.\n"
 | 
			
		||||
            f"Export={ZULIP_VERSION}\n"
 | 
			
		||||
            "Server=8.0"
 | 
			
		||||
            "Error: Export was generated on a different Zulip major version.\n"
 | 
			
		||||
            f"Export version: {ZULIP_VERSION}\n"
 | 
			
		||||
            "Server version: 8.0"
 | 
			
		||||
        )
 | 
			
		||||
        self.assertEqual(expected_error_message, str(e.exception))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user