Skip to content
This repository was archived by the owner on Apr 21, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
*.py[co]
/build
/dist
/django_fixture_generator.egg-info
6 changes: 6 additions & 0 deletions .hgignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# For people using hg-git plugin
syntax: glob
*.pyc
build
dist
django_fixture_generator.egg-info
59 changes: 42 additions & 17 deletions fixture_generator/management/commands/generate_fixture.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,14 @@ class Command(BaseCommand):
help="Specifies the output serialization format for fixtures."),
make_option("--indent", default=None, dest="indent", type="int",
help="Specifies the indent level to use when pretty-printing output"),
make_option("--default", action='store_true', default=False, dest="default_settings",
help="Use default settings for generating test database"),
)
args = "app_label.fixture"

def handle(self, fixture, **options):
default_settings = options.get('default_settings')

available_fixtures = {}
for app in settings.INSTALLED_APPS:
try:
Expand All @@ -79,25 +83,46 @@ def handle(self, fixture, **options):
fixture = available_fixtures[(app_label, fixture_name)]

requirements, models = linearize_requirements(available_fixtures, fixture)

settings.DATABASES[FIXTURE_DATABASE] = {
"ENGINE": "sqlite3",
"NAME": "fixture_gen.db",
}
old_routers = router.routers
router.routers = [FixtureRouter(models)]

if not default_settings:
settings.DATABASES[FIXTURE_DATABASE] = {
"ENGINE": "sqlite3",
"NAME": "fixture_gen.db",
}
old_routers = router.routers
router.routers = [FixtureRouter(models)]

# Creates tests databases for populating them with the fixtures
elif default_settings:
from django.test.simple import DjangoTestSuiteRunner
self.test_runner = DjangoTestSuiteRunner(verbosity=0)
self.old_config = self.test_runner.setup_databases()

try:
# migrate_all=True is for south, Django just absorbs it
call_command("syncdb", database=FIXTURE_DATABASE, verbosity=0,
interactive=False, migrate_all=True)
# create_test_db already executes syncdb
if not default_settings:
call_command("syncdb", database=FIXTURE_DATABASE, verbosity=0,
interactive=False, migrate_all=True)
for fixture_func in requirements:
fixture_func()
call_command("dumpdata",
*["%s.%s" % (m._meta.app_label, m._meta.object_name) for m in models],
**dict(options, verbosity=0, database=FIXTURE_DATABASE)
)
if not default_settings:
call_command("dumpdata",
*["%s.%s" % (m._meta.app_label, m._meta.object_name) for m in models],
**dict(options, verbosity=0, database=FIXTURE_DATABASE)
)
else:
for alias in connections._connections:
call_command("dumpdata",
*["%s.%s" % (m._meta.app_label, m._meta.object_name) for m in models],
**dict(options, verbosity=0, database=alias)
)
finally:
del settings.DATABASES[FIXTURE_DATABASE]
del connections._connections[FIXTURE_DATABASE]
router.routers = old_routers
os.remove("fixture_gen.db")
if not default_settings:
os.remove("fixture_gen.db")
del settings.DATABASES[FIXTURE_DATABASE]
del connections._connections[FIXTURE_DATABASE]
router.routers = old_routers
elif default_settings:
self.test_runner.teardown_databases(self.old_config)

3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
'Programming Language :: Python',
'Framework :: Django',
],
test_suite='runtests.runtests'
test_suite='runtests.runtests',
zip_safe=False,
)