| Version 1 (modified by , 20 years ago) ( diff ) |
|---|
Sick of running django-admin repeatedly to init your site and install each of your apps when you've made lots of changes to the model? miniflush.py will do all the heavy lifting for you:
import os
from os.path import isdir, isfile, join, dirname
import django.core.management, django.core
def find_site():
"""Find the site by looking at the environment."""
try:
settings_module = os.environ['DJANGO_SETTINGS_MODULE']
except KeyError:
raise AssertionError, "DJANGO_SETTINGS_MODULE not set."
settingsl = settings_module.split('.')
site = __import__(settingsl[0])
settings = __import__(settings_module, {}, {}, settingsl[-1])
return site, settings
def delete_db(settings):
"""Delete the old database."""
engine = settings.DATABASE_ENGINE
if engine == 'sqlite3':
try:
os.unlink(settings.DATABASE_NAME)
except OSError:
pass
elif engine == 'mysql':
import _mysql
s = _mysql.connect(host=settings.DATABASE_HOST,
user=settings.DATABASE_USER,
passwd=settings.DATABASE_PASSWORD)
for cmd in ['drop database if exists %s',
'create database %s']:
s.query(cmd % settings.DATABASE_NAME)
else:
raise AssertionError, "Unknown database engine %s", engine
def init_and_install(site):
"""Initialise the site and install any applications. Applications
are found by looking for ``sitename/apps`` in sitename.apps."""
django.core.management.init()
appdir = join(dirname(site.__file__), 'apps')
for name in [name for name in os.listdir(appdir)
if isdir(join(appdir, name))
and isfile(join(appdir, name, '__init__.py'))]:
try:
app = django.core.meta.get_app(name)
django.core.management.install(app)
except AttributeError, ex:
pass # Exercise for reader: be more specific
def main():
"""Flush it all, baby!"""
try:
site, settings = find_site()
delete_db(settings)
init_and_install(site)
except AssertionError, ex:
print ex.args[0]
if __name__ == '__main__':
main()
Note:
See TracWiki
for help on using the wiki.