#!flask/bin/python
from migrate.versioning import api
from config import SQLALCHEMY_DATABASE_URI
from config import SQLALCHEMY_MIGRATE_REPO
from app import db
from app.models import Role, Setting
import os.path
import time
import sys

def start():
    wait_time = get_waittime_from_env()

    if not connect_db(wait_time):
        print("ERROR: Couldn't connect to database server")
        exit(1)

    init_records()

def get_waittime_from_env():
    return int(os.environ.get('WAITFOR_DB', 1))

def connect_db(wait_time):
    for i in xrange(0, wait_time):
        print("INFO: Wait for database server")
        sys.stdout.flush()
        try:
            db.create_all()
            return True
        except:
            time.sleep(1)

    return False

def init_roles(db, role_names):
    name_of_roles = map(lambda r: r.name, role_names)
    rows = db.session.query(Role).filter(Role.name.in_(name_of_roles)).all()
    name_of_rows = map(lambda r: r.name, rows)
    roles = filter(lambda r: r.name not in rows, role_names)

    for role in roles:
        db.session.add(role)

def init_settings(db, setting_names):
    name_of_settings = map(lambda r: r.name, setting_names)
    rows = db.session.query(Setting).filter(Setting.name.in_(name_of_settings)).all()
    name_of_rows = map(lambda r: r.name, rows)

    settings = filter(lambda r: r.name not in rows, setting_names)

    for setting in settings:
        db.session.add(setting)

def init_records():
    # create initial user roles and turn off maintenance mode
    admin_role = Role('Administrator', 'Administrator')
    user_role = Role('User', 'User')
    maintenance_setting = Setting('maintenance', 'False')
    fullscreen_layout_setting = Setting('fullscreen_layout', 'True')
    record_helper_setting = Setting('record_helper', 'True')
    default_table_size_setting = Setting('default_record_table_size', '15')

    # Check if record already exists
    init_roles(db, [admin_role, user_role])
    init_settings(db, [maintenance_setting, fullscreen_layout_setting, record_helper_setting, default_table_size_setting])

    db_commit = db.session.commit()
    commit_version_control(db_commit)

def commit_version_control(db_commit):
    if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
        api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
        api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
    elif db_commit is not None:
        api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, api.version(SQLALCHEMY_MIGRATE_REPO))

if __name__ == '__main__':
    start()

@@ -777,32 +777,60 @@
 db, role_names):
+%0A%0A    # Get key name of data
 %0A    name_of_rol
@@ -863,24 +863,57 @@
  role_names)
+%0A%0A    # Query to get current data
 %0A    rows = 
@@ -1024,16 +1024,60 @@
 e, rows)
+%0A%0A    # Check which data that need to insert
 %0A    rol
@@ -1108,24 +1108,32 @@
 name not in 
+name_of_
 rows, role_n
@@ -1131,32 +1131,50 @@
 s, role_names)%0A%0A
+    # Insert data%0A
     for role in 
@@ -1247,16 +1247,44 @@
 _names):
+%0A%0A    # Get key name of data
 %0A    nam
@@ -1335,16 +1335,49 @@
 g_names)
+%0A%0A    # Query to get current data
 %0A    row
@@ -1446,32 +1446,76 @@
 settings)).all()
+%0A%0A    # Check which data that need to insert
 %0A    name_of_row
@@ -1542,25 +1542,24 @@
 name, rows)%0A
-%0A
     settings
@@ -1592,16 +1592,24 @@
  not in 
+name_of_
 rows, se
@@ -1618,24 +1618,42 @@
 ing_names)%0A%0A
+    # Insert data%0A
     for sett
@@ -1726,15 +1726,20 @@
 ():%0A
+    %0A
     # 
-c
+C
 reat

Fix create_db.py