aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bootstrap.py5
-rwxr-xr-xdb_create.py80
-rw-r--r--manage.py15
-rwxr-xr-xmanager.py75
-rwxr-xr-xrunserver.py5
5 files changed, 81 insertions, 99 deletions
diff --git a/bootstrap.py b/bootstrap.py
index 83862640..c5a86652 100644
--- a/bootstrap.py
+++ b/bootstrap.py
@@ -41,3 +41,8 @@ application.config['RECAPTCHA_PUBLIC_KEY'] = conf.RECAPTCHA_PUBLIC_KEY
application.config['RECAPTCHA_PRIVATE_KEY'] = conf.RECAPTCHA_PRIVATE_KEY
db = SQLAlchemy(application)
+
+def populate_g():
+ from flask import g
+ g.db = db
+ g.app = application
diff --git a/db_create.py b/db_create.py
deleted file mode 100755
index c10e4d43..00000000
--- a/db_create.py
+++ /dev/null
@@ -1,80 +0,0 @@
-#! /usr/bin/env python
-# -*- coding: utf-8 -*-
-
-__author__ = "Cedric Bonhomme"
-__version__ = "$Revision: 0.3 $"
-__date__ = "$Date: 2014/03/16 $"
-__revision__ = "$Date: 2014/04/12 $"
-__copyright__ = "Copyright (c) Cedric Bonhomme"
-__license__ = "AGPLv3"
-
-import os
-import bootstrap
-from flask import g
-
-from pyaggr3g470r.models import User, 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(g.db)
-g.db.create_all()
-
-role_admin = Role(name="admin")
-role_user = Role(name="user")
-
-user1 = User(nickname="admin",
- email=os.environ.get("ADMIN_EMAIL", "root@pyAggr3g470r.localhost"),
- pwdhash=generate_password_hash(os.environ.get("ADMIN_PASSWORD", "password")),
- activation_key="")
-user1.roles.extend([role_admin, role_user])
-
-g.db.session.add(user1)
-g.db.session.commit()
diff --git a/manage.py b/manage.py
deleted file mode 100644
index 056fef2c..00000000
--- a/manage.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#! /usr/bin/env python
-# -*- coding: utf-8 -*-
-
-from flask.ext.script import Manager
-from flask.ext.migrate import Migrate, MigrateCommand
-
-from pyaggr3g470r import app, db
-
-migrate = Migrate(app, db)
-manager = Manager(app)
-
-manager.add_command('db', MigrateCommand)
-
-if __name__ == '__main__':
- manager.run()
diff --git a/manager.py b/manager.py
index e664469a..74eb34cf 100755
--- a/manager.py
+++ b/manager.py
@@ -1,8 +1,19 @@
#!/usr/bin/env python
-from bootstrap import application, db
+import os
+from bootstrap import application, db, populate_g
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
+from werkzeug import generate_password_hash
+
+from sqlalchemy.engine import reflection
+from sqlalchemy.schema import (
+ MetaData,
+ Table,
+ DropTable,
+ ForeignKeyConstraint,
+ DropConstraint)
+
Migrate(application, db)
@@ -10,5 +21,67 @@ manager = Manager(application)
manager.add_command('db', MigrateCommand)
+@manager.command
+def db_empty():
+ "will drop every datas stocked in 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()
+
+
+@manager.command
+def db_create():
+ "Will create the database from conf parameters"
+ with application.app_context():
+ populate_g()
+ from pyaggr3g470r.models import User, Role
+ db.create_all()
+
+ role_admin = Role(name="admin")
+ role_user = Role(name="user")
+
+ user1 = User(nickname="admin",
+ email=os.environ.get("ADMIN_EMAIL",
+ "root@pyAggr3g470r.localhost"),
+ pwdhash=generate_password_hash(
+ os.environ.get("ADMIN_PASSWORD", "password")),
+ activation_key="")
+ user1.roles.extend([role_admin, role_user])
+
+ db.session.add(user1)
+ db.session.commit()
+
+
if __name__ == '__main__':
manager.run()
diff --git a/runserver.py b/runserver.py
index 5a4aa1fe..2ced409f 100755
--- a/runserver.py
+++ b/runserver.py
@@ -19,7 +19,7 @@
# 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/>.
-from bootstrap import conf, application, db
+from bootstrap import conf, application, db, populate_g
from flask.ext.babel import Babel
from flask.ext.babel import format_datetime
@@ -45,11 +45,10 @@ from flask.ext.restful import Api
from flask import g
with application.app_context():
+ populate_g()
g.api = Api(application, prefix='/api/v2.0')
g.babel = babel
g.allowed_file = allowed_file
- g.db = db
- g.app = application
from pyaggr3g470r import views
application.register_blueprint(views.articles_bp)
bgstack15