Created db_manage script to create,drop,upgrade,downgrade,migrate db
diff --git a/persistance/db_manage.py b/persistance/db_manage.py
new file mode 100644
index 0000000..118fe44
--- /dev/null
+++ b/persistance/db_manage.py
@@ -0,0 +1,104 @@
+import argparse
+import imp
+import os.path
+import shutil
+import sqlite3
+import sys
+
+from os import remove
+
+from web_app.app import db
+from migrate.versioning import api
+
+from config import basedir
+from config import DATABASE_URI
+from config import SQLALCHEMY_MIGRATE_REPO
+
+
+ACTIONS = {}
+
+
+def action(act):
+ def wrap(f):
+ ACTIONS[act] = f
+
+ def inner(*args, **kwargs):
+ return f(*args, **kwargs)
+ return inner
+ return wrap
+
+
+def parse_args(argv):
+ parser = argparse.ArgumentParser(
+ description="Manage DB")
+ parser.add_argument("action",
+ choices=["dropdb", "createdb", "migrate", "downgrade"])
+ return parser.parse_args(argv)
+
+
+@action("createdb")
+def createdb():
+ sqlite3.connect(os.path.join(basedir, 'app.db'))
+
+ db.create_all()
+ if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
+ api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
+ api.version_control(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
+ else:
+ api.version_control(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO,
+ api.version(SQLALCHEMY_MIGRATE_REPO))
+
+
+@action("dropdb")
+def dropdb():
+ db.create_all()
+ if os.path.exists(SQLALCHEMY_MIGRATE_REPO):
+ shutil.rmtree(SQLALCHEMY_MIGRATE_REPO)
+
+ db.drop_all()
+ if os.path.exists(os.path.join(basedir, 'app.db')):
+ remove(os.path.join(basedir, 'app.db'))
+
+
+@action("migrate")
+def migrate():
+ v = api.db_version(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
+ migration = SQLALCHEMY_MIGRATE_REPO + ('/versions/%03d_migration.py' %
+ (v+1))
+ tmp_module = imp.new_module('old_model')
+ old_model = api.create_model(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
+
+ exec old_model in tmp_module.__dict__
+ script = api.make_update_script_for_model(DATABASE_URI,
+ SQLALCHEMY_MIGRATE_REPO,
+ tmp_module.meta, db.metadata)
+ open(migration, "wt").write(script)
+ api.upgrade(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
+ v = api.db_version(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
+ print('New migration saved as ' + migration)
+ print('Current database version: ' + str(v))
+
+
+@action("upgrade")
+def upgrade():
+ api.upgrade(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
+ v = api.db_version(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
+ print('Current database version: ' + str(v))
+
+
+@action("downgrade")
+def downgrade():
+ v = api.db_version(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
+ api.downgrade(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, v - 1)
+ v = api.db_version(DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
+ print('Current database version: ' + str(v))
+
+
+def main(argv):
+ opts = parse_args(argv)
+ func = ACTIONS.get(opts.action)
+ func()
+
+
+if __name__ == '__main__':
+ exit(main(sys.argv[1:]))
\ No newline at end of file