def handle(self, *args, **options): if 'test' not in sys.argv or not settings.FIXTURE_DIRS: print 'ERROR: not in test env' exit(1) HandleSouth.disable() call_command('syncdb', interactive=False) HandleSouth.enable() # migration already done call_command('loaddata', 'db_south', verbosity='0') call_command('loaddata', 'db_user', verbosity='0') for app in HandleSouth.get_apps(): if not self.has_fixtures(app): continue print 'loading fixtures: %s' % app call_command('loaddata', 'db_%s' % app, verbosity='0') nb = MigrationHistory.objects.filter(app_name=app).count() files = os.listdir('%s/%s/migrations' % (settings.ROOT_DIR, app)) migrations = [migration for migration in files if self.regex.match(migration)] migrations.sort() for migration in migrations[nb:]: # XXX schemamigration will always be done by the syncdb command # they shouldn't be done again: e.g raise table not found # datamigration are 'manually' created unlike # schemamigration so a schemamigration should always # contain '_auto__' in its name if '_auto__' in migration: call_command('migrate', app, migration, fake=True) else: call_command('migrate', app, migration) self.migrate(app) # update the done migration self.migrate('south')
def main(): argv = sys.argv # to set DJANGO_SETTINGS_MODULE which is mandatory to use django for idx in range(len(sys.argv)): if sys.argv[idx].startswith('--settings'): setting = sys.argv.pop(idx) if '=' in setting: setting = setting.split('=', 1)[1] else: setting = sys.argv.pop(idx) os.environ.setdefault('DJANGO_SETTINGS_MODULE', setting) break if 'DJANGO_SETTINGS_MODULE' not in os.environ: os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'baobab.settings') # XXX fixe me need the settings to be configure from baobab.cron import exec_cron if len(argv) < 2: execute_from_command_line(argv) sys.exit(0) if argv[1] == 'syncdb': # will create the db, run all migration, add a default user execute_from_command_line( [argv[0], 'syncdb', '--migrate', '--noinput']) default_user() elif argv[1] == 'setup-dev': HandleSouth.disable() fixtures = [] for rep in settings.FIXTURE_DIRS: tmp = map(lambda x: x.split('.', 1)[0], os.listdir(rep)) fixtures.extend(filter(lambda x: x.startswith('db_'), tmp)) call_command('syncdb', interactive=False) default_user() print 'loading fixtures ...' call_command('loaddata', *fixtures, verbosity=0) elif argv[1] == 'test': apps = [ name.split('.', 1)[1] for name in settings.INSTALLED_APPS if name.startswith('baobab.') ] if not [arg for arg in sys.argv if arg.split('.')[0] in apps]: sys.argv.extend(apps) execute_from_command_line(sys.argv) elif len(argv) > 2 and argv[1] == 'migrate' and argv[2] == 'fixtures': sys.argv.append('test') execute_from_command_line([argv[0], 'migrate_fixtures']) elif not exec_cron(argv[1]): execute_from_command_line(argv)
def main(): argv = sys.argv # to set DJANGO_SETTINGS_MODULE which is mandatory to use django for idx in range(len(sys.argv)): if sys.argv[idx].startswith('--settings'): setting = sys.argv.pop(idx) if '=' in setting: setting = setting.split('=', 1)[1] else: setting = sys.argv.pop(idx) os.environ.setdefault('DJANGO_SETTINGS_MODULE', setting) break if 'DJANGO_SETTINGS_MODULE' not in os.environ: os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'baobab.settings') # XXX fixe me need the settings to be configure from baobab.cron import exec_cron if len(argv) < 2: execute_from_command_line(argv) sys.exit(0) if argv[1] == 'syncdb': # will create the db, run all migration, add a default user execute_from_command_line([argv[0], 'syncdb', '--migrate', '--noinput']) default_user() elif argv[1] == 'setup-dev': HandleSouth.disable() fixtures = [] for rep in settings.FIXTURE_DIRS: tmp = map(lambda x: x.split('.', 1)[0], os.listdir(rep)) fixtures.extend(filter(lambda x: x.startswith('db_'), tmp)) call_command('syncdb', interactive=False) default_user() print 'loading fixtures ...' call_command('loaddata', *fixtures, verbosity=0) elif argv[1] == 'test': apps = [name.split('.', 1)[1] for name in settings.INSTALLED_APPS if name.startswith('baobab.')] if not [arg for arg in sys.argv if arg.split('.')[0] in apps]: sys.argv.extend(apps) execute_from_command_line(sys.argv) elif len(argv) > 2 and argv[1] == 'migrate' and argv[2] == 'fixtures': sys.argv.append('test') execute_from_command_line([argv[0], 'migrate_fixtures']) elif not exec_cron(argv[1]): execute_from_command_line(argv)