You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.9 KiB
70 lines
2.9 KiB
from django.core.management.base import NoArgsCommand, CommandError |
|
from django.core.management.color import no_style |
|
from optparse import make_option |
|
|
|
class Command(NoArgsCommand): |
|
option_list = NoArgsCommand.option_list + ( |
|
make_option('--verbosity', action='store', dest='verbosity', default='1', |
|
type='choice', choices=['0', '1', '2'], |
|
help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'), |
|
make_option('--noinput', action='store_false', dest='interactive', default=True, |
|
help='Tells Django to NOT prompt the user for input of any kind.'), |
|
) |
|
help = "Executes ``sqlflush`` on the current database." |
|
|
|
def handle_noargs(self, **options): |
|
from django.conf import settings |
|
from django.db import connection, transaction, models |
|
from django.core.management.sql import sql_flush, emit_post_sync_signal |
|
|
|
verbosity = int(options.get('verbosity', 1)) |
|
interactive = options.get('interactive') |
|
|
|
self.style = no_style() |
|
|
|
# Import the 'management' module within each installed app, to register |
|
# dispatcher events. |
|
for app_name in settings.INSTALLED_APPS: |
|
try: |
|
__import__(app_name + '.management', {}, {}, ['']) |
|
except ImportError: |
|
pass |
|
|
|
sql_list = sql_flush(self.style, only_django=True) |
|
|
|
if interactive: |
|
confirm = raw_input("""You have requested a flush of the database. |
|
This will IRREVERSIBLY DESTROY all data currently in the %r database, |
|
and return each table to the state it was in after syncdb. |
|
Are you sure you want to do this? |
|
|
|
Type 'yes' to continue, or 'no' to cancel: """ % settings.DATABASE_NAME) |
|
else: |
|
confirm = 'yes' |
|
|
|
if confirm == 'yes': |
|
try: |
|
cursor = connection.cursor() |
|
for sql in sql_list: |
|
cursor.execute(sql) |
|
except Exception, e: |
|
transaction.rollback_unless_managed() |
|
raise CommandError("""Database %s couldn't be flushed. Possible reasons: |
|
* The database isn't running or isn't configured correctly. |
|
* At least one of the expected database tables doesn't exist. |
|
* The SQL was invalid. |
|
Hint: Look at the output of 'django-admin.py sqlflush'. That's the SQL this command wasn't able to run. |
|
The full error: %s""" % (settings.DATABASE_NAME, e)) |
|
transaction.commit_unless_managed() |
|
|
|
# Emit the post sync signal. This allows individual |
|
# applications to respond as if the database had been |
|
# sync'd from scratch. |
|
emit_post_sync_signal(models.get_models(), verbosity, interactive) |
|
|
|
# Reinstall the initial_data fixture. |
|
from django.core.management import call_command |
|
call_command('loaddata', 'initial_data', **options) |
|
|
|
else: |
|
print "Flush cancelled."
|
|
|