def handle_noargs(self, **options): db = options.get('database') verbosity = options.get('verbosity') # Bypass loaddata command on migrate/syncdb to load initial data only for installed apps load_initial_data = options.get('load_initial_data') options['load_initial_data'] = False apps = [] def app_sync(sender, *args, **kwargs): created_models = kwargs.get('created_models') for model in created_models: mod_name = '.'.join(model.__module__.split('.')[:-1]) if not mod_name in apps: apps.append(mod_name) models.signals.post_syncdb.connect(app_sync) super(Command, self).handle_noargs(**options) models.signals.post_syncdb.disconnect(app_sync) # Load initial data from sync apps if load_initial_data: fixtures = [] for app in settings.INSTALLED_APPS: if not app in apps: # Preserve apps priority continue mod = import_module(app) dname = os.path.dirname(mod.__file__) fname = os.path.join(dname, 'fixtures', 'initial_data.json') if os.path.isfile(fname): fixtures.append(fname) if hasattr(mod, 'app_info'): fixtures += [os.path.join(dname, 'fixtures', f) for f in mod.app_info.get('fixtures', [])] if fixtures: call_command('loaddata', *fixtures, verbosity=verbosity, database=db, skip_validation=False) # Load custom sql for app in settings.INSTALLED_APPS: if not app in apps: # Preserve apps priority continue engine = settings.DATABASES[db]['ENGINE'].split('.')[-1] mod = import_module(app) dname = os.path.dirname(mod.__file__) app_dir = os.path.normpath(os.path.join(dname, 'sql')) custom_files = [ os.path.join(app_dir, "custom.%s.sql" % engine), os.path.join(app_dir, "custom.sql") ] for custom_file in custom_files: if os.path.exists(custom_file): print('Loading custom SQL for %s' % app) try: scripts.runfile(custom_file, db) except Exception as e: sys.stderr.write('Couldn\'t execute custom SQL for %s' % app) import traceback traceback.print_exc()
def handle(self, *args, **options): db = options['database'] verbosity = options['verbosity'] fixtures = [] sqls = [] for app in apps.app_configs: app = apps.app_configs[app] if isinstance(app, AppConfig): if app.fixtures: for fixture in app.fixtures: fixtures.append(os.path.join(app.path, 'fixtures', fixture)) if app.sql: for sql in app.sql: sqls.append(os.path.join(app.path, 'sql', sql)) if fixtures: call_command('loaddata', *fixtures, verbosity=verbosity, database=db, skip_validation=False) if sqls: for sql in sqls: try: scripts.runfile(sql, db) except Exception as e: sys.stderr.write('Couldn\'t execute "%s" SQL file.' % sql) import traceback traceback.print_exc()