magic-removal: Added a 'reset' command to management that executes the output of the 'sqlreset' command.

git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2214 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2006-02-01 13:21:16 +00:00
parent 2cdd5b1b37
commit 8df94de53b
1 changed files with 57 additions and 5 deletions

View File

@ -297,7 +297,7 @@ def get_sql_initial_data(app):
opts = klass._meta
# Add custom SQL, if it's available.
# FIXME: THis probably needs changing
# FIXME: This probably needs changing
sql_files = [os.path.join(app_dir, opts.module_name + '.' + settings.DATABASE_ENGINE + '.sql'),
os.path.join(app_dir, opts.module_name + '.sql')]
for sql_file in sql_files:
@ -315,7 +315,6 @@ def get_sql_initial_data(app):
get_sql_initial_data.help_doc = "Prints the initial INSERT SQL statements for the given app name(s)."
get_sql_initial_data.args = APP_ARGS
def get_sql_sequence_reset(app):
"Returns a list of the SQL statements to reset PostgreSQL sequences for the given app."
from django.db import backend, models
@ -551,6 +550,50 @@ The full error: %s\n""" % \
install.help_doc = "Executes ``sqlall`` for the given app(s) in the current database."
install.args = APP_ARGS
def reset(app):
"Executes the equivalent of 'get_sql_reset' in the current database."
from django.db import connection
from cStringIO import StringIO
app_name = app.__name__[app.__name__.rindex('.')+1:]
app_label = app_name.split('.')[-1]
# First, try validating the models.
s = StringIO()
num_errors = get_validation_errors(s)
if num_errors:
sys.stderr.write("Error: %s couldn't be installed, because there were errors in your model:\n" % app_name)
s.seek(0)
sys.stderr.write(s.read())
sys.exit(1)
sql_list = get_sql_reset(app)
confirm = raw_input("""
You have requested a database reset.
This will IRREVERSIBLY DESTROY any data in your database.
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: """)
if confirm == 'yes':
try:
cursor = connection.cursor()
for sql in sql_list:
cursor.execute(sql)
except Exception, e:
sys.stderr.write("""Error: %s couldn't be installed. Possible reasons:
* The database isn't running or isn't configured correctly.
* At least one of the database tables already exists.
* The SQL was invalid.
Hint: Look at the output of 'django-admin.py sqlreset %s'. That's the SQL this command wasn't able to run.
The full error: %s\n""" % \
(app_name, app_label, e))
connection.rollback()
sys.exit(1)
connection.commit()
else:
print "Reset cancelled."
reset.help_doc = "Executes ``sqlreset`` for the given app(s) in the current database."
reset.args = APP_ARGS
def installperms(app):
"Installs any permissions for the given app, if needed."
from django.contrib.auth.models import Permission
@ -720,9 +763,9 @@ def inspectdb(db_name):
rel = relations[i]
rel_to = rel[1] == table_name and "'self'" or table2model(rel[1])
if column_name.endswith('_id'):
field_desc = '%s = models.ForeignKey(%s' % (column_name[:-3], rel_to)
field_desc = '%s = models.ForeignKey(%s)' % (column_name[:-3], rel_to)
else:
field_desc = '%s = models.ForeignKey(%s, db_column=%r' % (column_name, rel_to, column_name)
field_desc = '%s = models.ForeignKey(%s, db_column=%r)' % (column_name, rel_to, column_name)
else:
try:
field_type = introspection_module.DATA_TYPES_REVERSE[row[1]]
@ -1001,6 +1044,7 @@ DEFAULT_ACTION_MAPPING = {
'inspectdb': inspectdb,
'install': install,
'installperms': installperms,
'reset': reset,
'runserver': runserver,
'shell': run_shell,
'sql': get_sql_create,
@ -1015,7 +1059,15 @@ DEFAULT_ACTION_MAPPING = {
'validate': validate,
}
NO_SQL_TRANSACTION = ('adminindex', 'createcachetable', 'dbcheck', 'install', 'installperms', 'sqlindexes')
NO_SQL_TRANSACTION = (
'adminindex',
'createcachetable',
'dbcheck',
'install',
'installperms',
'reset',
'sqlindexes'
)
class DjangoOptionParser(OptionParser):
def print_usage_and_exit(self):