2007-08-16 14:06:55 +08:00
|
|
|
from django.core.management.base import BaseCommand, CommandError
|
2007-12-17 14:53:15 +08:00
|
|
|
from django.core import serializers
|
2007-08-16 14:06:55 +08:00
|
|
|
|
2007-09-10 05:57:59 +08:00
|
|
|
from optparse import make_option
|
|
|
|
|
2007-08-16 14:06:55 +08:00
|
|
|
class Command(BaseCommand):
|
2007-09-10 10:07:57 +08:00
|
|
|
option_list = BaseCommand.option_list + (
|
2007-09-10 05:57:59 +08:00
|
|
|
make_option('--format', default='json', dest='format',
|
2007-12-17 19:09:56 +08:00
|
|
|
help='Specifies the output serialization format for fixtures.'),
|
2007-09-10 05:57:59 +08:00
|
|
|
make_option('--indent', default=None, dest='indent', type='int',
|
|
|
|
help='Specifies the indent level to use when pretty-printing output'),
|
2008-06-11 22:01:35 +08:00
|
|
|
make_option('-e', '--exclude', dest='exclude',action='append', default=[],
|
|
|
|
help='App to exclude (use multiple --exclude to exclude multiple apps).'),
|
2007-09-10 05:57:59 +08:00
|
|
|
)
|
2007-08-16 14:06:55 +08:00
|
|
|
help = 'Output the contents of the database as a fixture of the given format.'
|
2007-09-10 05:57:59 +08:00
|
|
|
args = '[appname ...]'
|
2007-08-16 14:06:55 +08:00
|
|
|
|
|
|
|
def handle(self, *app_labels, **options):
|
|
|
|
from django.db.models import get_app, get_apps, get_models
|
|
|
|
|
2008-06-13 08:08:50 +08:00
|
|
|
format = options.get('format','json')
|
|
|
|
indent = options.get('indent',None)
|
|
|
|
exclude = options.get('exclude',[])
|
|
|
|
show_traceback = options.get('traceback', False)
|
2008-06-11 22:01:35 +08:00
|
|
|
|
|
|
|
excluded_apps = [get_app(app_label) for app_label in exclude]
|
2007-08-16 14:06:55 +08:00
|
|
|
|
|
|
|
if len(app_labels) == 0:
|
2008-06-11 22:01:35 +08:00
|
|
|
app_list = [app for app in get_apps() if app not in excluded_apps]
|
2007-08-16 14:06:55 +08:00
|
|
|
else:
|
|
|
|
app_list = [get_app(app_label) for app_label in app_labels]
|
|
|
|
|
|
|
|
# Check that the serialization format exists; this is a shortcut to
|
|
|
|
# avoid collating all the objects and _then_ failing.
|
2007-12-17 19:09:56 +08:00
|
|
|
if format not in serializers.get_public_serializer_formats():
|
2007-12-17 14:53:15 +08:00
|
|
|
raise CommandError("Unknown serialization format: %s" % format)
|
|
|
|
|
2007-08-16 14:06:55 +08:00
|
|
|
try:
|
|
|
|
serializers.get_serializer(format)
|
|
|
|
except KeyError:
|
|
|
|
raise CommandError("Unknown serialization format: %s" % format)
|
|
|
|
|
|
|
|
objects = []
|
|
|
|
for app in app_list:
|
|
|
|
for model in get_models(app):
|
2007-12-17 17:09:08 +08:00
|
|
|
objects.extend(model._default_manager.all())
|
2007-08-16 14:06:55 +08:00
|
|
|
try:
|
|
|
|
return serializers.serialize(format, objects, indent=indent)
|
|
|
|
except Exception, e:
|
2007-12-17 19:09:32 +08:00
|
|
|
if show_traceback:
|
|
|
|
raise
|
2007-08-16 14:06:55 +08:00
|
|
|
raise CommandError("Unable to serialize database: %s" % e)
|