db_manage.py
126 lines
| 4.1 KiB
| text/x-python
|
PythonLexer
r252 | #!/usr/bin/env python | |||
# encoding: utf-8 | ||||
# database managment for hg app | ||||
# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com> | ||||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; version 2 | ||||
# of the License or (at your opinion) any later version of the license. | ||||
# | ||||
# 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 General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU General Public License | ||||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||||
# MA 02110-1301, USA. | ||||
""" | ||||
Created on April 10, 2010 | ||||
database managment and creation for hg app | ||||
@author: marcink | ||||
""" | ||||
r239 | from os.path import dirname as dn, join as jn | |||
r249 | import os | |||
import sys | ||||
ROOT = dn(dn(dn(os.path.realpath(__file__)))) | ||||
sys.path.append(ROOT) | ||||
r239 | from pylons_app.lib.auth import get_crypt_password | |||
from pylons_app.model import init_model | ||||
from pylons_app.model.db import User, Permission | ||||
from pylons_app.model.meta import Session, Base | ||||
from sqlalchemy.engine import create_engine | ||||
Marcin Kuzminski
|
r59 | import logging | ||
r229 | log = logging.getLogger('db manage') | |||
log.setLevel(logging.DEBUG) | ||||
console_handler = logging.StreamHandler() | ||||
console_handler.setFormatter(logging.Formatter("%(asctime)s.%(msecs)03d" | ||||
" %(levelname)-5.5s [%(name)s] %(message)s")) | ||||
log.addHandler(console_handler) | ||||
Marcin Kuzminski
|
r66 | |||
r226 | class DbManage(object): | |||
r229 | def __init__(self, log_sql): | |||
self.dbname = 'hg_app.db' | ||||
r234 | dburi = 'sqlite:////%s' % jn(ROOT, self.dbname) | |||
r229 | engine = create_engine(dburi, echo=log_sql) | |||
r226 | init_model(engine) | |||
self.sa = Session() | ||||
r243 | self.db_exists = False | |||
r226 | ||||
def check_for_db(self, override): | ||||
r229 | log.info('checking for exisiting db') | |||
r234 | if os.path.isfile(jn(ROOT, self.dbname)): | |||
r243 | self.db_exists = True | |||
r229 | log.info('database exisist') | |||
if not override: | ||||
r226 | raise Exception('database already exists') | |||
r229 | ||||
r226 | def create_tables(self, override=False): | |||
""" | ||||
Create a auth database | ||||
""" | ||||
self.check_for_db(override) | ||||
r229 | if override: | |||
log.info("database exisist and it's going to be destroyed") | ||||
r243 | if self.db_exists: | |||
os.remove(jn(ROOT, self.dbname)) | ||||
r226 | Base.metadata.create_all(checkfirst=override) | |||
r229 | log.info('Created tables for %s', self.dbname) | |||
Marcin Kuzminski
|
r59 | |||
r226 | def admin_prompt(self): | |||
import getpass | ||||
r229 | username = raw_input('Specify admin username:') | |||
r226 | password = getpass.getpass('Specify admin password:') | |||
self.create_user(username, password, True) | ||||
def create_user(self, username, password, admin=False): | ||||
r229 | log.info('creating administrator user %s', username) | |||
r226 | ||||
r234 | new_user = User() | |||
r226 | new_user.username = username | |||
new_user.password = get_crypt_password(password) | ||||
r264 | new_user.name = 'Admin' | |||
r262 | new_user.lastname = 'Admin' | |||
r263 | new_user.email = 'admin@localhost' | |||
r226 | new_user.admin = admin | |||
new_user.active = True | ||||
try: | ||||
self.sa.add(new_user) | ||||
self.sa.commit() | ||||
except: | ||||
self.sa.rollback() | ||||
raise | ||||
Marcin Kuzminski
|
r66 | |||
r239 | def create_permissions(self): | |||
r240 | #module.(access|create|change|delete)_[name] | |||
perms = [('admin.access_home', 'Access to admin user view'), | ||||
r239 | ||||
] | ||||
for p in perms: | ||||
new_perm = Permission() | ||||
new_perm.permission_name = p[0] | ||||
new_perm.permission_longname = p[1] | ||||
try: | ||||
self.sa.add(new_perm) | ||||
self.sa.commit() | ||||
except: | ||||
self.sa.rollback() | ||||
raise | ||||
Marcin Kuzminski
|
r66 | if __name__ == '__main__': | ||
r229 | dbmanage = DbManage(log_sql=True) | |||
r226 | dbmanage.create_tables(override=True) | |||
r239 | dbmanage.admin_prompt() | |||
dbmanage.create_permissions() | ||||
Marcin Kuzminski
|
r66 | |||