Commit cc4b4d9f authored by Claude Paroz's avatar Claude Paroz
Browse files

Used CommandError in createcachetable command.

Raising CommandError whenever a management command meets an error
condition is the standard way to handle errors in commands.
parent f2b6763a
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
from optparse import make_option

from django.core.cache.backends.db import BaseDatabaseCache
from django.core.management.base import LabelCommand
from django.core.management.base import LabelCommand, CommandError
from django.db import connections, router, transaction, models, DEFAULT_DB_ALIAS
from django.db.utils import DatabaseError

@@ -55,11 +55,10 @@ class Command(LabelCommand):
        try:
            curs.execute("\n".join(full_statement))
        except DatabaseError as e:
            self.stderr.write(
            transaction.rollback_unless_managed(using=db)
            raise CommandError(
                "Cache table '%s' could not be created.\nThe error was: %s." %
                    (tablename, e))
            transaction.rollback_unless_managed(using=db)
        else:
        for statement in index_output:
            curs.execute(statement)
        transaction.commit_unless_managed(using=db)
+8 −4
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@ from __future__ import absolute_import
import hashlib
import os
import re
import StringIO
import tempfile
import time
import warnings
@@ -820,9 +819,14 @@ class DBCacheTests(BaseCacheTests, TransactionTestCase):
        self.perform_cull_test(50, 18)

    def test_second_call_doesnt_crash(self):
        err = StringIO.StringIO()
        management.call_command('createcachetable', self._table_name, verbosity=0, interactive=False, stderr=err)
        self.assertTrue(b"Cache table 'test cache table' could not be created" in err.getvalue())
        with self.assertRaisesRegexp(management.CommandError,
                "Cache table 'test cache table' could not be created"):
            management.call_command(
               'createcachetable',
                self._table_name,
                verbosity=0,
                interactive=False
            )


@override_settings(USE_TZ=True)