| | 1 | 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: |
| | 2 | |
| | 3 | {{{ |
| | 4 | import os |
| | 5 | from os.path import isdir, isfile, join, dirname |
| | 6 | import django.core.management, django.core |
| | 7 | |
| | 8 | def find_site(): |
| | 9 | """Find the site by looking at the environment.""" |
| | 10 | try: |
| | 11 | settings_module = os.environ['DJANGO_SETTINGS_MODULE'] |
| | 12 | except KeyError: |
| | 13 | raise AssertionError, "DJANGO_SETTINGS_MODULE not set." |
| | 14 | |
| | 15 | settingsl = settings_module.split('.') |
| | 16 | site = __import__(settingsl[0]) |
| | 17 | settings = __import__(settings_module, {}, {}, settingsl[-1]) |
| | 18 | return site, settings |
| | 19 | |
| | 20 | def delete_db(settings): |
| | 21 | """Delete the old database.""" |
| | 22 | engine = settings.DATABASE_ENGINE |
| | 23 | if engine == 'sqlite3': |
| | 24 | try: |
| | 25 | os.unlink(settings.DATABASE_NAME) |
| | 26 | except OSError: |
| | 27 | pass |
| | 28 | elif engine == 'mysql': |
| | 29 | import _mysql |
| | 30 | s = _mysql.connect(host=settings.DATABASE_HOST, |
| | 31 | user=settings.DATABASE_USER, |
| | 32 | passwd=settings.DATABASE_PASSWORD) |
| | 33 | for cmd in ['drop database if exists %s', |
| | 34 | 'create database %s']: |
| | 35 | s.query(cmd % settings.DATABASE_NAME) |
| | 36 | else: |
| | 37 | raise AssertionError, "Unknown database engine %s", engine |
| | 38 | |
| | 39 | def init_and_install(site): |
| | 40 | """Initialise the site and install any applications. Applications |
| | 41 | are found by looking for ``sitename/apps`` in sitename.apps.""" |
| | 42 | django.core.management.init() |
| | 43 | appdir = join(dirname(site.__file__), 'apps') |
| | 44 | for name in [name for name in os.listdir(appdir) |
| | 45 | if isdir(join(appdir, name)) |
| | 46 | and isfile(join(appdir, name, '__init__.py'))]: |
| | 47 | try: |
| | 48 | app = django.core.meta.get_app(name) |
| | 49 | django.core.management.install(app) |
| | 50 | except AttributeError, ex: |
| | 51 | pass # Exercise for reader: be more specific |
| | 52 | |
| | 53 | def main(): |
| | 54 | """Flush it all, baby!""" |
| | 55 | try: |
| | 56 | site, settings = find_site() |
| | 57 | delete_db(settings) |
| | 58 | init_and_install(site) |
| | 59 | except AssertionError, ex: |
| | 60 | print ex.args[0] |
| | 61 | |
| | 62 | if __name__ == '__main__': |
| | 63 | main() |
| | 64 | }}} |