aboutsummaryrefslogtreecommitdiff
path: root/db_create.py
diff options
context:
space:
mode:
authorCédric Bonhomme <cedric@cedricbonhomme.org>2014-04-07 23:50:16 +0200
committerCédric Bonhomme <cedric@cedricbonhomme.org>2014-04-07 23:50:16 +0200
commit40a2ac304965dfd442525dea53879976a3039369 (patch)
treea1b2a10001938503bb28fa44a2b4276d0479fe0b /db_create.py
parentBeginning of the port to PostgreSQL. (diff)
downloadnewspipe-40a2ac304965dfd442525dea53879976a3039369.tar.gz
newspipe-40a2ac304965dfd442525dea53879976a3039369.tar.bz2
newspipe-40a2ac304965dfd442525dea53879976a3039369.zip
Added database initialisation script.
Diffstat (limited to 'db_create.py')
-rw-r--r--db_create.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/db_create.py b/db_create.py
new file mode 100644
index 00000000..c6eaec7d
--- /dev/null
+++ b/db_create.py
@@ -0,0 +1,98 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Grenouille - An online service for weather data.
+# Copyright (C) 2014 Cédric Bonhomme - http://cedricbonhomme.org/
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+__author__ = "Cedric Bonhomme"
+__version__ = "$Revision: 0.2 $"
+__date__ = "$Date: 2014/03/16 $"
+__revision__ = "$Date: 2014/03/24 $"
+__copyright__ = "Copyright (c) Cedric Bonhomme"
+__license__ = "AGPLv3"
+
+from pyaggr3g470r import db
+from pyaggr3g470r.models import User, Feed, Role
+from werkzeug import generate_password_hash
+
+from sqlalchemy.engine import reflection
+from sqlalchemy.schema import (
+ MetaData,
+ Table,
+ DropTable,
+ ForeignKeyConstraint,
+ DropConstraint,
+ )
+
+def db_DropEverything(db):
+ # From http://www.sqlalchemy.org/trac/wiki/UsageRecipes/DropEverything
+
+ conn=db.engine.connect()
+
+ # the transaction only applies if the DB supports
+ # transactional DDL, i.e. Postgresql, MS SQL Server
+ trans = conn.begin()
+
+ inspector = reflection.Inspector.from_engine(db.engine)
+
+ # gather all data first before dropping anything.
+ # some DBs lock after things have been dropped in
+ # a transaction.
+ metadata = MetaData()
+
+ tbs = []
+ all_fks = []
+
+ for table_name in inspector.get_table_names():
+ fks = []
+ for fk in inspector.get_foreign_keys(table_name):
+ if not fk['name']:
+ continue
+ fks.append(
+ ForeignKeyConstraint((),(),name=fk['name'])
+ )
+ t = Table(table_name,metadata,*fks)
+ tbs.append(t)
+ all_fks.extend(fks)
+
+ for fkc in all_fks:
+ conn.execute(DropConstraint(fkc))
+
+ for table in tbs:
+ conn.execute(DropTable(table))
+
+ trans.commit()
+
+
+
+db_DropEverything(db)
+db.create_all()
+
+role_admin = Role(name="admin")
+role_user = Role(name="user")
+
+user1 = User(firstname="admin", lastname="admin", email="root@pyAggr3g470r.localhost", pwdhash=generate_password_hash("root"))
+
+user1.roles.extend([role_admin, role_user])
+
+feed1 = Feed(title="Armed and Dangerous", description="Sex, software, politics, and firearms. Life's simple pleasures...",
+ link="http://esr.ibiblio.org/?feed=rss2", site_link="http://esr.ibiblio.org/",
+ email_notification=False, enabled=True, user_id=user1.id)
+
+user1.feeds.extend([feed1])
+
+db.session.add(user1)
+db.session.commit() \ No newline at end of file
bgstack15